Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of OldFathomlessVoidling v0.10.2
plugins/viliger-FathomlessVoidling/FathomlessVoidling.dll
Decompiled 6 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.GameOver; using EntityStates.NullifierMonster; using EntityStates.VoidRaidCrab.Weapon; using FathomlessVoidling.ModCompat; using FathomlessVoidling.VoidEnding; using FathomlessVoidling.VoidlingEntityStates; using FathomlessVoidling.VoidlingEntityStates.Phase1; using FathomlessVoidling.VoidlingEntityStates.Phase2; using FathomlessVoidling.VoidlingEntityStates.Phase3; using HG; using On.RoR2; using R2API; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.CharacterAI; using RoR2.Navigation; using RoR2.Projectile; using RoR2.Skills; using RoR2BepInExPack.GameAssetPathsBetter; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.ResourceManagement.AsyncOperations; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("FathomlessVoidling")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("FathomlessVoidling")] [assembly: AssemblyTitle("FathomlessVoidling")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace FathomlessVoidling { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.Nuxlar.FathomlessVoidling", "FathomlessVoidling", "0.10.1")] public class FathomlessVoidlingPlugin : BaseUnityPlugin { public const string ModName = "FathomlessVoidling"; public const string Version = "0.10.1"; public const string GUID = "com.Nuxlar.FathomlessVoidling"; public void Awake() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) Log.Init(((BaseUnityPlugin)this).Logger); ModConfig.InitConfig(((BaseUnityPlugin)this).Config); SetupVoidling.SetupStuff(); SetupStage.SetupStuff(); Addressables.LoadAssetAsync<GameEndingDef>((object)"RoR2/DLC1/GameModes/VoidEnding.asset").WaitForCompletion().gameOverControllerState = new SerializableEntityStateType(typeof(VoidEndingStart)); Language.collectLanguageRootFolders += Language_collectLanguageRootFolders; } private void Language_collectLanguageRootFolders(List<string> folders) { folders.Add(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "Language")); } } internal static class Log { private 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 ModConfig { public static ConfigEntry<bool> EnableVoidCutscene; public static ConfigEntry<bool> enableAltMoon; public static ConfigEntry<bool> enableVoidFog; public static ConfigEntry<float> baseHealth; public static ConfigEntry<float> levelHealth; public static ConfigEntry<float> baseDamage; public static ConfigEntry<float> levelDamage; public static ConfigEntry<float> baseArmor; public static ConfigEntry<float> baseAtkSpd; public static ConfigEntry<float> baseSpd; public static ConfigEntry<float> acceleration; public static ConfigEntry<int> primCD; public static ConfigEntry<int> secCD; public static ConfigEntry<int> utilCD; public static ConfigEntry<int> specCD; public static void InitConfig(ConfigFile config) { enableAltMoon = config.Bind<bool>("General", "Alt Moon", true, "Toggle Void Locus as an alternative to the moon. Adds stage 5 Locus portal and item cauldrons."); enableVoidFog = config.Bind<bool>("General", "Pillar Fog", false, "Toggle void pillar fog."); baseHealth = config.Bind<float>("Stats", "Base Health", 1250f, "Vanilla: 2000"); levelHealth = config.Bind<float>("Stats", "Level Health", 350f, "Health gained per level. Vanilla: 600"); baseDamage = config.Bind<float>("Stats", "Base Damage", 15f, "Vanilla: 15"); levelDamage = config.Bind<float>("Stats", "Level Damage", 3f, "Damage gained per level. Vanilla: 3"); baseArmor = config.Bind<float>("Stats", "Base Armor", 30f, "Vanilla: 20"); baseAtkSpd = config.Bind<float>("Stats", "Base Attack Speed", 1.25f, "Vanilla: 1"); baseSpd = config.Bind<float>("Stats", "Base Move Speed", 90f, "Vanilla: 45"); acceleration = config.Bind<float>("Stats", "Acceleration", 45f, "Vanilla: 20"); primCD = config.Bind<int>("Skills", "Primary Cooldown", 10, "Cooldown for Disillusion (Main missile attack)."); secCD = config.Bind<int>("Skills", "Secondary Cooldown", 40, "Cooldown for Secondary (Vacuum, Singularity, Crush)."); utilCD = config.Bind<int>("Skills", "Util Cooldown", 20, "Cooldown for Transpose (Blink)."); specCD = config.Bind<int>("Skills", "Special Cooldown", 30, "Cooldown for Special (Rend, SpinBeam, Reap)."); EnableVoidCutscene = config.Bind<bool>("General", "Enable Void outro cutscene", true, "Enables somewhat unfinished void outro cutscene."); if (RiskOfOptionsCompat.enabled) { RiskOfOptionsCompat.CreateNewOption(enableAltMoon); RiskOfOptionsCompat.CreateNewOption(enableVoidFog); RiskOfOptionsCompat.CreateNewOption(EnableVoidCutscene); RiskOfOptionsCompat.CreateNewOption(baseHealth, 1000f, 2000f, 50f); RiskOfOptionsCompat.CreateNewOption(levelHealth, 100f, 500f, 25f); RiskOfOptionsCompat.CreateNewOption(baseDamage, 10f, 20f, 0.5f); RiskOfOptionsCompat.CreateNewOption(levelDamage, 1f, 6f, 0.25f); RiskOfOptionsCompat.CreateNewOption(baseArmor, 20f, 60f, 5f); RiskOfOptionsCompat.CreateNewOption(baseAtkSpd, 0.5f, 2f, 0.25f); RiskOfOptionsCompat.CreateNewOption(baseSpd, 45f, 135f, 5f); RiskOfOptionsCompat.CreateNewOption(acceleration, 20f, 70f, 5f); RiskOfOptionsCompat.CreateNewOption(primCD, 1, 10); RiskOfOptionsCompat.CreateNewOption(secCD, 30, 50); RiskOfOptionsCompat.CreateNewOption(utilCD, 10, 30); RiskOfOptionsCompat.CreateNewOption(specCD, 20, 40); RiskOfOptionsCompat.SetDescription(); } } } public class SetupStage { public static SpawnCard locusPortalCard; public static void SetupStuff() { //IL_0005: 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_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown Addressables.LoadAssetAsync<SceneDef>((object)"RoR2/DLC1/voidraid/voidraid.asset").WaitForCompletion().blockOrbitalSkills = false; if (!ModConfig.enableVoidFog.Value) { VoidStageMissionController.RequestFog += new hook_RequestFog(VoidStageMissionController_RequestFog); } if (ModConfig.enableAltMoon.Value) { locusPortalCard = Addressables.LoadAssetAsync<SpawnCard>((object)"RoR2/DLC1/PortalVoid/iscVoidPortal.asset").WaitForCompletion(); Stage.onServerStageBegin += Stage_onServerStageBegin; TeleporterInteraction.AttemptToSpawnAllEligiblePortals += new hook_AttemptToSpawnAllEligiblePortals(TeleporterInteraction_AttemptToSpawnAllEligiblePortals1); } } private static FogRequest VoidStageMissionController_RequestFog(orig_RequestFog orig, VoidStageMissionController self, IZone zone) { return null; } private static void TeleporterInteraction_AttemptToSpawnAllEligiblePortals1(orig_AttemptToSpawnAllEligiblePortals orig, TeleporterInteraction self) { //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Expected O, but got Unknown //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Expected O, but got Unknown //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Expected O, but got Unknown if (self.beginContextString.Contains("LUNAR")) { List<PortalSpawner> list = self.portalSpawners.ToList(); PortalSpawner val = list.Find((PortalSpawner x) => (Object)(object)x.portalSpawnCard == (Object)(object)locusPortalCard); if ((Object)(object)val != (Object)null) { list.Remove(val); self.portalSpawners = list.ToArray(); } if (!NetworkServer.active) { return; } DirectorCore instance = DirectorCore.instance; DirectorPlacementRule val2 = new DirectorPlacementRule { minDistance = 10f, maxDistance = 40f, placementMode = (PlacementMode)1, position = ((Component)self).transform.position, spawnOnTarget = ((Component)self).transform }; DirectorSpawnRequest val3 = new DirectorSpawnRequest(locusPortalCard, val2, self.rng); GameObject val4 = instance.TrySpawnObject(val3); if (Object.op_Implicit((Object)(object)val4)) { NetworkServer.Spawn(val4); Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = "PORTAL_VOID_OPEN" }); } } orig.Invoke(self); } private static void Stage_onServerStageBegin(Stage stage) { //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_005a: 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_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) if (!(stage.sceneDef.cachedName == "voidstage")) { return; } AsyncOperationHandle<GameObject> handle1 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_LunarCauldrons.LunarCauldron__RedToWhite_Variant_prefab); if (handle1.IsValid()) { handle1.Completed += delegate(AsyncOperationHandle<GameObject> result) { //IL_0061: 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_0051: Unknown result type (might be due to invalid IL or missing references) if (result.IsDone && Object.op_Implicit((Object)(object)result.Result)) { GameObject obj5 = Object.Instantiate<GameObject>(result.Result, new Vector3(-142.67f, 29.94f, 242.74f), Quaternion.identity); obj5.transform.eulerAngles = new Vector3(0f, 66f, 0f); NetworkServer.Spawn(obj5); } Addressables.Release<GameObject>(handle1); }; } AsyncOperationHandle<GameObject> handle2 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_LunarCauldrons.LunarCauldron__GreenToRed_Variant_prefab); if (handle2.IsValid()) { handle2.Completed += delegate(AsyncOperationHandle<GameObject> result) { //IL_00b0: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) if (result.IsDone && Object.op_Implicit((Object)(object)result.Result)) { GameObject obj3 = Object.Instantiate<GameObject>(result.Result, new Vector3(-136.76f, 29.94f, 246.51f), Quaternion.identity); obj3.transform.eulerAngles = new Vector3(0f, 66f, 0f); NetworkServer.Spawn(obj3); GameObject obj4 = Object.Instantiate<GameObject>(result.Result, new Vector3(-149.74f, 29.93f, 239.7f), Quaternion.identity); obj4.transform.eulerAngles = new Vector3(0f, 66f, 0f); NetworkServer.Spawn(obj4); } Addressables.Release<GameObject>(handle2); }; } AsyncOperationHandle<GameObject> val = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_LunarCauldrons.LunarCauldron__WhiteToGreen_prefab); if (!val.IsValid()) { return; } val.Completed += delegate(AsyncOperationHandle<GameObject> result) { //IL_00b0: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) if (result.IsDone && Object.op_Implicit((Object)(object)result.Result)) { GameObject obj = Object.Instantiate<GameObject>(result.Result, new Vector3(-157.41f, 29.97f, 237.12f), Quaternion.identity); obj.transform.eulerAngles = new Vector3(0f, 66f, 0f); NetworkServer.Spawn(obj); GameObject obj2 = Object.Instantiate<GameObject>(result.Result, new Vector3(-126.63f, 29.93f, 249.1f), Quaternion.identity); obj2.transform.eulerAngles = new Vector3(0f, 66f, 0f); NetworkServer.Spawn(obj2); } Addressables.Release<GameObject>(handle2); }; } } public class SetupVoidling { protected class SkillParams { public string name; public string nameToken = "FATHOMLESS_VOIDLING_SKILL_NO_NAME"; public string descriptionToken = "FATHOMLESS_VOIDLING_SKILL_NO_DESCRIPTION"; public Sprite icon; public string activationStateMachine = "Body"; public SerializableEntityStateType activationState; public InterruptPriority interruptPriority = (InterruptPriority)1; public float baseRechargeInterval = 1f; public int baseMaxStock = 1; public int rechargeStock = 1; public int requiredStock = 1; public int stockToConsume = 1; public bool resetCooldownTimerOnUse; public bool fullRestockOnAssign = true; public bool dontAllowPAstMaxStocks; public bool beginSkillCooldownOnSkillEnd; public bool cancelSprintingOnActivation = true; public bool forceSprintDuringState; public bool canceledFromSprinting; public bool isCombatSkill = true; public bool mustKeyPress; public SkillParams(string name, SerializableEntityStateType activationState) { //IL_0023: 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_0073: Unknown result type (might be due to invalid IL or missing references) this.name = name; this.activationState = activationState; } } public static void SetupStuff() { ModifyBodies(); ModifyMasters(); SetupProjectiles(); RegisterEntityStates(); } private static void RegisterEntityStates() { //IL_0002: 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_0012: 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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) bool flag = default(bool); ContentAddition.AddEntityState<Transpose>(ref flag); ContentAddition.AddEntityState<ChargeRend>(ref flag); ContentAddition.AddEntityState<FathomlessVoidling.VoidlingEntityStates.Phase1.Disillusion>(ref flag); ContentAddition.AddEntityState<Rend>(ref flag); ContentAddition.AddEntityState<FathomlessVoidling.VoidlingEntityStates.Phase2.Disillusion>(ref flag); ContentAddition.AddEntityState<ChargeCrush>(ref flag); ContentAddition.AddEntityState<Crush>(ref flag); ContentAddition.AddEntityState<FathomlessVoidling.VoidlingEntityStates.Phase3.Disillusion>(ref flag); ContentAddition.AddEntityState<VoidEndingPlayCutscene>(ref flag); ContentAddition.AddEntityState<VoidEndingSetSceneAndWaitForPlayers>(ref flag); ContentAddition.AddEntityState<VoidEndingStart>(ref flag); } public static void SetupProjectiles() { //IL_0005: 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_0028: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: 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_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) GameObject val = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Grandparent/GrandparentBoulder.prefab").WaitForCompletion(), "VoidMeteor", true); GameObject val2 = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Grandparent/GrandparentBoulderGhost.prefab").WaitForCompletion(), "VoidMeteorGhost", false); ProjectileController component = val.GetComponent<ProjectileController>(); component.cannotBeDeleted = true; val.transform.localScale = new Vector3(1.75f, 1.75f, 1.75f); val2.transform.localScale = new Vector3(2f, 2f, 2f); ((Renderer)((Component)val2.transform.GetChild(0).GetChild(0)).GetComponent<MeshRenderer>()).materials = (Material[])(object)new Material[2] { Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Grandparent/matGrandparentBoulderProjectile.mat").WaitForCompletion(), Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/EliteVoid/matEliteVoidOverlay.mat").WaitForCompletion() }; component.ghostPrefab = val2; Crush.meteorPrefab = val; ContentAddition.AddProjectile(Crush.meteorPrefab); Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidRaidCrab/VoidRaidCrabMissileProjectile.prefab").WaitForCompletion().GetComponent<ProjectileSteerTowardTarget>() .rotationSpeed = 180f; } private static void ModifyBodies() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: 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_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) SkillDef val = CreateSkillDef(new SkillParams("FathomlessVoidlingTranspose", new SerializableEntityStateType(typeof(Transpose))) { nameToken = "FATHOMLESS_VOIDLING_TRANSPOSE", activationStateMachine = "Body", baseMaxStock = 1, baseRechargeInterval = ModConfig.utilCD.Value, beginSkillCooldownOnSkillEnd = true, canceledFromSprinting = false, cancelSprintingOnActivation = false, fullRestockOnAssign = true, interruptPriority = (InterruptPriority)1, isCombatSkill = true, mustKeyPress = false, rechargeStock = 1, requiredStock = 1, stockToConsume = 1 }); SkillFamily val2 = CreateSkillFamily("FathomlessVoidlingTransposeFamily", val); ContentAddition.AddSkillDef(val); ContentAddition.AddSkillFamily(val2); GameObject obj = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidRaidCrab/MiniVoidRaidCrabBodyPhase1.prefab").WaitForCompletion(); AdjustStats(obj); AdjustP1Skills(obj, val2); GameObject obj2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidRaidCrab/MiniVoidRaidCrabBodyPhase2.prefab").WaitForCompletion(); AdjustStats(obj2); AdjustP2Skills(obj2, val2); GameObject obj3 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidRaidCrab/MiniVoidRaidCrabBodyPhase3.prefab").WaitForCompletion(); AdjustStats(obj3); AdjustP3Skills(obj3, val2); static void AdjustStats(GameObject gameObject) { CharacterBody component = gameObject.GetComponent<CharacterBody>(); component.subtitleNameToken = "FATHOMLESS_VOIDLING_BODY_SUBTITLE"; component.baseMaxHealth = ModConfig.baseHealth.Value; component.levelMaxHealth = ModConfig.levelHealth.Value; component.baseDamage = ModConfig.baseDamage.Value; component.levelDamage = ModConfig.levelDamage.Value; component.baseAttackSpeed = ModConfig.baseAtkSpd.Value; component.baseMoveSpeed = ModConfig.baseSpd.Value; component.baseAcceleration = ModConfig.acceleration.Value; component.baseArmor = ModConfig.baseArmor.Value; } } private static void AdjustP1Skills(GameObject bodyObject, SkillFamily transposeFamily) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) SkillLocator component = bodyObject.GetComponent<SkillLocator>(); component.primary = null; component.secondary = null; component.utility = null; component.special = null; GenericSkill val = default(GenericSkill); while (bodyObject.TryGetComponent<GenericSkill>(ref val)) { Object.DestroyImmediate((Object)(object)val); } SkillDef val2 = CreateSkillDef(new SkillParams("FathomlessVoidlingSkillPrimaryP1", new SerializableEntityStateType(typeof(FathomlessVoidling.VoidlingEntityStates.Phase1.Disillusion))) { nameToken = "FATHOMLESS_VOIDLING_DISILLUSION", activationStateMachine = "Weapon", baseMaxStock = 1, baseRechargeInterval = ModConfig.primCD.Value, beginSkillCooldownOnSkillEnd = true, canceledFromSprinting = false, cancelSprintingOnActivation = false, fullRestockOnAssign = true, interruptPriority = (InterruptPriority)1, isCombatSkill = true, mustKeyPress = false, rechargeStock = 1, requiredStock = 1, stockToConsume = 1 }); SkillFamily val3 = CreateSkillFamily("FathomlessVoidlingSkillFamilyPrimaryP1", val2); GenericSkill val4 = bodyObject.AddComponent<GenericSkill>(); val4._skillFamily = val3; component.primary = val4; ContentAddition.AddSkillDef(val2); ContentAddition.AddSkillFamily(val3); SkillDef val5 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidRaidCrab/RaidCrabVacuumAttack.asset").WaitForCompletion(); val5.baseRechargeInterval = ModConfig.secCD.Value; SkillFamily val6 = CreateSkillFamily("FathomlessVoidlingSkillFamilySecondaryP1", val5); GenericSkill val7 = bodyObject.AddComponent<GenericSkill>(); val7._skillFamily = val6; component.secondary = val7; ContentAddition.AddSkillFamily(val6); GenericSkill val8 = bodyObject.AddComponent<GenericSkill>(); val8._skillFamily = transposeFamily; component.utility = val8; SkillDef val9 = CreateSkillDef(new SkillParams("FathomlessVoidlingSkillSpecialP1", new SerializableEntityStateType(typeof(ChargeRend))) { nameToken = "FATHOMLESS_VOIDLING_REND", activationStateMachine = "Body", baseMaxStock = 1, baseRechargeInterval = ModConfig.specCD.Value, beginSkillCooldownOnSkillEnd = true, canceledFromSprinting = false, cancelSprintingOnActivation = false, fullRestockOnAssign = true, interruptPriority = (InterruptPriority)1, isCombatSkill = true, mustKeyPress = false, rechargeStock = 1, requiredStock = 1, stockToConsume = 1 }); SkillFamily val10 = CreateSkillFamily("FathomlessVoidlingSkillFamilySpecialP1", val9); GenericSkill val11 = bodyObject.AddComponent<GenericSkill>(); val11._skillFamily = val10; component.special = val11; ContentAddition.AddSkillDef(val9); ContentAddition.AddSkillFamily(val10); } private static void AdjustP2Skills(GameObject bodyObject, SkillFamily transposeFamily) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) SkillLocator component = bodyObject.GetComponent<SkillLocator>(); component.primary = null; component.secondary = null; component.utility = null; component.special = null; GenericSkill val = default(GenericSkill); while (bodyObject.TryGetComponent<GenericSkill>(ref val)) { Object.DestroyImmediate((Object)(object)val); } SkillDef val2 = CreateSkillDef(new SkillParams("FathomlessVoidlingSkillPrimaryP2", new SerializableEntityStateType(typeof(FathomlessVoidling.VoidlingEntityStates.Phase2.Disillusion))) { nameToken = "FATHOMLESS_VOIDLING_DISILLUSION", activationStateMachine = "Weapon", baseMaxStock = 1, baseRechargeInterval = ModConfig.primCD.Value, beginSkillCooldownOnSkillEnd = true, canceledFromSprinting = false, cancelSprintingOnActivation = false, fullRestockOnAssign = true, interruptPriority = (InterruptPriority)1, isCombatSkill = true, mustKeyPress = false, rechargeStock = 1, requiredStock = 1, stockToConsume = 1 }); SkillFamily val3 = CreateSkillFamily("FathomlessVoidlingSkillFamilyPrimaryP2", val2); GenericSkill val4 = bodyObject.AddComponent<GenericSkill>(); val4._skillFamily = val3; component.primary = val4; ContentAddition.AddSkillDef(val2); ContentAddition.AddSkillFamily(val3); SkillDef val5 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidRaidCrab/RaidCrabVacuumAttack.asset").WaitForCompletion(); val5.baseRechargeInterval = ModConfig.secCD.Value; SkillFamily val6 = CreateSkillFamily("FathomlessVoidlingSkillFamilySecondaryP2", val5); GenericSkill val7 = bodyObject.AddComponent<GenericSkill>(); val7._skillFamily = val6; component.secondary = val7; ContentAddition.AddSkillFamily(val6); GenericSkill val8 = bodyObject.AddComponent<GenericSkill>(); val8._skillFamily = transposeFamily; component.utility = val8; SkillDef val9 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidRaidCrab/RaidCrabSpinBeam.asset").WaitForCompletion(); val9.baseRechargeInterval = ModConfig.specCD.Value; SkillFamily val10 = CreateSkillFamily("FathomlessVoidlingSkillFamilySpecialP2", val9); GenericSkill val11 = bodyObject.AddComponent<GenericSkill>(); val11._skillFamily = val10; component.special = val11; ContentAddition.AddSkillFamily(val10); } private static void AdjustP3Skills(GameObject bodyObject, SkillFamily transposeFamily) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) SkillLocator component = bodyObject.GetComponent<SkillLocator>(); component.primary = null; component.secondary = null; component.utility = null; component.special = null; GenericSkill val = default(GenericSkill); while (bodyObject.TryGetComponent<GenericSkill>(ref val)) { Object.DestroyImmediate((Object)(object)val); } SkillDef val2 = CreateSkillDef(new SkillParams("FathomlessVoidlingSkillPrimaryP3", new SerializableEntityStateType(typeof(FathomlessVoidling.VoidlingEntityStates.Phase3.Disillusion))) { nameToken = "FATHOMLESS_VOIDLING_DISILLUSION", activationStateMachine = "Weapon", baseMaxStock = 1, baseRechargeInterval = ModConfig.primCD.Value, beginSkillCooldownOnSkillEnd = true, canceledFromSprinting = false, cancelSprintingOnActivation = false, fullRestockOnAssign = true, interruptPriority = (InterruptPriority)1, isCombatSkill = true, mustKeyPress = false, rechargeStock = 1, requiredStock = 1, stockToConsume = 1 }); SkillFamily val3 = CreateSkillFamily("FathomlessVoidlingSkillFamilyPrimaryP3", val2); GenericSkill val4 = bodyObject.AddComponent<GenericSkill>(); val4._skillFamily = val3; component.primary = val4; ContentAddition.AddSkillDef(val2); ContentAddition.AddSkillFamily(val3); SkillDef val5 = CreateSkillDef(new SkillParams("FathomlessVoidlingSkillSecondaryP3", new SerializableEntityStateType(typeof(ChargeCrush))) { nameToken = "FATHOMLESS_VOIDLING_SINGULARITY", activationStateMachine = "Body", baseMaxStock = 1, baseRechargeInterval = ModConfig.secCD.Value, beginSkillCooldownOnSkillEnd = true, canceledFromSprinting = true, cancelSprintingOnActivation = true, fullRestockOnAssign = true, interruptPriority = (InterruptPriority)1, isCombatSkill = true, mustKeyPress = false, rechargeStock = 1, requiredStock = 1, stockToConsume = 1 }); SkillFamily val6 = CreateSkillFamily("FathomlessVoidlingSkillFamilySecondaryP3", val5); GenericSkill val7 = bodyObject.AddComponent<GenericSkill>(); val7._skillFamily = val6; component.secondary = val7; ContentAddition.AddSkillDef(val5); ContentAddition.AddSkillFamily(val6); GenericSkill val8 = bodyObject.AddComponent<GenericSkill>(); val8._skillFamily = transposeFamily; component.utility = val8; SkillDef val9 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidRaidCrab/RaidCrabSpinBeam.asset").WaitForCompletion(); val9.baseRechargeInterval = ModConfig.specCD.Value; SkillFamily val10 = CreateSkillFamily("FathomlessVoidlingSkillFamilySpecialP3", val9); GenericSkill val11 = bodyObject.AddComponent<GenericSkill>(); val11._skillFamily = val10; component.special = val11; ContentAddition.AddSkillFamily(val10); } private static void ModifyMasters() { //IL_0005: 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_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) ItemDef oobItem2 = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/Base/TeleportWhenOob/TeleportWhenOob.asset").WaitForCompletion(); GameObject master2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidRaidCrab/MiniVoidRaidCrabMasterPhase1.prefab").WaitForCompletion(); ModifyAIStates(master2); AddTeleportWhenOOB(master2, oobItem2); GameObject master3 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidRaidCrab/MiniVoidRaidCrabMasterPhase2.prefab").WaitForCompletion(); ModifyAIStates(master3); AddTeleportWhenOOB(master3, oobItem2); GameObject master4 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidRaidCrab/MiniVoidRaidCrabMasterPhase3.prefab").WaitForCompletion(); ModifyAIStates(master4); AddTeleportWhenOOB(master4, oobItem2); static void AddTeleportWhenOOB(GameObject master, ItemDef oobItem) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) ref ItemDefInfo[] itemDefInfos = ref master.GetComponent<GivePickupsOnStart>().itemDefInfos; ItemDefInfo val = new ItemDefInfo { count = 1, dontExceedCount = true, itemDef = oobItem }; ArrayUtils.ArrayAppend<ItemDefInfo>(ref itemDefInfos, ref val); } static void ModifyAIStates(GameObject master) { //IL_0091: Unknown result type (might be due to invalid IL or missing references) AISkillDriver obj = (from x in master.GetComponents<AISkillDriver>() where (int)x.skillSlot == 1 select x).First(); AISkillDriver val2 = (from x in master.GetComponents<AISkillDriver>() where (int)x.skillSlot == 2 select x).First(); AISkillDriver val3 = (from x in master.GetComponents<AISkillDriver>() where (int)x.skillSlot == 3 select x).First(); obj.movementType = (MovementType)0; obj.maxUserHealthFraction = 0.9f; obj.minUserHealthFraction = float.NegativeInfinity; obj.requiredSkill = null; obj.maxDistance = 200f; val2.maxUserHealthFraction = float.PositiveInfinity; val2.minUserHealthFraction = float.NegativeInfinity; val2.requiredSkill = null; val2.maxDistance = 400f; val2.minDistance = 0f; val3.maxUserHealthFraction = 0.8f; val3.minUserHealthFraction = float.NegativeInfinity; val3.requiredSkill = null; val3.maxDistance = 400f; val3.minDistance = 0f; } } private static SkillFamily CreateSkillFamily(string name, params SkillDef[] skills) { SkillFamily obj = ScriptableObject.CreateInstance<SkillFamily>(); ((Object)obj).name = name; obj.variants = Array.ConvertAll(skills, delegate(SkillDef item) { //IL_0002: 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_002c: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) Variant result = default(Variant); result.skillDef = item; result.unlockableDef = null; ((Variant)(ref result)).viewableNode = new Node(item.skillNameToken, false, (Node)null); return result; }); obj.defaultVariantIndex = 0u; return obj; } private static SkillDef CreateSkillDef(SkillParams skillParams) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: 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_0060: Unknown result type (might be due to invalid IL or missing references) SkillDef obj = ScriptableObject.CreateInstance<SkillDef>(); ((Object)obj).name = skillParams.name; obj.skillName = skillParams.name; obj.skillNameToken = skillParams.nameToken; obj.skillDescriptionToken = skillParams.descriptionToken; obj.icon = skillParams.icon; obj.activationStateMachineName = skillParams.activationStateMachine; obj.activationState = skillParams.activationState; obj.interruptPriority = skillParams.interruptPriority; obj.baseRechargeInterval = skillParams.baseRechargeInterval; obj.baseMaxStock = skillParams.baseMaxStock; obj.rechargeStock = skillParams.rechargeStock; obj.requiredStock = skillParams.requiredStock; obj.stockToConsume = skillParams.stockToConsume; obj.resetCooldownTimerOnUse = skillParams.resetCooldownTimerOnUse; obj.fullRestockOnAssign = skillParams.fullRestockOnAssign; obj.dontAllowPastMaxStocks = skillParams.dontAllowPAstMaxStocks; obj.beginSkillCooldownOnSkillEnd = skillParams.beginSkillCooldownOnSkillEnd; obj.canceledFromSprinting = skillParams.canceledFromSprinting; obj.forceSprintDuringState = skillParams.forceSprintDuringState; obj.canceledFromSprinting = skillParams.canceledFromSprinting; obj.isCombatSkill = skillParams.isCombatSkill; obj.mustKeyPress = skillParams.mustKeyPress; return obj; } } } namespace FathomlessVoidling.VoidlingEntityStates { public abstract class BaseDisillusion : BaseState { public static GameObject missilesMuzzleFlashPrefab = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabMuzzleflashEyeMissiles_prefab).WaitForCompletion(); public static string missilesMuzzleName = "EyeProjectileCenter"; public static GameObject missilesProjectilePrefab = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabMissileProjectile_prefab).WaitForCompletion(); public static float missilesDamageCoefficient = 0.3f; public static float missilesForce = 100f; public static int missilesNumMissilesPerWave = 6; public static float missilesMinSpreadDegrees = 0f; public static float missilesRangeSpreadDegrees = 20f; public static float baseDuration = 4f; public static float fireFrequency = 5f; public static float bombFireTimer = 1f; private float duration; private float fireInterval; private float fireStopwatch; private Predictor predictor; private float bombStopwatch; internal abstract GameObject bombPrefab { get; } public override void OnEnter() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Expected O, but got Unknown //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Expected O, but got Unknown ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; fireInterval = duration / fireFrequency; if (((EntityState)this).isAuthority) { BullseyeSearch val = new BullseyeSearch(); val.teamMaskFilter = TeamMask.allButNeutral; if (Object.op_Implicit((Object)(object)((EntityState)this).teamComponent)) { ((TeamMask)(ref val.teamMaskFilter)).RemoveTeam(((EntityState)this).teamComponent.teamIndex); } val.maxDistanceFilter = 1000f; val.maxAngleFilter = 360f; Ray aimRay = ((BaseState)this).GetAimRay(); val.searchOrigin = ((Ray)(ref aimRay)).origin; val.searchDirection = ((Ray)(ref aimRay)).direction; val.filterByLoS = false; val.sortMode = (SortMode)3; val.RefreshCandidates(); HurtBox val2 = val.GetResults().FirstOrDefault(); if (Object.op_Implicit((Object)(object)val2)) { predictor = new Predictor(((EntityState)this).transform); predictor.SetTargetTransform(((Component)val2).transform); FireMissileAuthority(); } } } public override void FixedUpdate() { //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_006e: 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_00b6: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority) { predictor.Update(); bombStopwatch += Time.fixedDeltaTime; if (bombStopwatch >= bombFireTimer) { Vector3 position = default(Vector3); predictor.GetPredictedTargetPosition(1f, ref position); ProjectileManager.instance.FireProjectile(new FireProjectileInfo { projectilePrefab = bombPrefab, position = position, rotation = Quaternion.identity, owner = ((EntityState)this).gameObject, damage = 0f, force = 0f, crit = ((EntityState)this).characterBody.RollCrit() }); bombStopwatch -= bombFireTimer; } fireStopwatch += Time.fixedDeltaTime; if (fireStopwatch >= fireInterval) { FireMissileAuthority(); fireStopwatch -= fireInterval; } } if (((EntityState)this).fixedAge > duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void FireMissileAuthority() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_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_002c: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: 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_00bd: Unknown result type (might be due to invalid IL or missing references) EffectManager.SimpleMuzzleFlash(missilesMuzzleFlashPrefab, ((EntityState)this).gameObject, missilesMuzzleName, true); Ray aimRay = ((BaseState)this).GetAimRay(); Quaternion val = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction); FireProjectileInfo val2 = default(FireProjectileInfo); val2.projectilePrefab = missilesProjectilePrefab; val2.position = ((BaseState)this).FindModelChild(missilesMuzzleName).position; val2.owner = ((EntityState)this).gameObject; val2.damage = base.damageStat * missilesDamageCoefficient; val2.force = missilesForce; FireProjectileInfo val3 = val2; for (int i = 0; i < missilesNumMissilesPerWave; i++) { val3.rotation = val * GetRandomRollPitch(); val3.crit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master); ProjectileManager.instance.FireProjectile(val3); } EffectManager.SimpleMuzzleFlash(FirePortalBomb.muzzleflashEffectPrefab, ((EntityState)this).gameObject, missilesMuzzleName, true); } protected Quaternion GetRandomRollPitch() { //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_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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_0036: 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) Quaternion val = Quaternion.AngleAxis((float)Random.Range(0, 360), Vector3.forward); Quaternion val2 = Quaternion.AngleAxis(missilesMinSpreadDegrees + Random.Range(0f, missilesRangeSpreadDegrees), Vector3.left); return val * val2; } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class Transpose : BaseState { public static GameObject deathBombPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidMegaCrab/VoidMegaCrabDeathBombExplosion.prefab").WaitForCompletion(); public static float duration = 2f; public static float blinkDistance = 500f; public static Material destealthMaterial = Addressables.LoadAssetAsync<Material>((object)RoR2_Base_Imp.matImpDissolve_mat).WaitForCompletion(); private Transform modelTransform; private Animator animator; private CharacterModel characterModel; private HurtBoxGroup hurtboxGroup; private Vector3 blinkStart; private Vector3 blinkDestination; public override void OnEnter() { //IL_00cf: 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_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { animator = ((Component)modelTransform).GetComponent<Animator>(); characterModel = ((Component)modelTransform).GetComponent<CharacterModel>(); hurtboxGroup = ((Component)modelTransform).GetComponent<HurtBoxGroup>(); } if (Object.op_Implicit((Object)(object)characterModel)) { CharacterModel obj = characterModel; int invisibilityCount = obj.invisibilityCount; obj.invisibilityCount = invisibilityCount + 1; } if (Object.op_Implicit((Object)(object)hurtboxGroup)) { HurtBoxGroup obj2 = hurtboxGroup; int invisibilityCount = obj2.hurtBoxesDeactivatorCounter; obj2.hurtBoxesDeactivatorCounter = invisibilityCount + 1; } if (Object.op_Implicit((Object)(object)((EntityState)this).rigidbodyMotor)) { ((Behaviour)((EntityState)this).rigidbodyMotor).enabled = false; } Util.PlaySound("Play_voidRaid_snipe_shoot_final", ((EntityState)this).gameObject); if (((EntityState)this).isAuthority) { InputBankTest inputBank = ((EntityState)this).inputBank; inputBank.moveVector *= blinkDistance; CalculateBlinkDestination(); CreateBlinkEffect(Util.GetCorePosition(((EntityState)this).gameObject)); } } public override void FixedUpdate() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration || ((EntityState)this).isAuthority) { ((EntityState)this).rigidbodyMotor.AddDisplacement(blinkDestination); ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) Util.PlaySound("Play_voidRaid_snipe_shoot_final", ((EntityState)this).gameObject); if (((EntityState)this).isAuthority) { CreateBlinkEffect(((EntityState)this).characterBody.corePosition); } if (Object.op_Implicit((Object)(object)modelTransform) && Object.op_Implicit((Object)(object)destealthMaterial)) { TemporaryOverlay obj = ((Component)animator).gameObject.AddComponent<TemporaryOverlay>(); obj.duration = 1f; obj.destroyComponentOnEnd = true; obj.originalMaterial = destealthMaterial; obj.inspectorCharacterModel = ((Component)animator).gameObject.GetComponent<CharacterModel>(); obj.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); obj.animateShaderAlpha = true; } if (Object.op_Implicit((Object)(object)characterModel)) { CharacterModel obj2 = characterModel; int invisibilityCount = obj2.invisibilityCount; obj2.invisibilityCount = invisibilityCount - 1; } if (Object.op_Implicit((Object)(object)hurtboxGroup)) { HurtBoxGroup obj3 = hurtboxGroup; int hurtBoxesDeactivatorCounter = obj3.hurtBoxesDeactivatorCounter - 1; obj3.hurtBoxesDeactivatorCounter = hurtBoxesDeactivatorCounter; } if (Object.op_Implicit((Object)(object)((EntityState)this).rigidbodyMotor)) { ((Behaviour)((EntityState)this).rigidbodyMotor).enabled = true; } } private void CalculateBlinkDestination() { //IL_0000: 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) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000d: 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_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_001f: 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_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_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_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_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: 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_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: 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_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) Vector3 val = Vector3.zero; Ray aimRay = ((BaseState)this).GetAimRay(); BullseyeSearch val2 = new BullseyeSearch { searchOrigin = ((Ray)(ref aimRay)).origin, searchDirection = ((Ray)(ref aimRay)).direction, maxDistanceFilter = blinkDistance, teamMaskFilter = TeamMask.allButNeutral, filterByLoS = false, sortMode = (SortMode)2 }; ((TeamMask)(ref val2.teamMaskFilter)).RemoveTeam(TeamComponent.GetObjectTeam(((EntityState)this).gameObject)); val2.RefreshCandidates(); HurtBox val3 = val2.GetResults().FirstOrDefault(); if (Object.op_Implicit((Object)(object)val3)) { val = ((Component)val3).transform.position - ((EntityState)this).transform.position; } blinkDestination = ((EntityState)this).transform.position; blinkStart = ((EntityState)this).transform.position; NodeGraph groundNodes = SceneInfo.instance.groundNodes; groundNodes.GetNodePosition(groundNodes.FindClosestNodeWithFlagConditions(val, ((EntityState)this).characterBody.hullClassification, (NodeFlags)0, (NodeFlags)4, true), ref blinkDestination); } private void CreateBlinkEffect(Vector3 origin1) { //IL_0005: 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_000c: 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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_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_0027: 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_003e: Expected O, but got Unknown EffectManager.SpawnEffect(deathBombPrefab, new EffectData { rotation = Util.QuaternionSafeLookRotation(blinkDestination - blinkStart), origin = origin1, scale = 75f }, true); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } } namespace FathomlessVoidling.VoidlingEntityStates.Phase3 { public class ChargeCrush : BaseState { public static float baseDuration = 3.5f; public static GameObject missilesMuzzleFlashPrefab = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabMuzzleflashEyeMissiles_prefab).WaitForCompletion(); private float duration; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / base.attackSpeedStat; ((EntityState)this).PlayAnimation("Body", "SuckEnter", "Suck.playbackRate", duration, 0f); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge > duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextState((EntityState)(object)new Crush()); } } public override void OnExit() { ((EntityState)this).OnExit(); Util.PlaySound("Play_voidRaid_snipe_shoot", ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(missilesMuzzleFlashPrefab, ((EntityState)this).gameObject, "EyeProjectileCenter", false); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class Crush : BaseState { public static GameObject meteorPrefab; public static GameObject portalPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidMegaCrab/VoidMegaCrabSpawnEffect.prefab").WaitForCompletion(); public static float duration = 6f; public static float missileSpawnFrequency = 6f; public static string muzzleString = "EyeProjectileCenter"; public static float damageCoefficient = 2f; public static float force = 10000f; private float missileStopwatch; private float missileTimer; public override void OnEnter() { ((BaseState)this).OnEnter(); ((EntityState)this).PlayAnimation("Body", "SuckExit", "Suck.playbackRate", 3.3f, 0f); missileTimer = 1f / missileSpawnFrequency; } public override void FixedUpdate() { //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_0054: 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_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: 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_00cf: 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_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority) { missileStopwatch += Time.fixedDeltaTime; if (missileStopwatch >= missileTimer) { Transform val = ((BaseState)this).FindModelChild(muzzleString); if (Object.op_Implicit((Object)(object)val)) { Ray aimRay = ((BaseState)this).GetAimRay(); Ray projectileRay = default(Ray); ((Ray)(ref projectileRay)).direction = ((Ray)(ref aimRay)).direction; float num = 1000f; float num2 = Random.Range(-100f, 100f); float num3 = Random.Range(50f, 75f); float num4 = Random.Range(-100f, 100f); Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(num2, num3, num4); Vector3 origin = val.position + val2; ((Ray)(ref projectileRay)).origin = origin; RaycastHit val3 = default(RaycastHit); if (Physics.Raycast(aimRay, ref val3, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask))) { ((Ray)(ref projectileRay)).direction = ((RaycastHit)(ref val3)).point - ((Ray)(ref projectileRay)).origin; } FireBlobAuthority(projectileRay); } missileStopwatch -= missileTimer; } } if (((EntityState)this).fixedAge > duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void FireBlobAuthority(Ray projectileRay) { //IL_0005: 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_000d: 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_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_002f: Expected O, but got Unknown //IL_0031: 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_0040: 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_0053: 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_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) EffectManager.SpawnEffect(portalPrefab, new EffectData { origin = ((Ray)(ref projectileRay)).origin, rotation = Util.QuaternionSafeLookRotation(((Ray)(ref projectileRay)).direction) }, true); FireProjectileInfo val = default(FireProjectileInfo); val.position = ((Ray)(ref projectileRay)).origin; val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref projectileRay)).direction); val.crit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master); val.damage = base.damageStat * damageCoefficient; val.owner = ((EntityState)this).gameObject; val.force = force; ((FireProjectileInfo)(ref val)).speedOverride = 100f; val.projectilePrefab = meteorPrefab; FireProjectileInfo val2 = val; ProjectileManager.instance.FireProjectile(val2); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class Disillusion : BaseDisillusion { public static GameObject staticBombPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidJailer/VoidJailerDeathBombProjectile.prefab").WaitForCompletion(); internal override GameObject bombPrefab => staticBombPrefab; } } namespace FathomlessVoidling.VoidlingEntityStates.Phase2 { public class Disillusion : BaseDisillusion { public static GameObject staticBombPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Nullifier/NullifierDeathBombProjectile.prefab").WaitForCompletion(); internal override GameObject bombPrefab => staticBombPrefab; } } namespace FathomlessVoidling.VoidlingEntityStates.Phase1 { public class ChargeRend : ChargeMultiBeam { public static float staticBaseDuration = 1f; public static GameObject staticChargeEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabTripleBeamChargeUp_prefab).WaitForCompletion(); public static GameObject staticWarningLaserVfxPrefab = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.MultiBeamRayIndicator_prefab).WaitForCompletion(); public static string staticMuzzleName = "EyeProjectileCenter"; public static string staticEnterSoundString = "Play_voidRaid_snipe_chargeUp"; public static bool staticIsSoundScaledByAttackSpeed = false; public static string staticAnimationLayerName = "Gesture"; public static string staticAnimationStateName = "ChargeMultiBeam"; public static string staticAnimationPlaybackRateParam = "MultiBeam.playbackRate"; public override void OnEnter() { base.baseDuration = staticBaseDuration; base.chargeEffectPrefab = staticChargeEffectPrefab; base.warningLaserVfxPrefab = staticWarningLaserVfxPrefab; base.muzzleName = staticMuzzleName; base.enterSoundString = staticEnterSoundString; base.isSoundScaledByAttackSpeed = staticIsSoundScaledByAttackSpeed; base.animationLayerName = staticAnimationLayerName; base.animationStateName = staticAnimationStateName; base.animationPlaybackRateParam = staticAnimationPlaybackRateParam; ((ChargeMultiBeam)this).OnEnter(); } public override void FixedUpdate() { ((EntityState)this).fixedAge = ((EntityState)this).fixedAge + ((EntityState)this).GetDeltaTime(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge > base.duration) { ((EntityState)this).outer.SetNextState((EntityState)(object)new Rend()); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class Disillusion : BaseDisillusion { public static GameObject staticBombPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidMegaCrab/VoidMegaCrabDeathBombProjectile.prefab").WaitForCompletion(); internal override GameObject bombPrefab => staticBombPrefab; } public class Rend : BaseMultiBeamState { public static GameObject tracerEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.TracerVoidRaidCrabTripleBeamSmall_prefab).WaitForCompletion(); public static GameObject explosionEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabTripleBeamExplosion_prefab).WaitForCompletion(); public static GameObject projectilePrefab = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabMultiBeamDotZone_prefab).WaitForCompletion(); public static float projectileDamageCoefficient = 2f; public static float baseDuration = 4f; public static float missileSpawnFrequency = 6f; public static string animationLayerName = "Gesture"; public static string animationStateName = "FireMultiBeamFinale"; public static string animationPlaybackRateParam = "MultiBeam.playbackRate"; public static float blastRadius = 6f; public static float blastDamageCoefficient = 1f; public static Vector3 blastBonusForce = new Vector3(0f, 100f, 0f); public static float blastForceMagnitude = 3000f; private float duration; private float missileStopwatch; private float missleSpawnTimer; private BlastAttack blobBlastAttack; public override void OnEnter() { ((BaseMultiBeamState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; missleSpawnTimer = 1f / missileSpawnFrequency; if (((EntityState)this).isAuthority) { blobBlastAttack = SetupBlastAttack(); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); missileStopwatch += Time.fixedDeltaTime; if (missileStopwatch >= missleSpawnTimer) { FireBlob(); missileStopwatch -= missleSpawnTimer; } if (((EntityState)this).fixedAge > duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private BlastAttack SetupBlastAttack() { //IL_0000: 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) //IL_0011: 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_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_0046: 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_005c: 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_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0070: 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_007b: Expected O, but got Unknown return new BlastAttack { attacker = ((EntityState)this).gameObject, inflictor = ((EntityState)this).gameObject, teamIndex = TeamComponent.GetObjectTeam(((EntityState)this).gameObject), baseDamage = ((BaseState)this).damageStat * (blastDamageCoefficient / 2f), baseForce = blastForceMagnitude, radius = blastRadius, falloffModel = (FalloffModel)2, bonusForce = blastBonusForce, damageType = DamageTypeCombo.op_Implicit((DamageType)0) }; } private void FireBlob() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0111: 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_013a: 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_014f: 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_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: 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_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Expected O, but got Unknown ((EntityState)this).PlayAnimation(animationLayerName, animationStateName, animationPlaybackRateParam, duration, 0f); Util.PlaySound(((BaseFireMultiBeam)new FireMultiBeamSmall()).enterSoundString, ((EntityState)this).gameObject); if (!((EntityState)this).isAuthority) { return; } Ray val = default(Ray); Vector3 val2 = default(Vector3); ((BaseMultiBeamState)this).CalcBeamPath(ref val, ref val2); val2 += new Vector3(Random.Range(-15f, 15f), Random.Range(-10f, 10f), Random.Range(-15f, 15f)); Transform modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { ChildLocator component = ((Component)modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)component)) { int num = component.FindChildIndex(BaseMultiBeamState.muzzleName); if (Object.op_Implicit((Object)(object)tracerEffectPrefab)) { EffectData val3 = new EffectData { origin = val2, start = ((Ray)(ref val)).origin, scale = blastRadius }; val3.SetChildLocatorTransformReference(((EntityState)this).gameObject, num); EffectManager.SpawnEffect(tracerEffectPrefab, val3, true); EffectManager.SpawnEffect(explosionEffectPrefab, val3, true); } } } blobBlastAttack.position = val2; blobBlastAttack.crit = ((BaseState)this).RollCrit(); blobBlastAttack.Fire(); ProjectileManager.instance.FireProjectile(new FireProjectileInfo { projectilePrefab = projectilePrefab, position = val2, owner = ((EntityState)this).gameObject, damage = ((BaseState)this).damageStat * (projectileDamageCoefficient / 6f), crit = ((BaseState)this).RollCrit() }); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } } namespace FathomlessVoidling.VoidEnding { public class VoidEndingPlayCutscene : BaseGameOverControllerState { public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (NetworkServer.active && (!Object.op_Implicit((Object)(object)OutroCutsceneController.instance) || OutroCutsceneController.instance.cutsceneIsFinished)) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { if (Object.op_Implicit((Object)(object)OutroCutsceneController.instance) && Object.op_Implicit((Object)(object)OutroCutsceneController.instance.playableDirector)) { OutroCutsceneController.instance.playableDirector.time = OutroCutsceneController.instance.playableDirector.duration; } ((EntityState)this).OnExit(); } } public class VoidEndingSetSceneAndWaitForPlayers : BaseGameOverControllerState { private SceneDef desiredSceneDef; public override void OnEnter() { ((BaseGameOverControllerState)this).OnEnter(); FadeToBlackManager.ForceFullBlack(); FadeToBlackManager.fadeCount++; desiredSceneDef = SceneCatalog.GetSceneDefFromSceneName("voidoutro"); if (NetworkServer.active) { Run.instance.AdvanceStage(desiredSceneDef); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (NetworkServer.active && NetworkUser.AllParticipatingNetworkUsersReady() && (Object)(object)SceneCatalog.mostRecentSceneDef == (Object)(object)desiredSceneDef) { ((EntityState)this).outer.SetNextState((EntityState)(object)new VoidEndingPlayCutscene()); } } public override void OnExit() { FadeToBlackManager.fadeCount--; ((EntityState)this).OnExit(); } } public class VoidEndingStart : BaseGameOverControllerState { public static float duration = 3f; public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (NetworkServer.active && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextState((EntityState)(object)new VoidEndingSetSceneAndWaitForPlayers()); } } public override void OnEnter() { ((BaseGameOverControllerState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } } } namespace FathomlessVoidling.ModCompat { public static class RiskOfOptionsCompat { private static bool? _enabled; public static bool enabled { get { if (!_enabled.HasValue) { _enabled = Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"); } return _enabled.Value; } } public static void SetDescription() { ModSettingsManager.SetModDescription("Voidling without fathoms", "com.Nuxlar.FathomlessVoidling", "FathomlessVoidling"); } public static void SetIcon(Sprite icon) { ModSettingsManager.SetModIcon(icon, "com.Nuxlar.FathomlessVoidling", "FathomlessVoidling"); } public static void CreateNewOption(ConfigEntry<float> entry, float min = 0f, float max = 5f, float increment = 0.01f) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: 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_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown ModSettingsManager.AddOption((BaseOption)new StepSliderOption(entry, new StepSliderConfig { min = min, max = max, increment = increment, restartRequired = true })); } public static void CreateNewOption(ConfigEntry<bool> entry) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(entry, true)); } public static void CreateNewOption(ConfigEntry<int> entry, int min = 0, int max = 200) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: 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_0020: Expected O, but got Unknown //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown ModSettingsManager.AddOption((BaseOption)new IntSliderOption(entry, new IntSliderConfig { min = min, max = max, restartRequired = true })); } } }