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 RealityShifter v1.0.3
Shifter.dll
Decompiled 2 years ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Collections.ObjectModel; 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.Configuration; using EntityStates; using EntityStates.Merc; using HG.Reflection; using KinematicCharacterController; using On.RoR2; using R2API; using R2API.Utils; using Rewired.ComponentControls.Effects; using RoR2; using RoR2.Achievements; using RoR2.Audio; using RoR2.CharacterAI; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.Rendering; using UnityEngine.Rendering.PostProcessing; using UnityEngine.UI; [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyCompany("Shifter")] [assembly: AssemblyProduct("Shifter")] [assembly: AssemblyTitle("Shifter")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace Shifter; public static class Achievements { [RegisterAchievement("SHIFTER_BOSSKILL", "ACHIEVEMENT_SHIFTER_BOSSKILL_UNLOCKABLE_ID", "BossKill", typeof(BossKillServerAchievement))] public class BossKillUnlockable : BaseAchievement { private class BossKillServerAchievement : BaseServerAchievement { private int killCount; private BodyIndex requiredVictimBodyIndex; public override void OnInstall() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) ((BaseServerAchievement)this).OnInstall(); requiredVictimBodyIndex = BodyCatalog.FindBodyIndex("BrotherHurtBody"); GlobalEventManager.onCharacterDeathGlobal += OnCharacterDeathGlobal; } public override void OnUninstall() { GlobalEventManager.onCharacterDeathGlobal -= OnCharacterDeathGlobal; ((BaseServerAchievement)this).OnUninstall(); } private void OnCharacterDeathGlobal(DamageReport damageReport) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) if (damageReport.victimBodyIndex == requiredVictimBodyIndex && (Object)(object)base.serverAchievementTracker.networkUser.master == (Object)(object)damageReport.attackerMaster) { killCount++; Debug.LogWarning((object)("killCount: " + killCount)); if (requirement <= killCount) { ((BaseServerAchievement)this).Grant(); } } } } private static readonly int requirement = 10; public override BodyIndex LookUpRequiredBodyIndex() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) return BodyCatalog.FindBodyIndex("ShifterBody"); } public override void OnBodyRequirementMet() { ((BaseAchievement)this).OnBodyRequirementMet(); ((BaseAchievement)this).SetServerTracked(true); } public override void OnBodyRequirementBroken() { ((BaseAchievement)this).SetServerTracked(false); ((BaseAchievement)this).OnBodyRequirementBroken(); } } [RegisterAchievement("SHIFTER_BILLIONDMG", "ACHIEVEMENT_SHIFTER_BILLIONDMG_UNLOCKABLE_ID", null, null)] public class BillionDamageUnlockable : BaseAchievement { private static readonly float damageRequirement = 1E+09f; private float currentDamageDealt; public override BodyIndex LookUpRequiredBodyIndex() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) return BodyCatalog.FindBodyIndex("ShifterBody"); } public override void OnBodyRequirementMet() { GlobalEventManager.onClientDamageNotified += onClientDamageNotified; } public override void OnBodyRequirementBroken() { GlobalEventManager.onClientDamageNotified -= onClientDamageNotified; } private void onClientDamageNotified(DamageDealtMessage message) { if ((Object)(object)message.attacker == (Object)(object)((BaseAchievement)this).localUser.cachedBodyObject) { currentDamageDealt += message.damage; Debug.LogWarning((object)("currentDamageDealt: " + currentDamageDealt)); if (damageRequirement <= currentDamageDealt) { ((BaseAchievement)this).Grant(); } } } } [RegisterAchievement("SHIFTER_ENDING", "ACHIEVEMENT_SHIFTER_ENDING_UNLOCKABLE_ID", null, null)] public class EarlyVoidEndingAchievement : BaseAchievement { private static readonly float timeRequirement = 1500f; public override BodyIndex LookUpRequiredBodyIndex() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) return BodyCatalog.FindBodyIndex("ShifterBody"); } public override void OnBodyRequirementMet() { ((BaseAchievement)this).OnBodyRequirementMet(); Run.onClientGameOverGlobal += OnClientGameOverGlobal; } public override void OnBodyRequirementBroken() { Run.onClientGameOverGlobal -= OnClientGameOverGlobal; ((BaseAchievement)this).OnBodyRequirementBroken(); } private void OnClientGameOverGlobal(Run run, RunReport runReport) { if (Run.instance.GetRunStopwatch() < timeRequirement && (Object)(object)runReport.gameEnding == (Object)(object)GameEndings.VoidEnding && ((BaseAchievement)this).isUserAlive) { ((BaseAchievement)this).Grant(); } } } [RegisterAchievement("SHIFTER_UNLOCKALL", "ACHIEVEMENT_SHIFTER_UNLOCKALL_UNLOCKABLE_ID", null, null)] public class UnlockAllAchievement : BaseAchievement { public override BodyIndex LookUpRequiredBodyIndex() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) return BodyCatalog.FindBodyIndex("ShifterBody"); } public override void OnBodyRequirementMet() { ((BaseAchievement)this).OnBodyRequirementMet(); RoR2Application.onUpdate += Check; } public override void OnBodyRequirementBroken() { RoR2Application.onUpdate -= Check; ((BaseAchievement)this).OnBodyRequirementBroken(); } private void Check() { if (((BaseAchievement)this).userProfile.HasUnlockable(bossKillUnlock) && ((BaseAchievement)this).userProfile.HasUnlockable(billionDamageUnlock) && ((BaseAchievement)this).userProfile.HasUnlockable(endingUnlock)) { ((BaseAchievement)this).Grant(); } } } internal static UnlockableDef bossKillUnlock; internal static UnlockableDef billionDamageUnlock; internal static UnlockableDef endingUnlock; internal static UnlockableDef unlockAll; public static void RegisterUnlockables() { bossKillUnlock = NewUnlockable<BossKillUnlockable>("BOSSKILL", Prefabs.Load<SkillDef>("RoR2/DLC1/VoidSurvivor/FireCorruptBeam.asset").icon, "SHIFTER: Carnage", "As Reality Shifter, kill Mithrix 10 times in a single run."); billionDamageUnlock = NewUnlockable<BillionDamageUnlockable>("BILLIONDMG", Assets.MainAssetBundle.LoadAsset<Sprite>("texVoidSurvivorSkillIcons_8"), "SHIFTER: Savagery", "As Reality Shifter, deal 1,000,000,000 damage in a single run."); endingUnlock = NewUnlockable<EarlyVoidEndingAchievement>("ENDING", Assets.MainAssetBundle.LoadAsset<Sprite>("texVoidSurvivorSkillIcons_2"), "SHIFTER: Void Deep", "As Reality Shifter, escape the Planetarium before the timer hits 25 minutes."); unlockAll = NewUnlockable<UnlockAllAchievement>("UNLOCKALL", Assets.MainAssetBundle.LoadAsset<Sprite>("texVoidSurvivorSkillIcons_3"), "SHIFTER: Completionist", "Unlock all other skills."); } private static UnlockableDef NewUnlockable<T>(string AchievementIdentifier, Sprite Icon, string Title, string Description) where T : BaseAchievement { string text = "ACHIEVEMENT_SHIFTER_"; UnlockableDef val = ScriptableObject.CreateInstance<UnlockableDef>(); string langName = text + AchievementIdentifier + "_NAME"; string langDesc = text + AchievementIdentifier + "_DESCRIPTION"; LanguageAPI.Add(langName, Title); LanguageAPI.Add(langDesc, Description); Func<string> func = () => Language.GetStringFormatted("UNLOCKED_FORMAT", new object[2] { Language.GetString(langName), Language.GetString(langDesc) }); Type typeFromHandle = typeof(T); val.cachedName = text + AchievementIdentifier + "_UNLOCKABLE_ID"; val.getHowToUnlockString = func; val.getUnlockedString = func; val.achievementIcon = Icon; val.sortScore = 200; val.hidden = false; ContentAddition.AddUnlockableDef(val); return val; } } internal class Assets { public static AssetBundle MainAssetBundle; public static T Load<T>(string name) where T : Object { return MainAssetBundle.LoadAsset<T>(name); } public static void PopulateAssets() { Assembly executingAssembly = Assembly.GetExecutingAssembly(); if ((Object)(object)MainAssetBundle == (Object)null) { using (Stream stream = executingAssembly.GetManifestResourceStream("Shifter.AssetBundle.shifterassets")) { MainAssetBundle = AssetBundle.LoadFromStream(stream); } } } } internal class DelayedAlpha : MonoBehaviour { public Transform startTransform; public HurtBox target; public AnimateShaderAlpha alpha; public BezierCurveLine curve; private Vector3 lastPos; private void Update() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)startTransform)) { startTransform = ((Component)this).transform.parent; ((Component)this).transform.parent = null; } else { ((Component)this).transform.position = startTransform.position; } if (Object.op_Implicit((Object)(object)target)) { lastPos = ((Component)target).transform.position; if (!((Behaviour)alpha).enabled && !target.healthComponent.alive) { ((Behaviour)alpha).enabled = true; } } else { ((Behaviour)alpha).enabled = true; } if (!Object.op_Implicit((Object)(object)startTransform)) { ((Behaviour)alpha).enabled = true; } curve.endTransform.position = lastPos; } } internal class DelayedProjectile : MonoBehaviour { public ProjectileSimple simple; public ProjectileDirectionalTargetFinder finder; public ProjectileTargetComponent target; public ProjectileController controller; public GameObject owner; public CharacterBody body; private float duration = 0.2f; private float stopwatch; private void Awake() { simple = ((Component)this).GetComponent<ProjectileSimple>(); finder = ((Component)this).GetComponent<ProjectileDirectionalTargetFinder>(); target = ((Component)this).GetComponent<ProjectileTargetComponent>(); controller = ((Component)this).GetComponent<ProjectileController>(); } private void FixedUpdate() { if (!Object.op_Implicit((Object)(object)owner)) { owner = controller.owner; if (Object.op_Implicit((Object)(object)owner)) { body = owner.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)body)) { duration /= body.attackSpeed; } ((Component)this).transform.parent = owner.transform; } } stopwatch += Time.fixedDeltaTime; if (stopwatch >= duration) { ((Component)this).transform.parent = null; target.target = null; finder.SearchForTarget(); ((Behaviour)simple).enabled = true; } } } internal class InstaKill : MonoBehaviour { } internal class ShifterBehaviour : NetworkBehaviour { public ShifterStatsHolder statHolder; public CharacterBody body; public bool pickedItem; public bool canceledPick; public bool castingOrbs; public float[] LRPositions = new float[2] { 0.5f, 1f }; public float[] UpPositions = new float[3] { 0.1f, 0.35f, 1f }; private static int kCmdCmdCreatePickup; [Command] public void CmdCreatePickup(int index) { //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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_00ca: 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_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0024: 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 (MainPlugin.giveItem.Value) { PickupIndex val = Prefabs.allItems[index]; PickupDef pickupDef = PickupCatalog.GetPickupDef(val); ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex); if (Object.op_Implicit((Object)(object)itemDef)) { body.inventory.GiveItem(itemDef, 1); } EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(pickupDef.equipmentIndex); if (Object.op_Implicit((Object)(object)equipmentDef)) { body.inventory.GiveEquipmentString(((Object)equipmentDef).name); } } else { PickupDropletController.CreatePickupDroplet(Prefabs.allItems[index], ((Component)this).transform.position + Vector3.up * 1.5f, Vector3.up * 20f + body.characterDirection.forward * 2f); } } private void Awake() { body = ((Component)this).GetComponent<CharacterBody>(); } private void Start() { if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.masterObject)) { statHolder = body.masterObject.GetComponent<ShifterStatsHolder>(); if (!Object.op_Implicit((Object)(object)statHolder)) { statHolder = body.masterObject.AddComponent<ShifterStatsHolder>(); } } } private void UNetVersion() { } protected static void InvokeCmdCmdCreatePickup(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkServer.active) { Debug.LogError((object)"Command CmdCreatePickup called on client."); } else { ((ShifterBehaviour)(object)obj).CmdCreatePickup((int)reader.ReadPackedUInt32()); } } public void CallCmdCreatePickup(int index) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) if (!NetworkClient.active) { Debug.LogError((object)"Command function CmdCreatePickup called on server."); return; } if (((NetworkBehaviour)this).isServer) { CmdCreatePickup(index); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)5); val.WritePackedUInt32((uint)kCmdCmdCreatePickup); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); val.WritePackedUInt32((uint)index); ((NetworkBehaviour)this).SendCommandInternal(val, 0, "CmdCreatePickup"); } static ShifterBehaviour() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown kCmdCmdCreatePickup = -58455578; NetworkBehaviour.RegisterCommandDelegate(typeof(ShifterBehaviour), kCmdCmdCreatePickup, new CmdDelegate(InvokeCmdCmdCreatePickup)); NetworkCRC.RegisterBehaviour("ShifterBehaviour", 0); } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool result = default(bool); return result; } public override void OnDeserialize(NetworkReader reader, bool initialState) { } } internal class ShifterPanelBehaviour : MonoBehaviour { public ShifterBehaviour behaviour; public GridLayoutGroup gridlayoutGroup; public RectTransform buttonContainer; public GameObject buttonPrefab; public Image[] coloredImages; public Image[] darkColoredImages; public int maxColumnCount = 6; public MPButton cancelButton; private UIElementAllocator<MPButton> buttonAllocator; private void Awake() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown buttonAllocator = new UIElementAllocator<MPButton>(buttonContainer, buttonPrefab, true, false); buttonAllocator.onCreateElement = OnCreateButton; ((UnityEvent)((Button)cancelButton).onClick).AddListener((UnityAction)delegate { if (Object.op_Implicit((Object)(object)behaviour)) { behaviour.canceledPick = true; GenericSkill special = ((Component)behaviour).GetComponent<SkillLocator>().special; special.RunRecharge(special.skillDef.baseRechargeInterval); } }); } private void OnEnable() { if (RoR2Application.isInSinglePlayer) { Time.timeScale = 0f; } } private void OnDisable() { if (RoR2Application.isInSinglePlayer) { Time.timeScale = 1f; } } private void OnCreateButton(int index, MPButton button) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown ((UnityEvent)((Button)button).onClick).AddListener((UnityAction)delegate { behaviour.pickedItem = true; behaviour.CallCmdCreatePickup(index); Object.Destroy((Object)(object)((Component)this).gameObject); }); } public void SetPickupOptions(Option[] options) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Unknown result type (might be due to invalid IL or missing references) //IL_02d9: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: Unknown result type (might be due to invalid IL or missing references) //IL_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02f0: Unknown result type (might be due to invalid IL or missing references) //IL_02e2: Unknown result type (might be due to invalid IL or missing references) //IL_02fa: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0306: Unknown result type (might be due to invalid IL or missing references) //IL_030b: Unknown result type (might be due to invalid IL or missing references) //IL_02f5: Unknown result type (might be due to invalid IL or missing references) buttonAllocator.AllocateElements(options.Length); ReadOnlyCollection<MPButton> elements = buttonAllocator.elements; Sprite texUnlockIcon = Prefabs.texUnlockIcon; if (options.Length != 0) { PickupDef pickupDef = PickupCatalog.GetPickupDef(options[0].pickupIndex); Color baseColor = pickupDef.baseColor; Color darkColor = pickupDef.darkColor; EnumerableExtensions.ForEachTry<Image>((IEnumerable<Image>)coloredImages, (Action<Image>)delegate(Image x) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) ((Graphic)x).color = ((Graphic)x).color * baseColor; }, (IDictionary<Image, Exception>)null); EnumerableExtensions.ForEachTry<Image>((IEnumerable<Image>)darkColoredImages, (Action<Image>)delegate(Image x) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) ((Graphic)x).color = ((Graphic)x).color * darkColor; }, (IDictionary<Image, Exception>)null); } for (int i = 0; i < options.Length; i++) { PickupDef pickupDef2 = PickupCatalog.GetPickupDef(options[i].pickupIndex); MPButton val = elements[i]; int num = i - i % maxColumnCount; int num2 = i % maxColumnCount; int num3 = num2 - maxColumnCount; int num4 = num2 - 1; int num5 = num2 + 1; int num6 = num2 + maxColumnCount; Navigation navigation = ((Selectable)val).navigation; ((Navigation)(ref navigation)).mode = (Mode)4; if (num4 >= 0) { MPButton selectOnLeft = elements[num + num4]; ((Navigation)(ref navigation)).selectOnLeft = (Selectable)(object)selectOnLeft; } if (num5 < maxColumnCount && num + num5 < options.Length) { MPButton selectOnRight = elements[num + num5]; ((Navigation)(ref navigation)).selectOnRight = (Selectable)(object)selectOnRight; } if (num + num3 >= 0) { MPButton selectOnUp = elements[num + num3]; ((Navigation)(ref navigation)).selectOnUp = (Selectable)(object)selectOnUp; } if (num + num6 < options.Length) { MPButton selectOnDown = elements[num + num6]; ((Navigation)(ref navigation)).selectOnDown = (Selectable)(object)selectOnDown; } ((Selectable)val).navigation = navigation; PickupDef pickupDef3 = PickupCatalog.GetPickupDef(options[i].pickupIndex); Image component = ((Component)((Component)val).GetComponent<ChildLocator>().FindChild("Icon")).GetComponent<Image>(); if (options[i].available) { ((Graphic)component).color = Color.white; component.sprite = pickupDef3?.iconSprite; ((Selectable)val).interactable = true; } else { ((Graphic)component).color = Color.gray; component.sprite = texUnlockIcon; ((Selectable)val).interactable = false; } ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef2.itemIndex); EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(pickupDef2.equipmentIndex); string titleToken = (Object.op_Implicit((Object)(object)itemDef) ? itemDef.nameToken : equipmentDef.nameToken); TooltipProvider val2 = ((Component)val).gameObject.AddComponent<TooltipProvider>(); val2.titleToken = titleToken; val2.bodyToken = (Object.op_Implicit((Object)(object)itemDef) ? itemDef.descriptionToken : equipmentDef.descriptionToken); val2.titleColor = Color32.op_Implicit(Object.op_Implicit((Object)(object)itemDef) ? ColorCatalog.GetColor(((int)itemDef.colorIndex == 0) ? itemDef._itemTierDef.colorIndex : itemDef.colorIndex) : ColorCatalog.GetColor(equipmentDef.colorIndex)); val2.bodyColor = Color.gray; } } } internal class ShifterStatsHolder : MonoBehaviour { public float[] statGains = new float[4]; } internal class ShifterTracker : HuntressTracker { private float stopwatch; private void Awake() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown ((HuntressTracker)this).Awake(); base.indicator = new Indicator(((Component)this).gameObject, Prefabs.aimIndicator); } private void Start() { base.maxTrackingDistance = 370f; base.search.viewer = null; base.search.filterByLoS = false; ((HuntressTracker)this).Start(); } private void FixedUpdate() { //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) base.trackerUpdateStopwatch = 10f; stopwatch += Time.fixedDeltaTime; if (stopwatch >= 1f / base.trackerUpdateFrequency) { stopwatch -= 1f / base.trackerUpdateFrequency; HurtBox trackingTarget = base.trackingTarget; Ray aimRay = default(Ray); ((Ray)(ref aimRay))..ctor(base.inputBank.aimOrigin, base.inputBank.aimDirection); SearchForTargetNoLos(aimRay); base.indicator.targetTransform = (Object.op_Implicit((Object)(object)base.trackingTarget) ? ((Component)base.trackingTarget).transform : null); } } private void SearchForTargetNoLos(Ray aimRay) { //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_0017: 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_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) base.search.teamMaskFilter = TeamMask.GetUnprotectedTeams(base.teamComponent.teamIndex); base.search.filterByLoS = false; base.search.searchOrigin = ((Ray)(ref aimRay)).origin; base.search.searchDirection = ((Ray)(ref aimRay)).direction; base.search.sortMode = (SortMode)1; base.search.maxDistanceFilter = base.maxTrackingDistance; base.search.maxAngleFilter = base.maxTrackingAngle; base.search.RefreshCandidates(); base.search.FilterOutGameObject(((Component)this).gameObject); base.trackingTarget = base.search.GetResults().FirstOrDefault(); } } internal class Hook { internal static void Hooks() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Expected O, but got Unknown RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients); HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage); CharacterBody.SetBuffCount += new hook_SetBuffCount(CharacterBody_SetBuffCount); CharacterBody.CallCmdAddTimedBuff += new hook_CallCmdAddTimedBuff(CharacterBody_CallCmdAddTimedBuff); CharacterBody.AddTimedBuff_BuffDef_float_int += new hook_AddTimedBuff_BuffDef_float_int(CharacterBody_AddTimedBuff_BuffDef_float_int); CharacterBody.AddTimedBuff_BuffDef_float += new hook_AddTimedBuff_BuffDef_float(CharacterBody_AddTimedBuff_BuffDef_float); CharacterBody.AddBuff_BuffIndex += new hook_AddBuff_BuffIndex(CharacterBody_AddBuff_BuffIndex); DotController.InflictDot_refInflictDotInfo += new hook_InflictDot_refInflictDotInfo(DotController_InflictDot_refInflictDotInfo); PurchaseInteraction.OnInteractionBegin += new hook_OnInteractionBegin(PurchaseInteraction_OnInteractionBegin); CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats); } private static void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (Object.op_Implicit((Object)(object)((Component)self).GetComponent<ShifterBehaviour>())) { if (Object.op_Implicit((Object)(object)self.skillLocator.secondary)) { float cooldownScale = self.skillLocator.secondary.cooldownScale; cooldownScale *= Mathf.Clamp((float)Math.Pow(0.75, self.level - 1f), 0f, 1f); self.skillLocator.secondary.cooldownScale = cooldownScale; } if (Object.op_Implicit((Object)(object)self.skillLocator.utility)) { float cooldownScale2 = self.skillLocator.utility.cooldownScale; cooldownScale2 *= Mathf.Clamp((float)Math.Pow(0.75, self.level - 1f), 0f, 1f); self.skillLocator.utility.cooldownScale = cooldownScale2; } if (Object.op_Implicit((Object)(object)self.skillLocator.special)) { float cooldownScale3 = self.skillLocator.special.cooldownScale; cooldownScale3 *= Mathf.Clamp((float)Math.Pow(0.75, self.level - 1f), 0f, 1f); self.skillLocator.special.cooldownScale = cooldownScale3; } } } private static void PurchaseInteraction_OnInteractionBegin(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator) { //IL_0002: 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_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) CostTypeIndex costType = self.costType; CharacterBody component = ((Component)activator).GetComponent<CharacterBody>(); if (((int)self.costType == 2 && Object.op_Implicit((Object)(object)((Component)activator).GetComponent<ShifterBehaviour>()) && Object.op_Implicit((Object)(object)component) && component.HasBuff(Prefabs.gigaSpeedBuff)) || component.HasBuff(Prefabs.gigaSpeedBuffAlt)) { self.costType = (CostTypeIndex)0; } orig.Invoke(self, activator); self.costType = costType; } private static void DotController_InflictDot_refInflictDotInfo(orig_InflictDot_refInflictDotInfo orig, ref InflictDotInfo inflictDotInfo) { if (!Object.op_Implicit((Object)(object)inflictDotInfo.victimObject.GetComponent<ShifterBehaviour>())) { orig.Invoke(ref inflictDotInfo); } } private static void CharacterBody_AddBuff_BuffIndex(orig_AddBuff_BuffIndex orig, CharacterBody self, BuffIndex buffType) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)((Component)self).GetComponent<ShifterBehaviour>()) || !BuffCatalog.GetBuffDef(buffType).isDebuff) { orig.Invoke(self, buffType); } } private static void CharacterBody_AddTimedBuff_BuffDef_float(orig_AddTimedBuff_BuffDef_float orig, CharacterBody self, BuffDef buffDef, float duration) { if ((!Object.op_Implicit((Object)(object)((Component)self).GetComponent<ShifterBehaviour>()) || !buffDef.isDebuff) && !((Object)(object)buffDef == (Object)(object)Buffs.VoidRaidCrabWardWipeFog)) { orig.Invoke(self, buffDef, duration); } } private static void CharacterBody_AddTimedBuff_BuffDef_float_int(orig_AddTimedBuff_BuffDef_float_int orig, CharacterBody self, BuffDef buffDef, float duration, int maxStacks) { if (!Object.op_Implicit((Object)(object)((Component)self).GetComponent<ShifterBehaviour>()) || !buffDef.isDebuff) { orig.Invoke(self, buffDef, duration, maxStacks); } } private static void CharacterBody_CallCmdAddTimedBuff(orig_CallCmdAddTimedBuff orig, CharacterBody self, BuffIndex buffType, float duration) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)((Component)self).GetComponent<ShifterBehaviour>()) || !BuffCatalog.GetBuffDef(buffType).isDebuff) { orig.Invoke(self, buffType, duration); } } private static void CharacterBody_SetBuffCount(orig_SetBuffCount orig, CharacterBody self, BuffIndex buffType, int newCount) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, buffType, newCount); } private static void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: 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_0038: Invalid comparison between Unknown and I4 //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Invalid comparison between Unknown and I4 //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Invalid comparison between Unknown and I4 SetStateOnHurt val = null; bool flag = false; if (Object.op_Implicit((Object)(object)damageInfo.attacker) && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<ShifterBehaviour>()) && (int)damageInfo.damageType == 256) { damageInfo.damageType = (DamageType)0; val = ((Component)self).GetComponent<SetStateOnHurt>(); if (!Object.op_Implicit((Object)(object)val)) { flag = true; val = ((Component)self).gameObject.AddComponent<SetStateOnHurt>(); val.canBeFrozen = true; EntityStateMachine[] components = ((Component)self).GetComponents<EntityStateMachine>(); val.targetStateMachine = components.First((EntityStateMachine x) => x.customName == "Body"); val.idleStateMachine = components.Where((EntityStateMachine x) => x.customName != "Body").ToArray(); } val.SetStun(1f); val.SetFrozen(5f); } if (damageInfo.force != Vector3.zero && Object.op_Implicit((Object)(object)((Component)self).GetComponent<ShifterBehaviour>())) { damageInfo.force = Vector3.zero; } if ((Object)(object)damageInfo.inflictor == (Object)null && (int)damageInfo.damageColorIndex == 9 && Object.op_Implicit((Object)(object)self.body) && Object.op_Implicit((Object)(object)((Component)self).GetComponent<ShifterBehaviour>())) { damageInfo.rejected = true; } orig.Invoke(self, damageInfo); ShifterBehaviour shifterBehaviour = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<ShifterBehaviour>() : null); if (!Object.op_Implicit((Object)(object)shifterBehaviour)) { return; } if (flag) { Object.Destroy((Object)(object)((Component)self).GetComponent<SetStateOnHurt>()); } if (self.alive && Object.op_Implicit((Object)(object)self.body) && (int)damageInfo.dotIndex == -1 && damageInfo.procCoefficient > 0f) { DotController.InflictDot(((Component)self).gameObject, damageInfo.attacker, (DotIndex)6, 10f * damageInfo.procCoefficient, 1f, (uint?)null); DotController.InflictDot(((Component)self).gameObject, damageInfo.attacker, (DotIndex)4, 10f * damageInfo.procCoefficient, 1f, (uint?)null); self.body.AddTimedBuff(Buffs.HealingDisabled, 10f * damageInfo.procCoefficient); self.body.AddTimedBuff(Buffs.LunarSecondaryRoot, 10f * damageInfo.procCoefficient); if (!RoR2Application.rng.nextBool) { } } if (Object.op_Implicit((Object)(object)damageInfo.inflictor) && Object.op_Implicit((Object)(object)damageInfo.inflictor.GetComponent<InstaKill>()) && damageInfo.rejected) { self.Suicide(damageInfo.attacker, (GameObject)null, (DamageType)0); } } private static void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args) { ShifterBehaviour component = ((Component)sender).GetComponent<ShifterBehaviour>(); if (Object.op_Implicit((Object)(object)component)) { if (Object.op_Implicit((Object)(object)component.statHolder)) { args.baseHealthAdd += component.statHolder.statGains[0]; args.baseDamageAdd += component.statHolder.statGains[1]; args.baseShieldAdd += component.statHolder.statGains[2]; args.armorAdd += component.statHolder.statGains[3]; } float level = sender.level; args.healthMultAdd += 0.05f * level; args.regenMultAdd += 0.05f * level; args.shieldMultAdd += 0.05f * level; args.moveSpeedMultAdd += 0.05f * level; args.damageMultAdd += 0.05f * level; args.attackSpeedMultAdd += 0.05f * level; args.critAdd += 0.05f * level; args.armorAdd += 0.05f * level; } if (sender.HasBuff(Prefabs.gigaSpeedBuff)) { args.moveSpeedMultAdd += 10f; } if (sender.HasBuff(Prefabs.gigaSpeedBuffAlt)) { args.moveSpeedMultAdd += MainPlugin.utilSpeed.Value; } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.Dragonyck.RealityShifter", "RealityShifter", "1.0.3")] public class MainPlugin : BaseUnityPlugin { public const string MODUID = "com.Dragonyck.RealityShifter"; public const string MODNAME = "RealityShifter"; public const string VERSION = "1.0.3"; public const string SURVIVORNAME = "Reality Shifter"; public const string SURVIVORNAMEKEY = "SHIFTER"; public static GameObject characterPrefab; public static GameObject displayPrefab; public static GameObject masterPrefab; private static readonly Color characterColor = new Color(0.3773585f, 0f, 0f); public static ConfigEntry<bool> giveItem; public static ConfigEntry<bool> enablePP; public static ConfigEntry<float> utilSpeed; public static ConfigEntry<int> chain; public static ConfigEntry<Vector3> freezeProjectileHitboxSize; public static ConfigEntry<Vector3> freezeProjectileEffectSize; public static ConfigEntry<float> secondaryAltRadius; public static ConfigEntry<float> primarySpeed; public static ConfigEntry<float> secondarySpeed; public static ConfigEntry<float> secondaryAltSpeed; private void Awake() { //IL_0011: 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: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Expected O, but got Unknown //IL_005c: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0090: Expected O, but got Unknown //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Expected O, but got Unknown //IL_00c1: Expected O, but got Unknown //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Expected O, but got Unknown //IL_0104: Expected O, but got Unknown //IL_0119: 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_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Expected O, but got Unknown //IL_0147: Expected O, but got Unknown //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Expected O, but got Unknown //IL_017b: Expected O, but got Unknown //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Expected O, but got Unknown //IL_01af: Expected O, but got Unknown //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Expected O, but got Unknown //IL_01e3: Expected O, but got Unknown //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Expected O, but got Unknown //IL_0217: Expected O, but got Unknown giveItem = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Give Items", "Enable"), false, new ConfigDescription("Items received from Reality Warp will be added directly to the inventory instead.", (AcceptableValueBase)null, Array.Empty<object>())); enablePP = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Enable Shift Post Processing For Alt Utility", "Enable"), false, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); utilSpeed = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Utilities Speed Mult", "Value"), 1f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); chain = ((BaseUnityPlugin)this).Config.Bind<int>(new ConfigDefinition("Chain Lv", "Value"), 10, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); freezeProjectileHitboxSize = ((BaseUnityPlugin)this).Config.Bind<Vector3>(new ConfigDefinition("Secondary Hitbox Size", "Value"), new Vector3(48f, 20f, 24f), new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); freezeProjectileEffectSize = ((BaseUnityPlugin)this).Config.Bind<Vector3>(new ConfigDefinition("Secondary Effect Size", "Value"), new Vector3(6f, 50f, 20f), new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); secondaryAltRadius = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Secondary Alt Explosion Radius", "Value"), 10f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); primarySpeed = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Primary Projectile Speed", "Value"), 50f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); secondarySpeed = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Secondary Projectile Speed", "Value"), 140f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); secondaryAltSpeed = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Secondary Alt Projectile Speed", "Value"), 70f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); Assets.PopulateAssets(); Achievements.RegisterUnlockables(); Prefabs.CreatePrefabs(); CreatePrefab(); RegisterStates(); RegisterCharacter(); Hook.Hooks(); } internal static void CreatePrefab() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorBody.prefab").WaitForCompletion(); characterPrefab = PrefabAPI.InstantiateClone(val, "ShifterBody", true); Object.Destroy((Object)(object)characterPrefab.GetComponent<VoidSurvivorController>()); characterPrefab.GetComponent<NetworkIdentity>().localPlayerAuthority = true; characterPrefab.GetComponent<SetStateOnHurt>().canBeFrozen = false; characterPrefab.AddComponent<ShifterBehaviour>(); characterPrefab.AddComponent<ShifterTracker>(); CharacterBody component = characterPrefab.GetComponent<CharacterBody>(); ((Object)component).name = "ShifterBody"; component.baseNameToken = "SHIFTER_NAME"; component.subtitleNameToken = "SHIFTER_SUBTITLE"; component._defaultCrosshairPrefab = Prefabs.crosshair; component.portraitIcon = (Texture)(object)Assets.MainAssetBundle.LoadAsset<Sprite>("portrait").texture; component.bodyColor = characterColor; ModelLocator component2 = characterPrefab.GetComponent<ModelLocator>(); CharacterModel component3 = ((Component)component2.modelTransform).GetComponent<CharacterModel>(); ((Component)((Component)component3).GetComponentsInChildren<SkinnedMeshRenderer>()[3]).gameObject.SetActive(false); Renderer[] array = (Renderer[])(object)new Renderer[3]; for (int i = 0; i < component3.baseRendererInfos.Length; i++) { array[i] = component3.baseRendererInfos[i].renderer; } component3.baseRendererInfos = (RendererInfo[])(object)new RendererInfo[3]; for (int j = 0; j < array.Length; j++) { component3.baseRendererInfos[j] = new RendererInfo { renderer = array[j], defaultMaterial = Prefabs.redOverlayMat, defaultShadowCastingMode = (ShadowCastingMode)1 }; } ((Component)component3).GetComponent<ModelSkinController>().skins = (SkinDef[])(object)new SkinDef[1] { LoadoutAPI.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(component3.baseRendererInfos, ((Component)component3).gameObject, "Default")) }; EntityStateMachine component4 = ((Component)component).GetComponent<EntityStateMachine>(); component4.mainStateType = new SerializableEntityStateType(typeof(GenericCharacterMain)); Utils.NewStateMachine<Idle>(characterPrefab, "Pick"); Utils.NewStateMachine<Idle>(characterPrefab, "NoClip"); Utils.NewStateMachine<Idle>(characterPrefab, "Succ"); Utils.NewStateMachine<Traverse>(characterPrefab, "Traverse"); NetworkStateMachine component5 = ((Component)component).GetComponent<NetworkStateMachine>(); component5.stateMachines = ((Component)component).GetComponents<EntityStateMachine>(); ContentAddition.AddBody(characterPrefab); } private void RegisterCharacter() { //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Expected O, but got Unknown //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) string text = "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > "; string text2 = "..and so it left."; string text3 = "..and so it vanished."; LanguageAPI.Add("SHIFTER_NAME", "Reality Shifter"); LanguageAPI.Add("SHIFTER_DESCRIPTION", text); LanguageAPI.Add("SHIFTER_SUBTITLE", ""); LanguageAPI.Add("SHIFTER_OUTRO", text2); LanguageAPI.Add("SHIFTER_FAIL", text3); displayPrefab = PrefabAPI.InstantiateClone(Prefabs.Load<GameObject>("RoR2/DLC1/VoidSurvivor/VoidSurvivorDisplay.prefab"), "ShifterDisplay", false); AnimateShaderAlpha[] componentsInChildren = displayPrefab.GetComponentsInChildren<AnimateShaderAlpha>(); foreach (AnimateShaderAlpha val in componentsInChildren) { Object.Destroy((Object)(object)val); } ParticleSystemRenderer[] componentsInChildren2 = displayPrefab.GetComponentsInChildren<ParticleSystemRenderer>(true); foreach (ParticleSystemRenderer val2 in componentsInChildren2) { ((Renderer)val2).material = new Material(((Renderer)val2).material); ((Renderer)val2).material.DisableKeyword("VERTEXCOLOR"); ((Renderer)val2).material.SetColor("_TintColor", Color.red); } Light[] componentsInChildren3 = displayPrefab.GetComponentsInChildren<Light>(true); float num = default(float); float num2 = default(float); float num3 = default(float); float num4 = default(float); float num5 = default(float); float num6 = default(float); foreach (Light val3 in componentsInChildren3) { Color.RGBToHSV(Color.red, ref num, ref num2, ref num3); Color.RGBToHSV(val3.color, ref num4, ref num5, ref num6); Color color = Color.HSVToRGB(num, num5, num6); color.a = val3.color.a; val3.color = color; } SurvivorDef val4 = ScriptableObject.CreateInstance<SurvivorDef>(); val4.cachedName = "SHIFTER_NAME"; val4.unlockableDef = null; val4.descriptionToken = "SHIFTER_DESCRIPTION"; val4.primaryColor = characterColor; val4.bodyPrefab = characterPrefab; val4.displayPrefab = displayPrefab; val4.outroFlavorToken = "SHIFTER_OUTRO"; val4.desiredSortPosition = 0.2f; val4.mainEndingEscapeFailureFlavorToken = "SHIFTER_FAIL"; ContentAddition.AddSurvivorDef(val4); SkillSetup(); GameObject val5 = PrefabAPI.InstantiateClone(Prefabs.Load<GameObject>("RoR2/DLC1/VoidSurvivor/VoidSurvivorMonsterMaster.prefab"), "ShifterMaster", true); Object.Destroy((Object)(object)Array.Find(val5.GetComponents<AISkillDriver>(), (AISkillDriver x) => (int)x.skillSlot == 3)); ContentAddition.AddMaster(val5); CharacterMaster component = val5.GetComponent<CharacterMaster>(); component.bodyPrefab = characterPrefab; } private void RegisterStates() { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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_0053: Unknown result type (might be due to invalid IL or missing references) bool flag = default(bool); ContentAddition.AddEntityState<BaseShifterState>(ref flag); ContentAddition.AddEntityState<AltPrimary>(ref flag); ContentAddition.AddEntityState<Primary>(ref flag); ContentAddition.AddEntityState<PrimaryEnd>(ref flag); ContentAddition.AddEntityState<Secondary>(ref flag); ContentAddition.AddEntityState<AltSecondary>(ref flag); ContentAddition.AddEntityState<Utility>(ref flag); ContentAddition.AddEntityState<Special>(ref flag); ContentAddition.AddEntityState<AltSpecial>(ref flag); ContentAddition.AddEntityState<Traverse>(ref flag); ContentAddition.AddEntityState<FlyState>(ref flag); } private void SkillSetup() { GenericSkill[] componentsInChildren = characterPrefab.GetComponentsInChildren<GenericSkill>(); foreach (GenericSkill val in componentsInChildren) { Object.DestroyImmediate((Object)(object)val); } PassiveSetup(); PrimarySetup(); SecondarySetup(); UtilitySetup(); SpecialSetup(); } private void PassiveSetup() { SkillLocator component = characterPrefab.GetComponent<SkillLocator>(); LanguageAPI.Add("SHIFTER_PASSIVE_NAME", "Inevitable"); LanguageAPI.Add("SHIFTER_PASSIVE_DESCRIPTION", "<style=cIsDamage>Immune</style> to <style=cIsUtility>fall damage</style>. All damage dealt applies a random <style=cIsDamage>debuff</style>." + Environment.NewLine + "Reality Shifter is <style=cIsDamage>immune</style> to debuffs." + Environment.NewLine + "Gain 5% <style=cIsHealth>Max HP</style>, <style=cIsHealing>health regen</style>, <style=cIsHealing>shield</style>, <style=cIsDamage>movement speed</style>, <style=cIsDamage>damage</style>, <style=cIsDamage>attack speed</style>, <style=cIsDamage>critical chance</style>, <style=cIsUtility>cooldown reduction</style> and <style=cIsHealing>0.05 armor</style> per level."); component.passiveSkill.enabled = true; component.passiveSkill.skillNameToken = "SHIFTER_PASSIVE_NAME"; component.passiveSkill.skillDescriptionToken = "<style=cKeywordName>Inevitable</style><style=cSub>"; component.passiveSkill.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("texVoidSurvivorSkillIcons_1"); component.passiveSkill.keywordToken = "SHIFTER_PASSIVE_DESCRIPTION"; } private void PrimarySetup() { //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_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) SkillLocator component = characterPrefab.GetComponent<SkillLocator>(); LanguageAPI.Add("SHIFTER_M1", "Cosmic Shrapnel"); LanguageAPI.Add("SHIFTER_M1_DESCRIPTION", "Fire tracking orbs that deal <style=cIsDamage>250% damage</style>."); SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(Primary)); val.activationStateMachineName = "Weapon"; val.baseMaxStock = 0; val.baseRechargeInterval = 0f; val.beginSkillCooldownOnSkillEnd = true; val.canceledFromSprinting = false; val.fullRestockOnAssign = true; val.interruptPriority = (InterruptPriority)0; val.isCombatSkill = true; val.mustKeyPress = false; val.cancelSprintingOnActivation = true; val.rechargeStock = 0; val.requiredStock = 0; val.stockToConsume = 0; val.icon = Prefabs.Load<SkillDef>("RoR2/DLC1/VoidSurvivor/FireCorruptDisk.asset").icon; val.skillDescriptionToken = "SHIFTER_M1_DESCRIPTION"; val.skillName = "SHIFTER_M1"; val.skillNameToken = "SHIFTER_M1"; ContentAddition.AddSkillDef(val); component.primary = Utils.NewGenericSkill(characterPrefab, val); LanguageAPI.Add("SHIFTER_M1_ALT", "Assimilate"); LanguageAPI.Add("SHIFTER_M1_ALT_DESCRIPTION", "Absorb an enemy, killing it <style=cIsDamage>instantly</style> and gaining its stats. This effect chains to an additional enemy for every <style=cIsUtility>10 levels</style>."); val = (SkillDef)(object)ScriptableObject.CreateInstance<HuntressTrackingSkillDef>(); val.activationState = new SerializableEntityStateType(typeof(AltPrimary)); val.activationStateMachineName = "Succ"; val.baseMaxStock = 0; val.baseRechargeInterval = 0f; val.beginSkillCooldownOnSkillEnd = true; val.canceledFromSprinting = false; val.fullRestockOnAssign = true; val.interruptPriority = (InterruptPriority)0; val.isCombatSkill = true; val.mustKeyPress = false; val.cancelSprintingOnActivation = true; val.rechargeStock = 0; val.requiredStock = 0; val.stockToConsume = 0; val.icon = Prefabs.Load<SkillDef>("RoR2/DLC1/VoidSurvivor/FireCorruptBeam.asset").icon; val.skillDescriptionToken = "SHIFTER_M1_ALT_DESCRIPTION"; val.skillName = "SHIFTER_M1_ALT"; val.skillNameToken = "SHIFTER_M1_ALT"; ContentAddition.AddSkillDef(val); Utils.AddAlt(component.primary.skillFamily, val, Achievements.bossKillUnlock); } private void SecondarySetup() { //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_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) SkillLocator component = characterPrefab.GetComponent<SkillLocator>(); LanguageAPI.Add("SHIFTER_M2", "Spacetime Blast"); LanguageAPI.Add("SHIFTER_M2_DESCRIPTION", "Fire a wave attack that deals <style=cIsDamage>400% damage</style> and <style=cIsDamage>freezes</style>."); SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(Secondary)); val.activationStateMachineName = "Weapon"; val.baseMaxStock = 1; val.baseRechargeInterval = 5f; val.beginSkillCooldownOnSkillEnd = true; val.canceledFromSprinting = false; val.fullRestockOnAssign = false; val.interruptPriority = (InterruptPriority)1; val.isCombatSkill = true; val.mustKeyPress = false; val.cancelSprintingOnActivation = false; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; val.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("texVoidSurvivorSkillIcons_4"); val.skillDescriptionToken = "SHIFTER_M2_DESCRIPTION"; val.skillName = "SHIFTER_M2"; val.skillNameToken = "SHIFTER_M2"; ContentAddition.AddSkillDef(val); component.secondary = Utils.NewGenericSkill(characterPrefab, val); LanguageAPI.Add("SHIFTER_M2_ALT", "End of Fate"); LanguageAPI.Add("SHIFTER_M2_ALT_DESCRIPTION", "Shoot out a void implosion that <style=cIsDamage>instantly kills</style> anything in its radius."); val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(AltSecondary)); val.activationStateMachineName = "Weapon"; val.baseMaxStock = 1; val.baseRechargeInterval = 5f; val.beginSkillCooldownOnSkillEnd = true; val.canceledFromSprinting = false; val.fullRestockOnAssign = false; val.interruptPriority = (InterruptPriority)1; val.isCombatSkill = true; val.mustKeyPress = false; val.cancelSprintingOnActivation = false; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; val.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("texVoidSurvivorSkillIcons_8"); val.skillDescriptionToken = "SHIFTER_M2_ALT_DESCRIPTION"; val.skillName = "SHIFTER_M2_ALT"; val.skillNameToken = "SHIFTER_M2_ALT"; ContentAddition.AddSkillDef(val); Utils.AddAlt(component.secondary.skillFamily, val, Achievements.billionDamageUnlock); } private void UtilitySetup() { //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_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) SkillLocator component = characterPrefab.GetComponent<SkillLocator>(); LanguageAPI.Add("SHIFTER_UTIL", "Dimensional Ascension"); LanguageAPI.Add("SHIFTER_UTIL_DESCRIPTION", "Gain <style=cIsDamage>1000% movement speed</style> for <style=cIsUtility>10s</style>. During this period, you may fly and travel through walls. You cannot be hit for the duration."); SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(Utility)); val.activationStateMachineName = "NoClip"; val.baseMaxStock = 1; val.baseRechargeInterval = 8f; val.beginSkillCooldownOnSkillEnd = true; val.canceledFromSprinting = false; val.fullRestockOnAssign = false; val.interruptPriority = (InterruptPriority)1; val.isCombatSkill = false; val.mustKeyPress = true; val.cancelSprintingOnActivation = false; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; val.icon = Prefabs.Load<SkillDef>("RoR2/DLC1/VoidSurvivor/VoidBlinkDown.asset").icon; val.skillDescriptionToken = "SHIFTER_UTIL_DESCRIPTION"; val.skillName = "SHIFTER_UTIL"; val.skillNameToken = "SHIFTER_UTIL"; ContentAddition.AddSkillDef(val); component.utility = Utils.NewGenericSkill(characterPrefab, val); LanguageAPI.Add("SHIFTER_UTIL_ALT", "Dimensional Transcendance"); LanguageAPI.Add("SHIFTER_UTIL_ALT_DESCRIPTION", "<style=cIsDamage>Passive effect:</style> You may fly and travel though walls. You cannot be hit."); val = (SkillDef)(object)ScriptableObject.CreateInstance<MasterSpawnSlotSkillDef>(); val.activationState = new SerializableEntityStateType(typeof(Idle)); val.activationStateMachineName = "Traverse"; val.baseMaxStock = 0; val.baseRechargeInterval = 0f; val.beginSkillCooldownOnSkillEnd = true; val.canceledFromSprinting = false; val.fullRestockOnAssign = false; val.interruptPriority = (InterruptPriority)1; val.isCombatSkill = false; val.mustKeyPress = true; val.cancelSprintingOnActivation = false; val.rechargeStock = 0; val.requiredStock = 0; val.stockToConsume = 0; val.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("texVoidSurvivorSkillIcons_2"); val.skillDescriptionToken = "SHIFTER_UTIL_ALT_DESCRIPTION"; val.skillName = "SHIFTER_UTIL_ALT"; val.skillNameToken = "SHIFTER_UTIL_ALT"; ContentAddition.AddSkillDef(val); Utils.AddAlt(component.utility.skillFamily, val, Achievements.endingUnlock); } private void SpecialSetup() { //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_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) SkillLocator component = characterPrefab.GetComponent<SkillLocator>(); LanguageAPI.Add("SHIFTER_SPEC", "Reality Warp"); LanguageAPI.Add("SHIFTER_SPEC_DESCRIPTION", "Choose any item or equipment to find."); SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(Special)); val.activationStateMachineName = "Pick"; val.baseMaxStock = 1; val.baseRechargeInterval = 60f; val.beginSkillCooldownOnSkillEnd = true; val.canceledFromSprinting = false; val.fullRestockOnAssign = false; val.interruptPriority = (InterruptPriority)0; val.isCombatSkill = true; val.mustKeyPress = true; val.cancelSprintingOnActivation = false; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; val.icon = Prefabs.Load<SkillDef>("RoR2/DLC1/VoidSurvivor/CrushHealth.asset").icon; val.skillDescriptionToken = "SHIFTER_SPEC_DESCRIPTION"; val.skillName = "SHIFTER_SPEC"; val.skillNameToken = "SHIFTER_SPEC"; ContentAddition.AddSkillDef(val); component.special = Utils.NewGenericSkill(characterPrefab, val); LanguageAPI.Add("SHIFTER_SPEC_ALT", "Singularity"); LanguageAPI.Add("SHIFTER_SPEC_ALT_DESCRIPTION", "<style=cIsDamage>Instantly kills</style> all enemies. Enemies that spawn in the next <style=cIsUtility>10s</style> instantly die."); val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(AltSpecial)); val.activationStateMachineName = "Pick"; val.baseMaxStock = 0; val.baseRechargeInterval = 0f; val.beginSkillCooldownOnSkillEnd = true; val.canceledFromSprinting = false; val.fullRestockOnAssign = false; val.interruptPriority = (InterruptPriority)0; val.isCombatSkill = true; val.mustKeyPress = true; val.cancelSprintingOnActivation = false; val.rechargeStock = 0; val.requiredStock = 0; val.stockToConsume = 0; val.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("texVoidSurvivorSkillIcons_3"); val.skillDescriptionToken = "SHIFTER_SPEC_ALT_DESCRIPTION"; val.skillName = "SHIFTER_SPEC_ALT"; val.skillNameToken = "SHIFTER_SPEC_ALT"; ContentAddition.AddSkillDef(val); Utils.AddAlt(component.special.skillFamily, val, Achievements.unlockAll); } } internal class Prefabs { internal static GameObject crosshair; internal static GameObject trackingOrbProjectile; internal static GameObject trackingOrbProjectileGhost; internal static GameObject trackingOrbImpactEffect; internal static GameObject freezingWaveProjectile; internal static GameObject freezingWaveProjectileGhost; internal static GameObject itemPanelChargeEffect; internal static GameObject itemPanelMuzzleEffect; internal static GameObject executeLineEffect; internal static GameObject executeLineImpactEffect; internal static GameObject traversePP; internal static GameObject traversePPPermanent; internal static GameObject instaKillPP; internal static GameObject swingEffect; internal static GameObject itemSelectionPanel; internal static GameObject aimIndicator; internal static GameObject insteaDeathProjectile; internal static GameObject insteaDeathProjectileGhost; internal static GameObject insteaDeathProjectileImpactEffect; internal static BuffDef gigaSpeedBuff; internal static BuffDef gigaSpeedBuffAlt; internal static Material ghostEffectMat; internal static Material redOverlayMat; internal static Material instaKillMat; internal static Sprite texUnlockIcon; internal static List<PickupIndex> allItems = new List<PickupIndex>(); internal static Option[] allOptions; internal static T Load<T>(string path) { //IL_0002: 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) return Addressables.LoadAssetAsync<T>((object)path).WaitForCompletion(); } [SystemInitializer(new Type[] { typeof(ItemCatalog) })] public unsafe static void SetAllAvailableItems() { //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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) //IL_00a2: 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_00d7: Expected I4, but got Unknown //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Expected I4, but got Unknown //IL_03ef: Unknown result type (might be due to invalid IL or missing references) //IL_03f4: Unknown result type (might be due to invalid IL or missing references) //IL_0404: Unknown result type (might be due to invalid IL or missing references) //IL_040e: Unknown result type (might be due to invalid IL or missing references) //IL_0413: Unknown result type (might be due to invalid IL or missing references) //IL_0420: Unknown result type (might be due to invalid IL or missing references) //IL_0430: Unknown result type (might be due to invalid IL or missing references) //IL_043a: Unknown result type (might be due to invalid IL or missing references) //IL_043f: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_02d5: Unknown result type (might be due to invalid IL or missing references) //IL_02da: Unknown result type (might be due to invalid IL or missing references) //IL_02df: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: Unknown result type (might be due to invalid IL or missing references) List<PickupIndex> list = new List<PickupIndex>(); List<PickupIndex> list2 = new List<PickupIndex>(); List<PickupIndex> list3 = new List<PickupIndex>(); List<PickupIndex> list4 = new List<PickupIndex>(); List<PickupIndex> list5 = new List<PickupIndex>(); List<PickupIndex> list6 = new List<PickupIndex>(); List<PickupIndex> list7 = new List<PickupIndex>(); List<PickupIndex> list8 = new List<PickupIndex>(); List<PickupIndex> list9 = new List<PickupIndex>(); List<PickupIndex> list10 = new List<PickupIndex>(); List<PickupIndex> list11 = new List<PickupIndex>(); List<PickupIndex> list12 = new List<PickupIndex>(); List<PickupIndex> list13 = new List<PickupIndex>(); Sprite val = Load<Sprite>("RoR2/Base/Core/texNullIcon.png"); for (int i = 0; i < ItemCatalog.allItemDefs.Length; i++) { ItemDef val2 = (ItemDef)Unsafe.Read<object>((void*)ItemCatalog.allItemDefs[i]); if (val2.hidden) { continue; } List<PickupIndex> list14 = null; ItemTier tier = val2.tier; ItemTier val3 = tier; switch ((int)val3) { case 0: list14 = list; break; case 1: list14 = list3; break; case 2: list14 = list5; break; case 6: list14 = list2; break; case 7: list14 = list4; break; case 8: list14 = list6; break; case 3: list14 = list7; break; case 4: list14 = list8; break; case 9: list14 = list9; break; case 10: list14 = list10; break; } ItemTier deprecatedTier = val2.deprecatedTier; ItemTier val4 = deprecatedTier; switch ((int)val4) { case 0: list14 = list; break; case 1: list14 = list3; break; case 2: list14 = list5; break; case 6: list14 = list2; break; case 7: list14 = list4; break; case 8: list14 = list6; break; case 3: list14 = list7; break; case 4: list14 = list8; break; case 9: list14 = list9; break; case 10: list14 = list10; break; } string @string = Language.GetString(val2.nameToken); if (!Utility.IsNullOrWhiteSpace(@string) && @string != val2.nameToken && (Object)(object)val2.pickupIconSprite != (Object)(object)val && (Object)(object)val2.pickupIconSprite != (Object)null) { PickupIndex item = PickupCatalog.FindPickupIndex(val2.itemIndex); if (list14 != null && !list14.Contains(item)) { list14.Add(item); } } } for (int j = 0; j < EquipmentCatalog.equipmentDefs.Length; j++) { EquipmentDef val5 = EquipmentCatalog.equipmentDefs[j]; if (val5.canDrop) { } List<PickupIndex> list15 = null; list15 = (val5.isLunar ? list12 : ((!val5.isBoss) ? list11 : list13)); string string2 = Language.GetString(val5.nameToken); if (!Utility.IsNullOrWhiteSpace(string2) && string2 != val5.nameToken && (Object)(object)val5.pickupIconSprite != (Object)(object)val && (Object)(object)val5.pickupIconSprite != (Object)null) { PickupIndex item2 = PickupCatalog.FindPickupIndex(val5.equipmentIndex); if (list15 != null && !list15.Contains(item2)) { list15.Add(item2); } } } allItems.AddRange(list); allItems.AddRange(list3); allItems.AddRange(list5); allItems.AddRange(list7); allItems.AddRange(list8); allItems.AddRange(list2); allItems.AddRange(list4); allItems.AddRange(list6); allItems.AddRange(list9); allItems.AddRange(list10); allItems.AddRange(list11); allItems.AddRange(list12); allItems.AddRange(list13); allOptions = PickupPickerController.GenerateOptionsFromArray(allItems.ToArray()); RectTransform component = ((Component)itemSelectionPanel.GetComponentInChildren<GridLayoutGroup>()).GetComponent<RectTransform>(); component.sizeDelta += Vector2.up * (float)allItems.Count * 14.5f; ((Transform)component).localPosition = Vector2.op_Implicit(Vector2.up * (float)allItems.Count * -25.7f); Object.Destroy((Object)(object)freezingWaveProjectileGhost.GetComponentInChildren<RotateAroundAxis>(true)); } internal static void CreatePrefabs() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Expected O, but got Unknown //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Expected O, but got Unknown //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Expected O, but got Unknown //IL_02f5: Unknown result type (might be due to invalid IL or missing references) //IL_02fa: Unknown result type (might be due to invalid IL or missing references) //IL_0420: Unknown result type (might be due to invalid IL or missing references) //IL_0427: Expected O, but got Unknown //IL_044e: Unknown result type (might be due to invalid IL or missing references) //IL_0453: Unknown result type (might be due to invalid IL or missing references) //IL_048f: Unknown result type (might be due to invalid IL or missing references) //IL_0495: Expected O, but got Unknown //IL_04b2: Unknown result type (might be due to invalid IL or missing references) //IL_04e0: Unknown result type (might be due to invalid IL or missing references) //IL_04ea: Expected O, but got Unknown //IL_0518: Unknown result type (might be due to invalid IL or missing references) //IL_056f: Unknown result type (might be due to invalid IL or missing references) //IL_0579: Expected O, but got Unknown //IL_05a7: Unknown result type (might be due to invalid IL or missing references) //IL_0649: Unknown result type (might be due to invalid IL or missing references) //IL_0653: Unknown result type (might be due to invalid IL or missing references) //IL_0660: Unknown result type (might be due to invalid IL or missing references) //IL_066a: Unknown result type (might be due to invalid IL or missing references) //IL_066f: Unknown result type (might be due to invalid IL or missing references) //IL_0686: Unknown result type (might be due to invalid IL or missing references) //IL_069d: Unknown result type (might be due to invalid IL or missing references) //IL_06c0: Unknown result type (might be due to invalid IL or missing references) //IL_06c7: Expected O, but got Unknown //IL_06fc: Unknown result type (might be due to invalid IL or missing references) //IL_08ae: Unknown result type (might be due to invalid IL or missing references) //IL_08ec: Unknown result type (might be due to invalid IL or missing references) //IL_08f1: Unknown result type (might be due to invalid IL or missing references) //IL_0908: Unknown result type (might be due to invalid IL or missing references) //IL_0985: Unknown result type (might be due to invalid IL or missing references) //IL_07fe: Unknown result type (might be due to invalid IL or missing references) //IL_07dc: Unknown result type (might be due to invalid IL or missing references) //IL_07bc: Unknown result type (might be due to invalid IL or missing references) //IL_0aa7: Unknown result type (might be due to invalid IL or missing references) //IL_0ab1: Unknown result type (might be due to invalid IL or missing references) //IL_0add: Unknown result type (might be due to invalid IL or missing references) //IL_0ae7: Expected O, but got Unknown //IL_0b0a: Unknown result type (might be due to invalid IL or missing references) //IL_0c74: Unknown result type (might be due to invalid IL or missing references) //IL_0c90: Unknown result type (might be due to invalid IL or missing references) //IL_082e: Unknown result type (might be due to invalid IL or missing references) //IL_0d67: Unknown result type (might be due to invalid IL or missing references) //IL_0d79: Unknown result type (might be due to invalid IL or missing references) //IL_0d83: Unknown result type (might be due to invalid IL or missing references) //IL_0dd3: Unknown result type (might be due to invalid IL or missing references) //IL_0de5: Unknown result type (might be due to invalid IL or missing references) //IL_0def: Unknown result type (might be due to invalid IL or missing references) //IL_0e21: Unknown result type (might be due to invalid IL or missing references) //IL_0e2b: Expected O, but got Unknown //IL_0e6c: Unknown result type (might be due to invalid IL or missing references) //IL_0e8f: Unknown result type (might be due to invalid IL or missing references) //IL_0e94: Unknown result type (might be due to invalid IL or missing references) //IL_0eaf: Unknown result type (might be due to invalid IL or missing references) //IL_0eb4: Unknown result type (might be due to invalid IL or missing references) //IL_0ee8: Unknown result type (might be due to invalid IL or missing references) //IL_0f7c: Unknown result type (might be due to invalid IL or missing references) //IL_0fc2: Unknown result type (might be due to invalid IL or missing references) //IL_0fc9: Expected O, but got Unknown //IL_0fd0: Unknown result type (might be due to invalid IL or missing references) //IL_0fe5: Unknown result type (might be due to invalid IL or missing references) //IL_0fec: Expected O, but got Unknown //IL_0ff3: Unknown result type (might be due to invalid IL or missing references) //IL_084f: Unknown result type (might be due to invalid IL or missing references) //IL_09f0: Unknown result type (might be due to invalid IL or missing references) //IL_09fa: Expected O, but got Unknown //IL_0a28: Unknown result type (might be due to invalid IL or missing references) //IL_1039: Unknown result type (might be due to invalid IL or missing references) //IL_1043: Expected O, but got Unknown //IL_1062: Unknown result type (might be due to invalid IL or missing references) //IL_1254: Unknown result type (might be due to invalid IL or missing references) //IL_125e: Expected O, but got Unknown //IL_128c: Unknown result type (might be due to invalid IL or missing references) //IL_1192: Unknown result type (might be due to invalid IL or missing references) //IL_119c: Unknown result type (might be due to invalid IL or missing references) //IL_11c4: Unknown result type (might be due to invalid IL or missing references) //IL_11ce: Expected O, but got Unknown //IL_11fc: Unknown result type (might be due to invalid IL or missing references) //IL_12d9: Unknown result type (might be due to invalid IL or missing references) //IL_12e3: Expected O, but got Unknown //IL_12ff: Unknown result type (might be due to invalid IL or missing references) texUnlockIcon = Load<Sprite>("RoR2/Base/Common/MiscIcons/texUnlockIcon.png"); redOverlayMat = Load<Material>("RoR2/DLC1/VoidSurvivor/matVoidSurvivorCorruptOverlay.mat"); ghostEffectMat = new Material(Load<Material>("RoR2/Base/Common/VFX/matGhostEffect.mat")); ghostEffectMat.SetColor("_TintColor", new Color(0.31372f, 0f, 0f)); ghostEffectMat.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/ColorRamps/texRampParentFire.png")); instaKillMat = new Material(Load<Material>("RoR2/Base/Parent/matParentBlink.mat")); instaKillMat.SetColor("_TintColor", Color.red); instaKillMat.SetTexture("_MainTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/texCloudWaterFoam1.jpg")); instaKillMat.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/ColorRamps/texRampGolem.png")); gigaSpeedBuff = Utils.NewBuffDef("Dimensional Ascension", stack: false, hidden: true, null, Color.white); gigaSpeedBuffAlt = Utils.NewBuffDef("Dimensional Ascension", stack: false, hidden: true, null, Color.white); aimIndicator = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Huntress/HuntressTrackingIndicator.prefab"), "ShifterAimIndicator", false); SpriteRenderer[] componentsInChildren = aimIndicator.GetComponentsInChildren<SpriteRenderer>(); float num = default(float); float num2 = default(float); float num3 = default(float); float num4 = default(float); float num5 = default(float); float num6 = default(float); foreach (SpriteRenderer val in componentsInChildren) { Color.RGBToHSV(Color.red, ref num, ref num2, ref num3); Color.RGBToHSV(val.color, ref num4, ref num5, ref num6); Color color = Color.HSVToRGB(num, num5, num6); color.a = val.color.a; val.color = color; } swingEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/DLC1/VoidSurvivor/VoidSurvivorMeleeSlash2.prefab"), "ShifterSwingEffect", false); ParticleSystemRenderer componentInChildren = swingEffect.GetComponentInChildren<ParticleSystemRenderer>(); ((Renderer)componentInChildren).material = Load<Material>("RoR2/DLC1/VoidSurvivor/matVoidSurvivorLightningCorrupted.mat"); swingEffect.GetComponentInChildren<DestroyOnTimer>().duration = 0.8f; crosshair = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/DLC1/VoidSurvivor/VoidSurvivorCrosshair.prefab"), "ShifterCrosshair", false); EnumerableExtensions.ForEachTry<Image>((IEnumerable<Image>)crosshair.GetComponentsInChildren<Image>(), (Action<Image>)delegate(Image x) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) ((Graphic)x).color = new Color(0.8745f, 0f, 0f); }, (IDictionary<Image, Exception>)null); traversePP = new GameObject("ShifterPP"); traversePP.layer = 20; traversePP.AddComponent<NetworkIdentity>(); traversePP.transform.parent = crosshair.transform.parent; PostProcessVolume val2 = traversePP.AddComponent<PostProcessVolume>(); val2.profile = Object.Instantiate<PostProcessProfile>(Load<PostProcessProfile>("RoR2/Base/title/ppLocalDoppelganger.asset")); val2.sharedProfile = val2.profile; val2.weight = 1f; val2.priority = 99f; val2.isGlobal = true; ColorGrading val3 = (ColorGrading)val2.profile.settings[1]; ((ParameterOverride)val3.tint).overrideState = false; ((ParameterOverride)val3.colorFilter).overrideState = true; ((ParameterOverride<Color>)(object)val3.colorFilter).value = new Color(0.38039f, 0.11764f, 0.1098f); ((ParameterOverride<float>)(object)val3.mixerRedOutRedIn).value = 300f; PostProcessDuration val4 = traversePP.AddComponent<PostProcessDuration>(); val4.ppVolume = val2; val4.ppWeightCurve = AnimationCurve.Linear(0f, 1f, 1f, 0f); val4.ppWeightCurve.AddKey(0.85f, 1f); val4.maxDuration = 11f; val4.destroyOnEnd = true; PrefabAPI.RegisterNetworkPrefab(traversePP); traversePPPermanent = PrefabAPI.InstantiateClone(traversePP, "ShifterPPPermanent", false); Object.Destroy((Object)(object)traversePPPermanent.GetComponent<PostProcessDuration>()); instaKillPP = PrefabAPI.InstantiateClone(traversePP, "ShifterPPPInstakill", false); Object.Destroy((Object)(object)instaKillPP.GetComponent<PostProcessDuration>()); PostProcessVolume val5 = instaKillPP.AddComponent<PostProcessVolume>(); val5.profile = Object.Instantiate<PostProcessProfile>(Load<PostProcessProfile>("RoR2/Base/title/ppLocalElectricWorm.asset")); val5.sharedProfile = val5.profile; val5.weight = 1f; val5.priority = 99f; val5.isGlobal = true; ColorGrading val6 = (ColorGrading)val5.profile.settings[1]; ((ParameterOverride<float>)(object)val6.temperature).value = 130f; ((ParameterOverride<Color>)(object)val6.colorFilter).value = new Color(1f, 0.29803f, 0.33333f); itemPanelChargeEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/DLC1/VoidSurvivor/VoidSurvivorChargeMegaBlaster.prefab"), "ShifterItemPanelChargeEffect", false); MeshRenderer componentInChildren2 = itemPanelChargeEffect.GetComponentInChildren<MeshRenderer>(); ((Renderer)componentInChildren2).sharedMaterials[1] = new Material(((Renderer)componentInChildren2).sharedMaterials[1]); ((Renderer)componentInChildren2).sharedMaterials[1].SetColor("_TintColor", new Color(0.78431f, 0f, 0f)); ParticleSystemRenderer[] componentsInChildren2 = itemPanelChargeEffect.GetComponentsInChildren<ParticleSystemRenderer>(); foreach (ParticleSystemRenderer val7 in componentsInChildren2) { ((Renderer)val7).material = new Material(((Renderer)val7).material); ((Renderer)val7).material.DisableKeyword("VERTEXCOLOR"); ((Renderer)val7).material.SetColor("_TintColor", new Color(0.78431f, 0f, 0f)); } itemPanelMuzzleEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/DLC1/VoidSurvivor/VoidSurvivorCrushHealthMuzzleflash.prefab"), "ShifterItemPanelMuzzleEffect", false); ParticleSystemRenderer[] componentsInChildren3 = itemPanelMuzzleEffect.GetComponentsInChildren<ParticleSystemRenderer>(); foreach (ParticleSystemRenderer val8 in componentsInChildren3) { ((Renderer)val8).material = new Material(((Renderer)val8).material); ((Renderer)val8).material.DisableKeyword("VERTEXCOLOR"); ((Renderer)val8).material.SetColor("_TintColor", new Color(0.78431f, 0f, 0f)); } Utils.RegisterEffect(itemPanelMuzzleEffect, -1f); itemSelectionPanel = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Command/CommandPickerPanel.prefab"), "ShifterPickerPanel", false); ((Component)itemSelectionPanel.GetComponentInChildren<LanguageTextMeshController>()).gameObject.SetActive(false); GridLayoutGroup componentInChildren3 = itemSelectionPanel.GetComponentInChildren<GridLayoutGroup>(); componentInChildren3.constraint = (Constraint)1; componentInChildren3.constraintCount = 6; ((LayoutGroup)componentInChildren3).childAlignment = (TextAnchor)1; RectTransform component = ((Component)componentInChildren3).GetComponent<RectTransform>(); ((Behaviour)((Component)component).GetComponent<RawImage>()).enabled = false; component.sizeDelta = Vector2.right * 444f; ((Transform)component).localPosition = Vector2.op_Implicit(Vector2.up * 100f); component.anchorMin = new Vector2(0.5f, 1f); component.anchorMax = new Vector2(0.5f, 1f); GameObject val9 = new GameObject("Scroll", new Type[1] { typeof(RectTransform) }); val9.gameObject.layer = 5; val9.transform.SetParent(((Component)componentInChildren3).transform.parent); val9.transform.localPosition = ((Component)componentInChildren3).transform.localPosition; ((Component)componentInChildren3).transform.parent = val9.transform; ScrollRect val10 = val9.AddComponent<ScrollRect>(); val10.horizontal = false; val10.content = component; val10.scrollSensitivity = 30f; PickupPickerPanel component2 = itemSelectionPanel.GetComponent<PickupPickerPanel>(); ShifterPanelBehaviour shifterPanelBehaviour = itemSelectionPanel.AddComponent<ShifterPanelBehaviour>(); Image[] componentsInChildren4 = itemSelectionPanel.GetComponentsInChildren<Image>(); foreach (Image val11 in componentsInChildren4) { string name = ((Object)val11).name; if (name == "SpinnyOutlines") { if (((Component)val11).transform.childCount == 0) { ((Graphic)val11).color = new Color(0.43529f, 0f, 0.05098f); } else { ((Graphic)val11).color = new Color(0.63529f, 0f, 0.0745f); } } if (name == "BG") { ((Graphic)val11).color = Color.red; } if (name == "ColoredOverlay") { ((Graphic)val11).color = new Color(0.63529f, 0f, 0.0745f); } if (name == "ColoredOverlay, Subtle") { ((Graphic)val11).color = Color.clear; } if (name == "CancelButton") { shifterPanelBehaviour.cancelButton = ((Component)val11).GetComponent<MPButton>(); } } Image val12 = val9.gameObject.AddComponent<Image>(); ((Graphic)val12).color = new Color(0.12549f, 0f, 0f); val12.sprite = Load<Sprite>("RoR2/Base/UI/texUIHighlightBoxOutlineThickIcon.png"); val12.type = (Type)2; val9.gameObject.AddComponent<Mask>(); RectTransform component3 = ((Component)val10).GetComponent<RectTransform>(); ((Transform)component3).localPosition = Vector2.op_Implicit(Vector2.zero); component3.sizeDelta = new Vector2(500f, 510f); shifterPanelBehaviour.gridlayoutGroup = component2.gridlayoutGroup; shifterPanelBehaviour.buttonContainer = component2.buttonContainer; shifterPanelBehaviour.buttonPrefab = component2.buttonPrefab; shifterPanelBehaviour.coloredImages = component2.coloredImages; shifterPanelBehaviour.darkColoredImages = component2.darkColoredImages; Object.Destroy((Object)(object)component2); trackingOrbImpactEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/DLC1/VoidBarnacle/VoidBarnacleImpactExplosion.prefab"), "ShifterTrackingOrbImpactEffect", false); trackingOrbImpactEffect.GetComponentInChildren<Light>().color = Color.red; ParticleSystemRenderer[] componentsInChildren5 = trackingOrbImpactEffect.GetComponentsInChildren<ParticleSystemRenderer>(); foreach (ParticleSystemRenderer val13 in componentsInChildren5) { string name2 = ((Object)val13).name; if (name2 == "BillboardFire" || name2 == "Flames") { ((Renderer)val13).enabled = false; continue; } ((Renderer)val13).material = new Material(((Renderer)val13).material); ((Renderer)val13).material.DisableKeyword("VERTEXCOLOR"); ((Renderer)val13).material.SetColor("_TintColor", new Color(0.78431f, 0f, 0f)); } Utils.RegisterEffect(trackingOrbImpactEffect, -1f, "Play_item_void_chainLightning", parentToReferencedTransform: false, positionAtReferencedTransform: false, applyScale: true); trackingOrbProjectileGhost = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/LunarSkillReplacements/LunarNeedleGhost.prefab"), "ShifterTrackingOrbProjectileGhost", false); ((Renderer)trackingOrbProjectileGhost.GetComponentInChildren<TrailRenderer>()).material = Load<Material>("RoR2/DLC1/VoidSurvivor/matVoidBlinkTrailCorrupted.mat"); ParticleSystemRenderer[] componentsInChildren6 = trackingOrbProjectileGhost.GetComponentsInChildren<ParticleSystemRenderer>(); ((Component)componentsInChildren6[0]).transform.localScale = Vector3.one * 3f; ((Renderer)componentsInChildren6[0]).material = Load<Material>("RoR2/DLC1/VoidSurvivor/matVoidSurvivorBlasterCoreCorrupted.mat"); ((Renderer)componentsInChildren6[1]).material = new Material(((Renderer)componentsInChildren6[1]).material); ((Renderer)componentsInChildren6[1]).material.DisableKeyword("VERTEXCOLOR"); ((Renderer)componentsInChildren6[1]).material.SetColor("_TintColor", Color.red); trackingOrbProjectile = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/LunarSkillReplacements/LunarNeedleProjectile.prefab"), "ShifterTrackingOrbProjectile", true); Object.Destroy((Object)(object)trackingOrbProjectile.GetComponent<ProjectileSingleTargetImpact>()); Object.Destroy((Object)(object)trackingOrbProjectile.GetComponent<ProjectileStickOnImpact>()); ProjectileController component4 = trackingOrbProjectile.GetComponent<ProjectileController>(); component4.ghostPrefab = trackingOrbProjectileGhost; component4.flightSoundLoop = Load<LoopSoundDef>("RoR2/DLC1/VoidSurvivor/lsdVoidMegaBlasterFlight.asset"); component4.canImpactOnTrigger = true; trackingOrbProjectile.GetComponent<ProjectileSteerTowardTarget>().rotationSpeed = 315f; ProjectileSimple component5 = trackingOrbProjectile.GetComponent<ProjectileSimple>(); ((Behaviour)component5).enabled = false; component5.desiredForwardSpeed = MainPlugin.primarySpeed.Value; component5.lifetime = 12f; trackingOrbProjectile.AddComponent<DelayedProjectile>(); ProjectileImpactExplosion component6 = trackingOrbProjectile.GetComponent<ProjectileImpactExplosion>(); component6.impactEffect = trackingOrbImpactEffect; ((ProjectileExplosion)component6).blastRadius = 2f; ((ProjectileExplosion)component6).blastDamageCoefficient = 1f; component6.timerAfterImpact = false; component6.destroyOnEnemy = true; component6.destroyOnWorld = false; component6.lifetime = 12f; ((Collider)trackingOrbProjectile.GetComponent<SphereCollider>()).isTrigger = true; ContentAddition.AddProjectile(trackingOrbProjectile); freezingWaveProjectileGhost = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/DLC1/PrimarySkillShuriken/ShurikenGhost.prefab"), "ShifterFreezingWaveGhost", false); Transform child = freezingWaveProjectileGhost.transform.GetChild(0); child.localScale = MainPlugin.freezeProjectileEffectSize.Value; child.localRotation = Quaternion.Euler(0f, -90f, 0f); Object.Destroy((Object)(object)freezingWaveProjectileGhost.GetComponentInChildren<SetRandomRotation>()); Object.Destroy((Object)(object)freezingWaveProjectileGhost.GetComponentInChildren<RotateAroundAxis>(true)); EnumerableExtensions.ForEachTry<MeshRenderer>((IEnumerable<MeshRenderer>)freezingWaveProjectileGhost.GetComponentsInChildren<MeshRenderer>(), (Action<MeshRenderer>)delegate(MeshRenderer x) { ((Renderer)x).enabled = false; }, (IDictionary<MeshRenderer, Exception>)null); TrailRenderer componentInChildren4 = freezingWaveProjectileGhost.GetComponentInChildren<TrailRenderer>(true); ((Component)componentInChildren4).gameObject.SetActive(true); ((Renderer)componentInChildren4).material = Load<Material>("RoR2/DLC1/VoidSurvivor/matVoidBlinkTrailCorrupted.mat"); componentInChildren4.textureMode = (LineTextureMode)0; componentInChildren4.widthMultiplier = 0f; TrailRenderer val14 = Object.Instantiate<TrailRenderer>(componentInChildren4); ((Component)val14).transform.parent = ((Component)componentInChildren4).transform.parent; ((Component)val14).transform.localRotation = Quaternion.Euler(90f, 0f, 0f); ((Component)val14).transform.localPosition = Vector3.up * 2f; val14.widthMultiplier = 14f; TrailRenderer val15 = Object.Instantiate<TrailRenderer>(componentInChildren4); ((Component)val15).transform.parent = ((Component)componentInChildren4).transform.parent; ((Component)val15).transform.localRotation = Quaternion.Euler(90f, 0f, 0f); ((Component)val15).transform.localPosition = Vector3.up * -2f; val15.widthMultiplier = 14f; ParticleSystemRenderer[] componentsInChildren7 = freezingWaveProjectileGhost.GetComponentsInChildren<ParticleSystemRenderer>(); ((Renderer)componentsInChildren7[0]).material = new Material(Load<Material>("RoR2/DLC1/VoidMegaCrab/matVoidCrabAntiMatterParticleBillboard.mat")); ((Renderer)componentsInChildren7[0]).material.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/ColorRamps/texRampImp2.png")); ((Renderer)componentsInChildren7[0]).material.DisableKeyword("VERTEXCOLOR"); ((Renderer)componentsInChildren7[0]).material.SetColor("_TintColor", Color.red); ((Renderer)componentsInChildren7[1]).enabled = false; ParticleSystem component7 = ((Component)componentsInChildren7[0]).GetComponent<ParticleSystem>(); Vector3 startRotation3D = component7.startRotation3D; ((Vector3)(ref startRotation3D)).Set(0f, 0f, 0f); RotationOverLifetimeModule rotationOverLifetime = component7.rotationOverLifetime; ((RotationOverLifetimeModule)(ref rotationOverLifetime)).enabled = false; freezingWaveProjectile = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Commando/FMJRamping.prefab"), "ShifterFreezingWaveProjectile", true); freezingWaveProjectile.GetComponent<ProjectileDamage>().damageType = (DamageType)256; ProjectileSimple component8 = freezingWaveProjectile.GetComponent<ProjectileSimple>(); component8.desiredForwardSpeed = MainPlugin.secondarySpeed.Value; component8.lifetime = 15f; ProjectileController component9 = freezingWaveProjectile.GetComponent<ProjectileController>(); component9.ghostPrefab = freezingWaveProjectileGhost; component9.flightSoundLoop = Load<LoopSoundDef>("RoR2/DLC1/VoidJailer/lsdJailerDart.asset"); ProjectileOverlapAttack component10 = freezingWaveProjectile.GetComponent<ProjectileOverlapAttack>(); component10.impactEffect = Load<GameObject>("RoR2/Base/Mage/MageIceExplosion.prefab"); ((Component)freezingWaveProjectile.GetComponent<HitBoxGroup>().hitBoxes[0]).gameObject.transform.localScale = MainPlugin.freezeProjectileHitboxSize.Value; ContentAddition.AddProjectile(freezingWaveProjectile); executeLineImpactEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Nullifier/NullifierExplosion.prefab"), "ShifterExecuteLineImpactEffect", false); MeshRenderer componentInChildren5 = executeLineImpactEffect.GetComponentInChildren<MeshRenderer>(); Material val16 = new Material(Load<Material>("RoR2/Base/Nullifier/matNullifierGemPortal.mat")); val16.SetColor("_Color", Color.red); Material val17 = new Material(Load<Material>("RoR2/Base/Common/VFX/matGravsphereCore.mat")); val17.SetColor("_TintColor", Color.red); ((Renderer)componentInChildren5).sharedMaterials = (Material[])(object)new Material[2] { val16, val17 }; ParticleSystemRenderer[] componentsInChildren8 = executeLineImpactEffect.GetComponentsInChildren<ParticleSystemRenderer>(); foreach (ParticleSystemRenderer val18 in componentsInChildren8) { ((Renderer)val18).material = new Material(((Renderer)val18).material); ((Renderer)val18).material.DisableKeyword("VERTEXCOLOR"); ((Renderer)val18).material.SetColor("_TintColor", Color.red); } Utils.RegisterEff