using 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.GameAssetPaths;
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
}));
}
}
}