RUMBLE does not support other mod managers. If you want to use a manager, you must use the RUMBLE Mod Manager, a manager specifically designed for this game.
Decompiled source of DieHarder v1.0.0
Mods/DieHarder.dll
Decompiled 2 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using DieHarder; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppPhoton.Pun; using Il2CppPhoton.Voice.PUN; using Il2CppRUMBLE.Combat.ShiftStones; using Il2CppRUMBLE.Managers; using Il2CppRUMBLE.MoveSystem; using Il2CppRUMBLE.Players; using Il2CppRUMBLE.Players.Subsystems; using Il2CppRUMBLE.Pools; using Il2CppRUMBLE.Utilities; using Il2CppRootMotion; using Il2CppRootMotion.FinalIK; using Il2CppSystem.Collections.Generic; using MelonLoader; using Microsoft.CodeAnalysis; using RumbleModUI; using RumbleModdingAPI; using UnityEngine; using UnityEngine.VFX; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyDescription("That death goes hard")] [assembly: AssemblyCopyright("Created by TacoSlayer36")] [assembly: MelonInfo(typeof(DHClass), "DieHarder", "1.0.0", "TacoSlayer36", null)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("DieHarder")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("DieHarder")] [assembly: AssemblyTitle("DieHarder")] [assembly: AssemblyVersion("1.0.0.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace DieHarder { public static class BuildInfo { public const string ModName = "DieHarder"; public const string ModVersion = "1.0.0"; public const string Description = "That death goes hard"; public const string Author = "TacoSlayer36"; public const string Company = ""; } public class DHClass : MelonMod { private enum RoundResult { T, W, L, u } private Mod Mod = new Mod(); private int matchRagdolling = 2; private int corpsePersistence = 0; private int effectsOnDeath = 2; private int otherRagdolling = 1; private int otherCorpsePersistence = -5; private int otherEffectsOnDeath = 0; private bool lockCam = false; private float effectsVolume = 1f; private bool globalInit = false; private bool sceneInit = false; private bool matchEnded = false; private bool doingMatchEnd = false; private bool roundEnded = false; private bool doingRoundEnd = false; private bool healthsFilled = false; private string scene = ""; private RoundResult[] rounds = new RoundResult[3] { RoundResult.u, RoundResult.u, RoundResult.u }; private int round = -1; private Dictionary<string, int> playerHealths = new Dictionary<string, int>(); private List<Player> playersBeingDamaged = new List<Player>(); private Dictionary<GameObject, Material> playerMaterials = new Dictionary<GameObject, Material>(); public float ImpactMultiplier = 1f; private GameObject modParentObject; private GameObject ragdollStorage; private RagdollData camOnRagdoll = null; private GameObject ragdollTemplate; private List<RagdollData> ragdolls = new List<RagdollData>(); private List<GameObject> ragdollingPlayers = new List<GameObject>(); private List<GameObject> ghostPlayers = new List<GameObject>(); private GameObject shockwaveTemplate; private List<GameObject> shockwaves = new List<GameObject>(); private GameObject hitmarkerPool; private List<GameObject> hitVFXs = new List<GameObject>(); private GameObject dustPool; private List<GameObject> dustVFXs = new List<GameObject>(); private Material ogDustMaterial; public Material GhostMaterial; public Material PlayerWithHeadMaterial; private Camera playerCam; private AudioListener playerAudioListener; private GameObject legacyCamGO; private Camera legacyCam; private RecordingCamera legacyCamRC; private GameObject pools; private GameObject[] structurePools = (GameObject[])(object)new GameObject[8]; private GameObject explodePool; private List<GameObject> foundExplosions = new List<GameObject>(); private List<GameObject> modifiedStructures = new List<GameObject>(); private List<GameState> gameDatas = new List<GameState>(); private StructureState closestStructure = new StructureState(Vector3.zero, Vector3.zero, isFrozen: false, null); private float playerMeasurement = -1f; private float oldPlayerCamClip = -1f; private float oldLegacyCamClip = -1f; private Material silhouetteMaterial; private Material flashMaterial; private float dramaticEffectsDistance = 1600f; private GameObject silhouetteBGTemplate; private GameObject dieHarderTemplates; private GameObject silhouetteBG; private GameObject flash; private GameObject dramaticEffects; private GameObject player1Clone; private GameObject player1CloneCamera; private GameObject? player2Clone; private bool inFreezeFrame = false; private bool fogBefore = false; private float flashStartTime = -1f; private float shockwaveStartTime = -1f; private GameObject preImpactAudio; private GameObject impactAudio; private Color[] beltColors = (Color[])(object)new Color[24] { new Color(61f / 85f, 0.7058824f, 0.6392157f), new Color(40f / 51f, 0.72156864f, 22f / 51f), new Color(0.5568628f, 56f / 85f, 33f / 85f), new Color(22f / 51f, 0.5254902f, 0.6509804f), new Color(38f / 51f, 0.40392157f, 0.3254902f), new Color(0.4f, 20f / 51f, 0.41568628f), new Color(44f / 85f, 0.3372549f, 0.29803923f), new Color(0.9137255f, 74f / 85f, 0.7019608f), new Color(0.8980392f, 64f / 85f, 0.36078432f), new Color(13f / 15f, 28f / 51f, 0.19215687f), new Color(0.81960785f, 0.4f, 0.2509804f), new Color(64f / 85f, 16f / 51f, 4f / 15f), new Color(0.58431375f, 0.23921569f, 4f / 15f), new Color(0.7921569f, 20f / 51f, 47f / 85f), new Color(77f / 85f, 0.61960787f, 67f / 85f), new Color(0.5372549f, 0.41960785f, 0.77254903f), new Color(29f / 85f, 0.36862746f, 0.59607846f), new Color(0.40784314f, 42f / 85f, 0.8392157f), new Color(32f / 85f, 0.7372549f, 0.6509804f), new Color(0.34901962f, 0.6784314f, 29f / 85f), new Color(0.6784314f, 37f / 51f, 0.2627451f), new Color(0.9137255f, 76f / 85f, 43f / 51f), new Color(28f / 85f, 26f / 85f, 0.29803923f), new Color(0.20784314f, 0.20784314f, 0.20784314f) }; public override void OnUpdate() { //IL_04a2: Unknown result type (might be due to invalid IL or missing references) //IL_04da: Unknown result type (might be due to invalid IL or missing references) //IL_04f4: Unknown result type (might be due to invalid IL or missing references) //IL_0505: Unknown result type (might be due to invalid IL or missing references) //IL_0556: Unknown result type (might be due to invalid IL or missing references) //IL_0577: Unknown result type (might be due to invalid IL or missing references) //IL_0598: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: 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_013b: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: 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) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_0293: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: 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_02de: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_030a: Unknown result type (might be due to invalid IL or missing references) //IL_032d: Unknown result type (might be due to invalid IL or missing references) //IL_0332: Unknown result type (might be due to invalid IL or missing references) //IL_0334: Unknown result type (might be due to invalid IL or missing references) //IL_0357: Unknown result type (might be due to invalid IL or missing references) //IL_035c: Unknown result type (might be due to invalid IL or missing references) //IL_035e: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Unknown result type (might be due to invalid IL or missing references) //IL_0386: Unknown result type (might be due to invalid IL or missing references) //IL_0388: Unknown result type (might be due to invalid IL or missing references) //IL_05d7: Unknown result type (might be due to invalid IL or missing references) //IL_0619: Unknown result type (might be due to invalid IL or missing references) //IL_061e: Unknown result type (might be due to invalid IL or missing references) //IL_062b: Unknown result type (might be due to invalid IL or missing references) //IL_03dc: Unknown result type (might be due to invalid IL or missing references) //IL_03ff: Unknown result type (might be due to invalid IL or missing references) //IL_06d4: Unknown result type (might be due to invalid IL or missing references) //IL_06ea: Unknown result type (might be due to invalid IL or missing references) //IL_06fd: Unknown result type (might be due to invalid IL or missing references) //IL_0711: Unknown result type (might be due to invalid IL or missing references) //IL_0716: Unknown result type (might be due to invalid IL or missing references) //IL_0442: Unknown result type (might be due to invalid IL or missing references) //IL_0468: Unknown result type (might be due to invalid IL or missing references) if (!globalInit || !sceneInit) { return; } if (Input.GetKeyDown((KeyCode)114) && Input.GetKey((KeyCode)308) && !Input.GetKey((KeyCode)304)) { undoAllRagdolls(); } if (ragdolls.Count > 0) { foreach (RagdollData ragdoll in ragdolls) { if (ragdoll.Enabled) { ragdoll.VHead.transform.position = ragdoll.Head.transform.position; ragdoll.VBody.transform.position = ragdoll.Body.transform.position; ragdoll.VLeftArmUp.transform.position = ragdoll.LeftArmUp.transform.position; ragdoll.VLeftArm.transform.position = ragdoll.LeftArm.transform.position; ragdoll.VRightArmUp.transform.position = ragdoll.RightArmUp.transform.position; ragdoll.VRightArm.transform.position = ragdoll.RightArm.transform.position; ragdoll.VLeftLegUp.transform.position = ragdoll.LeftLegUp.transform.position; ragdoll.VLeftLeg.transform.position = ragdoll.LeftLeg.transform.position; ragdoll.VRightLegUp.transform.position = ragdoll.RightLegUp.transform.position; ragdoll.VRightLeg.transform.position = ragdoll.RightLeg.transform.position; Quaternion val = Quaternion.Euler(0f, 180f, 0f); ragdoll.VHead.transform.rotation = ragdoll.Head.transform.rotation; ragdoll.VBody.transform.rotation = ragdoll.Body.transform.rotation; ragdoll.VLeftArmUp.transform.rotation = ragdoll.LeftArmUp.transform.rotation; ragdoll.VLeftArm.transform.rotation = ragdoll.LeftArm.transform.rotation * val; ragdoll.VRightArmUp.transform.rotation = ragdoll.RightArmUp.transform.rotation; ragdoll.VRightArm.transform.rotation = ragdoll.RightArm.transform.rotation * val; ragdoll.VLeftLegUp.transform.rotation = ragdoll.LeftLegUp.transform.rotation * val; ragdoll.VLeftLeg.transform.rotation = ragdoll.LeftLeg.transform.rotation * val; ragdoll.VRightLegUp.transform.rotation = ragdoll.RightLegUp.transform.rotation * val; ragdoll.VRightLeg.transform.rotation = ragdoll.RightLeg.transform.rotation * val; if ((Object)(object)ragdoll.Camera != (Object)null && ((Behaviour)ragdoll.Camera).enabled && camOnRagdoll == ragdoll) { ragdoll.CameraGO.transform.position = ragdoll.Head.transform.position; ragdoll.CameraGO.transform.rotation = ragdoll.Head.transform.rotation; } if (lockCam && camOnRagdoll == ragdoll) { legacyCamGO.transform.position = camOnRagdoll.Head.transform.position; legacyCamGO.transform.rotation = camOnRagdoll.Head.transform.rotation; } } } } if (Singleton<PlayerManager>.instance.localPlayer.Data.PlayerMeasurement.Length != playerMeasurement && (Object)(object)ragdollTemplate != (Object)null) { playerMeasurement = Singleton<PlayerManager>.instance.localPlayer.Data.PlayerMeasurement.Length; ragdollTemplate.transform.localScale = Vector3.one * (playerMeasurement / 3.4f); } if (inFreezeFrame) { Transform child = ((Component)Singleton<PlayerManager>.instance.localPlayer.Controller).transform.GetChild(1).GetChild(0).GetChild(0); player1CloneCamera.transform.rotation = child.rotation; legacyCamGO.transform.position = player1CloneCamera.transform.position; legacyCamGO.transform.rotation = player1CloneCamera.transform.rotation; freezeRagdolls(frozen: true); } if ((Object)(object)flash != (Object)null) { flash.transform.position = ((Component)Camera.main).transform.position; float num = Time.time - flashStartTime; float a = Mathf.Clamp01(1f - num / 0.1f); Material material = flash.GetComponent<Renderer>().material; Color color = material.color; color.a = a; material.color = color; if (num >= 0.1f) { Object.Destroy((Object)(object)flash); flash = null; flashStartTime = -1f; } } if (shockwaves.Count <= 0) { return; } List<GameObject> list = new List<GameObject>(); foreach (GameObject shockwave in shockwaves) { float num2 = Time.time - shockwaveStartTime; float num3 = Mathf.Clamp01(num2 / 1f); Material material2 = shockwave.GetComponent<Renderer>().material; shockwave.transform.localScale = Vector3.one * Mathf.Lerp(0.5f, 100f, num3); Transform transform = shockwave.transform; transform.position += new Vector3(0f, Time.deltaTime, 0f); if (num3 >= 1f) { Object.Destroy((Object)(object)shockwave); list.Add(shockwave); shockwaveStartTime = -1f; } } if (list.Count <= 0) { return; } foreach (GameObject item in list) { shockwaves.Remove(item); } } public override void OnFixedUpdate() { //IL_0753: Unknown result type (might be due to invalid IL or missing references) //IL_075a: Unknown result type (might be due to invalid IL or missing references) //IL_0692: Unknown result type (might be due to invalid IL or missing references) //IL_0699: Unknown result type (might be due to invalid IL or missing references) //IL_05a4: Unknown result type (might be due to invalid IL or missing references) //IL_07c5: Unknown result type (might be due to invalid IL or missing references) //IL_07cc: Unknown result type (might be due to invalid IL or missing references) //IL_08c4: Unknown result type (might be due to invalid IL or missing references) //IL_078d: Unknown result type (might be due to invalid IL or missing references) //IL_0794: Unknown result type (might be due to invalid IL or missing references) //IL_071b: Unknown result type (might be due to invalid IL or missing references) //IL_0722: Unknown result type (might be due to invalid IL or missing references) //IL_09d4: Unknown result type (might be due to invalid IL or missing references) //IL_09db: Expected O, but got Unknown //IL_0a6d: Unknown result type (might be due to invalid IL or missing references) //IL_0ad1: Unknown result type (might be due to invalid IL or missing references) //IL_0aeb: Unknown result type (might be due to invalid IL or missing references) //IL_0b3b: Unknown result type (might be due to invalid IL or missing references) //IL_0b4a: Unknown result type (might be due to invalid IL or missing references) //IL_0b55: Unknown result type (might be due to invalid IL or missing references) if (!sceneInit) { return; } Enumerator<Player> enumerator = Singleton<PlayerManager>.instance.AllPlayers.GetEnumerator(); while (enumerator.MoveNext()) { Player current = enumerator.Current; string playFabMasterId = current.Data.GeneralData.PlayFabMasterId; try { if (current.Data.HealthPoints < playerHealths[playFabMasterId]) { playersBeingDamaged.Add(current); } else { playersBeingDamaged.Remove(current); } } catch { } playerHealths[playFabMasterId] = current.Data.HealthPoints; } if (scene.Contains("Map")) { if (healthsFilled) { if (doingMatchEnd) { if (matchRagdolling == 1 || matchRagdolling == 2 || matchRagdolling == 3) { foreach (Player deadPlayer in getDeadPlayers()) { applyRagdoll(deadPlayer, turnToGhost: true); MelonCoroutines.Start(camToPlayerAfterDelay(9f)); } } if (effectsOnDeath == 1 || effectsOnDeath == 2) { MelonCoroutines.Start(PlayDramaticEffects()); } } if (doingRoundEnd && !doingMatchEnd) { if (matchRagdolling == 2 || matchRagdolling == 3) { foreach (Player deadPlayer2 in getDeadPlayers()) { applyRagdoll(deadPlayer2, turnToGhost: true); MelonCoroutines.Start(UndoRagdollAfterDelay(deadPlayer2, cleanCorpse: false, 9f)); MelonCoroutines.Start(camToPlayerAfterDelay(9f)); } } if (effectsOnDeath == 1) { MelonCoroutines.Start(PlayDramaticEffects()); } } if (matchRagdolling == 3 && !doingRoundEnd && !doingMatchEnd && playersBeingDamaged.Count > 0) { foreach (Player item2 in playersBeingDamaged) { applyRagdoll(item2, turnToGhost: false); } } if (corpsePersistence == 0 && doingRoundEnd && !doingMatchEnd) { MelonCoroutines.Start(UndoRagdollsAfterDelay(9f)); } } else if (Singleton<PlayerManager>.instance.LocalPlayer.Data.HealthPoints >= 20) { healthsFilled = true; } } else { if ((otherRagdolling == 1 || otherRagdolling == 2) && getDeadPlayers().Count > 0) { foreach (Player deadPlayer3 in getDeadPlayers()) { if (playersBeingDamaged.Contains(deadPlayer3)) { if (otherCorpsePersistence < 0) { applyRagdoll(deadPlayer3, turnToGhost: true); MelonCoroutines.Start(UndoRagdollAfterDelay(deadPlayer3, cleanCorpse: true, Mathf.Abs(otherCorpsePersistence))); } else { applyRagdoll(deadPlayer3, turnToGhost: false); } if (otherEffectsOnDeath == 1) { MelonCoroutines.Start(PlayDramaticEffects()); } } } } if (otherRagdolling == 2 && getDeadPlayers().Count == 0 && playersBeingDamaged.Count > 0) { foreach (Player item3 in playersBeingDamaged) { if (otherCorpsePersistence < 0) { applyRagdoll(item3, turnToGhost: true); MelonCoroutines.Start(UndoRagdollAfterDelay(item3, cleanCorpse: true, Mathf.Abs(otherCorpsePersistence))); } else { applyRagdoll(item3, turnToGhost: false); } } } if (otherCorpsePersistence > 0) { RagdollData ragdollData = (from r in ragdolls where r.Enabled orderby r.createdTime select r).FirstOrDefault(); if (ragdolls.Count((RagdollData r) => r.Enabled) > otherCorpsePersistence && ragdollData != null) { undoRagdoll(ragdollData, cleanCorpse: true); } } } doingMatchEnd = false; doingRoundEnd = false; foreach (RagdollData ragdoll in ragdolls) { if (ragdoll.Enabled && ragdoll.Ragdoll.transform.position.y < -50f) { undoRagdoll(ragdoll, cleanCorpse: true); } } List<StructureState> list = new List<StructureState>(); List<StructureState> list2 = new List<StructureState>(); GameObject[] array = structurePools; foreach (GameObject val in array) { for (int j = 0; j < val.transform.childCount; j++) { Transform child2 = val.transform.GetChild(j); if (!((Component)child2).gameObject.activeSelf) { continue; } Structure component = ((Component)child2).GetComponent<Structure>(); Rigidbody component2 = ((Component)child2).GetComponent<Rigidbody>(); if ((Object)(object)component == (Object)null || (Object)(object)component2 == (Object)null) { continue; } list.Add(new StructureState(child2.position, component2.velocity, component.PhysicsFrozen, ((Component)child2).gameObject)); if (component.PhysicsFrozen) { if (gameDatas.Count > 1) { try { StructureState structureState = gameDatas[gameDatas.Count - 2].CleanStructureStates.FirstOrDefault((StructureState data) => (Object)(object)data.Structure == (Object)(object)((Component)child2).gameObject); list2.Add(new StructureState(structureState.Position, structureState.Velocity, component.PhysicsFrozen, ((Component)child2).gameObject)); } catch { list2.Add(new StructureState(child2.position, component2.velocity, component.PhysicsFrozen, ((Component)child2).gameObject)); } } else { list2.Add(new StructureState(child2.position, component2.velocity, component.PhysicsFrozen, ((Component)child2).gameObject)); } } else { list2.Add(new StructureState(child2.position, component2.velocity, component.PhysicsFrozen, ((Component)child2).gameObject)); } } } List<PlayerState> list3 = new List<PlayerState>(); List<PlayerState> cleanPlayerStates = new List<PlayerState>(); Enumerator<Player> enumerator8 = Singleton<PlayerManager>.Instance.AllPlayers.GetEnumerator(); while (enumerator8.MoveNext()) { Player player = enumerator8.Current; if (!((Object)(object)player.Controller == (Object)null)) { Transform child3 = ((Component)player.Controller).transform.GetChild(1); Transform child4 = child3.GetChild(0).GetChild(0); Transform child5 = child3.GetChild(1); Transform child6 = child3.GetChild(2); Rigidbody component3 = ((Component)child3).GetComponent<Rigidbody>(); list3.Add(new PlayerState(child3, component3.velocity, ((Component)player.Controller).gameObject)); bool flag = false; } } if (!inFreezeFrame) { GameState item = new GameState { StructureStates = list, CleanStructureStates = list2, PlayerStates = list3, CleanPlayerStates = cleanPlayerStates }; gameDatas.Add(item); if (gameDatas.Count > 100) { gameDatas.RemoveAt(0); } } GameObject[] array2 = structurePools; foreach (GameObject val2 in array2) { for (int l = 0; l < val2.transform.childCount; l++) { Transform child7 = val2.transform.GetChild(l); if (!modifiedStructures.Contains(((Component)child7).gameObject)) { modifiedStructures.Add(((Component)child7).gameObject); string name = ((Object)child7).name; GameObject val3 = new GameObject("RagdollCollider"); if (name == "Disc" || name == "Ball") { MeshCollider component4 = ((Component)child7.GetChild(0)).GetComponent<MeshCollider>(); val3.AddComponent<MeshCollider>().sharedMesh = component4.sharedMesh; } if (name == "Pillar" || name == "RockCube" || name == "Wall") { BoxCollider component5 = ((Component)child7.GetChild(0)).GetComponent<BoxCollider>(); val3.AddComponent<BoxCollider>().size = component5.size; } if (name == "SmallRock" || name == "LargeRock" || name == "BoulderBall") { MeshCollider component6 = ((Component)child7).GetComponent<MeshCollider>(); val3.AddComponent<MeshCollider>().sharedMesh = component6.sharedMesh; } Rigidbody component7 = ((Component)child7).GetComponent<Rigidbody>(); component7.excludeLayers = LayerMask.op_Implicit(LayerMask.op_Implicit(component7.excludeLayers) | (1 << LayerMask.NameToLayer("Clouds"))); val3.layer = LayerMask.NameToLayer("Clouds"); val3.transform.SetParent(child7, false); Rigidbody val4 = val3.AddComponent<Rigidbody>(); val4.isKinematic = true; val4.includeLayers = LayerMask.op_Implicit(1 << LayerMask.NameToLayer("Clouds")); val4.excludeLayers = LayerMask.op_Implicit(~LayerMask.op_Implicit(val4.includeLayers)); } } } for (int m = 0; m < explodePool.transform.childCount; m++) { Transform child = explodePool.transform.GetChild(m); if (((Component)child).gameObject.activeSelf && !foundExplosions.Contains(((Component)child).gameObject)) { foundExplosions.Add(((Component)child).gameObject); StructureState structureState2 = null; if (gameDatas.Count > 1) { List<StructureState> structureStates = gameDatas[gameDatas.Count - 2].StructureStates; if (structureStates != null && structureStates.Count > 0) { structureState2 = structureStates.OrderBy((StructureState s) => Vector3.Distance(s.Position, child.position)).First(); } } if (structureState2 != null && structureState2.IsExploded) { explodeRagdolls(structureState2); } } if (!((Component)child).gameObject.activeSelf) { foundExplosions.Remove(((Component)child).gameObject); } } } public override void OnSceneWasInitialized(int buildIndex, string sceneName) { scene = sceneName; if (sceneName == "Loader") { MelonCoroutines.Start(YellowGhostPoseCloningCoroutine()); } } public override void OnSceneWasUnloaded(int buildIndex, string sceneName) { gameDatas.Clear(); ragdolls.Clear(); ragdollingPlayers.Clear(); ghostPlayers.Clear(); sceneInit = false; } public override void OnLateInitializeMelon() { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Expected O, but got Unknown //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Expected O, but got Unknown //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Expected O, but got Unknown //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Expected O, but got Unknown //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Expected O, but got Unknown //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Expected O, but got Unknown //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Expected O, but got Unknown //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Expected O, but got Unknown //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Expected O, but got Unknown Calls.onMapInitialized += SceneLoaded; Calls.onMatchStarted += MatchStarted; Calls.onRoundStarted += RoundStarted; Calls.onRoundEnded += RoundEnded; UI.instance.UI_Initialized += OnUIInit; Mod.ModName = "DieHarder"; Mod.ModVersion = "1.0.0"; Mod.SetFolder("DieHarder"); Mod.AddDescription("Description", "", "That death goes hard", new Tags { IsSummary = true }); Mod.AddToList("Match Ragdolling", 2, "The level of ragdolling to apply in matches\n0: No ragdoll effect\n1: Ragdoll on match end\n2: Ragdoll on round end\n3: Ragdoll on damage", new Tags()); Mod.AddToList("Match Corpse Persistence", 0, "The amount that ragdolls will stick around in matches\n0: Ragdolls clear every round\n1: Ragdolls clear every match", new Tags()); Mod.AddToList("Match Dramatic Effects", 2, "When to play <i>extremely</i> dramatic effects in matches\n0: Never\n1: On round end\n2: On match end", new Tags()); Mod.AddToList("Other Ragdolling", 0, "The level of ragdolling to apply in the Park and Gym\n0: No ragdoll effect\n1: Ragdoll on death\n2: Ragdoll on damage", new Tags()); Mod.AddToList("Other Corpse Persistence", -5, "The amount that ragdolls will stick around outside of matches\nAny positive value is the maximum number of ragdolls allowed to be present. Any negative value is the number of seconds any ragdoll will persist. A value of 0 makes ragdolls permanent", new Tags()); Mod.AddToList("Other Dramatic Effects", 0, "When to play <i>extremely</i> dramatic effects outside of matches\n0: Never\n1: On death", new Tags()); Mod.AddToList("Ragdoll Camera", false, 0, "Set to lock the player camera to your ragdoll (Only works on inpersistent ragdolls in matches)", new Tags()); Mod.AddToList("Effects Volume", 1f, "The volume of the dramatic effects' accompanying sound (0 is min, 1 is max)", new Tags()); Mod.GetFromFile(); Mod.ModSaved += Save; Save(); } private void SceneLoaded() { if (!globalInit) { dieHarderTemplates = LoadAssetBundle("DieHarder.assets.dieharder", "DieHarderTemplates"); Object.DontDestroyOnLoad((Object)(object)dieHarderTemplates); impactAudio = ((Component)dieHarderTemplates.transform.GetChild(0)).gameObject; preImpactAudio = ((Component)dieHarderTemplates.transform.GetChild(1)).gameObject; ragdollTemplate = ((Component)dieHarderTemplates.transform.GetChild(2)).gameObject; shockwaveTemplate = ((Component)dieHarderTemplates.transform.GetChild(3)).gameObject; ragdollTemplate.SetActive(false); shockwaveTemplate.SetActive(false); pools = GameObject.Find("Game Instance/Pre-Initializable/PoolManager"); structurePools[0] = ((Component)pools.transform.Find("Pool: Pillar (RUMBLE.MoveSystem.Structure)")).gameObject; structurePools[1] = ((Component)pools.transform.Find("Pool: Wall (RUMBLE.MoveSystem.Structure)")).gameObject; structurePools[2] = ((Component)pools.transform.Find("Pool: Disc (RUMBLE.MoveSystem.Structure)")).gameObject; structurePools[3] = ((Component)pools.transform.Find("Pool: RockCube (RUMBLE.MoveSystem.Structure)")).gameObject; structurePools[4] = ((Component)pools.transform.Find("Pool: Ball (RUMBLE.MoveSystem.Structure)")).gameObject; structurePools[5] = ((Component)pools.transform.Find("Pool: LargeRock (RUMBLE.MoveSystem.Structure)")).gameObject; structurePools[6] = ((Component)pools.transform.Find("Pool: SmallRock (RUMBLE.MoveSystem.Structure)")).gameObject; structurePools[7] = ((Component)pools.transform.Find("Pool: BoulderBall (RUMBLE.MoveSystem.Structure)")).gameObject; explodePool = ((Component)pools.transform.Find("Pool: ExplodeFinale_VFX (RUMBLE.Pools.PooledVisualEffect)")).gameObject; hitmarkerPool = ((Component)pools.transform.Find("Pool: Hitmarker (RUMBLE.Players.Subsystems.PlayerHitmarker)")).gameObject; dustPool = ((Component)pools.transform.Find("Pool: DustSpawn_VFX (RUMBLE.Pools.PooledVisualEffect)")).gameObject; globalInit = true; } MelonCoroutines.Start(afterABit()); } private void OnUIInit() { UI.instance.AddMod(Mod); } private void Save() { bool flag = lockCam; matchRagdolling = (int)Mod.Settings[1].SavedValue; corpsePersistence = (int)Mod.Settings[2].SavedValue; effectsOnDeath = (int)Mod.Settings[3].SavedValue; otherRagdolling = (int)Mod.Settings[4].SavedValue; otherCorpsePersistence = (int)Mod.Settings[5].SavedValue; otherEffectsOnDeath = (int)Mod.Settings[6].SavedValue; lockCam = (bool)Mod.Settings[7].SavedValue; effectsVolume = Mathf.Clamp((float)Mod.Settings[8].SavedValue, 0f, 1f); if (!lockCam && flag) { camToPlayer(); } undoAllRagdolls(); } private IEnumerator afterABit() { yield return (object)new WaitForSeconds(1f); if (scene != "Loader") { modParentObject = new GameObject("DieHarder"); ragdollStorage = new GameObject("Ragdolls"); ragdollStorage.transform.parent = modParentObject.transform; } yield return (object)new WaitForSeconds(2f); sceneInit = true; playerCam = ((Component)((Component)Singleton<PlayerManager>.instance.localPlayer.Controller).transform.GetChild(1).GetChild(0).GetChild(0)).GetComponent<Camera>(); playerAudioListener = ((Component)((Component)Singleton<PlayerManager>.instance.localPlayer.Controller).transform.GetChild(1).GetChild(0).GetChild(0)).GetComponent<AudioListener>(); legacyCamGO = GameObject.Find("Game Instance/Initializable/RecordingCamera"); legacyCam = legacyCamGO.GetComponent<Camera>(); legacyCamRC = legacyCamGO.GetComponent<RecordingCamera>(); oldPlayerCamClip = playerCam.nearClipPlane; oldLegacyCamClip = legacyCam.nearClipPlane; if (scene == "Gym") { silhouetteBGTemplate.SetActive(false); } } private IEnumerator YellowGhostPoseCloningCoroutine() { while (!Object.op_Implicit((Object)(object)GameObject.Find("BootLoaderPlayer/Visuals/Left"))) { yield return null; } yield return (object)new WaitForSeconds(0.5f); GhostMaterial = GameObject.Find("BootLoaderPlayer/Visuals/Left").GetComponent<Renderer>().material; ((Object)GhostMaterial).hideFlags = (HideFlags)61; GameObject invertedSphere = GameObject.Find("________________SCENE_________________/Text/Iverted sphere").gameObject; silhouetteBGTemplate = Object.Instantiate<GameObject>(invertedSphere); Object.DontDestroyOnLoad((Object)(object)silhouetteBGTemplate); ((Object)silhouetteBGTemplate).name = "SilhouetteBG"; silhouetteBGTemplate.layer = LayerMask.NameToLayer("Default"); silhouetteBGTemplate.transform.position = new Vector3(dramaticEffectsDistance, 0f, 0f); silhouetteBGTemplate.transform.localScale = Vector3.one * 400f; silhouetteBGTemplate.GetComponent<Renderer>().material = new Material(Shader.Find("Universal Render Pipeline/Unlit")); silhouetteBGTemplate.GetComponent<Renderer>().material.SetColor("_BaseColor", new Color(1f, 0f, 0f, 1f)); silhouetteBGTemplate.SetActive(false); } private void MatchStarted() { round = -1; rounds = new RoundResult[3] { RoundResult.u, RoundResult.u, RoundResult.u }; matchEnded = false; } private IEnumerator UndoRagdollsAfterDelay(float waitForSeconds) { yield return (object)new WaitForSeconds(waitForSeconds); undoAllRagdolls(); } private void RoundStarted() { roundEnded = false; } private void RoundEnded() { round++; int healthPoints = Singleton<PlayerManager>.instance.AllPlayers[0].Data.HealthPoints; int healthPoints2 = Singleton<PlayerManager>.instance.AllPlayers[1].Data.HealthPoints; if (healthPoints == healthPoints2) { rounds[round] = RoundResult.T; } else if (healthPoints > healthPoints2) { rounds[round] = RoundResult.W; } else { rounds[round] = RoundResult.L; } roundEnded = true; matchEnded = wasLastRound(); doingRoundEnd = roundEnded; doingMatchEnd = matchEnded; MelonCoroutines.Start(resetHealthsState()); } private IEnumerator resetHealthsState() { yield return (object)new WaitForFixedUpdate(); yield return (object)new WaitForFixedUpdate(); healthsFilled = false; } private void recolorSilhouette() { //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_018e: 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_007d: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) if (scene.Contains("Map")) { int healthPoints = Singleton<PlayerManager>.instance.AllPlayers[0].Data.HealthPoints; int healthPoints2 = Singleton<PlayerManager>.instance.AllPlayers[1].Data.HealthPoints; if (healthPoints == healthPoints2) { setMaterialColor(silhouetteBGTemplate.GetComponent<Renderer>().material, new Color(1f, 1f, 0f, 1f)); } else if (healthPoints > healthPoints2) { setMaterialColor(silhouetteBGTemplate.GetComponent<Renderer>().material, new Color(0.25f, 0.78f, 0.17f, 1f)); } else { setMaterialColor(silhouetteBGTemplate.GetComponent<Renderer>().material, new Color(0.78f, 0.11f, 0.11f, 0f)); } } else if (scene != "Park") { setMaterialColor(silhouetteBGTemplate.GetComponent<Renderer>().material, new Color(1f, 1f, 1f, 1f)); } else { Player val = getDeadPlayers().First(); Color color = beltColors[((Il2CppArrayBase<short>)(object)val.Data.visualData.ColorationIndexes)[7]]; setMaterialColor(silhouetteBGTemplate.GetComponent<Renderer>().material, color); } if ((Object)(object)silhouetteBG != (Object)null) { silhouetteBG.GetComponent<Renderer>().material = silhouetteBGTemplate.GetComponent<Renderer>().material; } } private bool wasLastRound() { if (round >= 2) { return true; } if (rounds[0] == RoundResult.u || rounds[1] == RoundResult.u) { return false; } if (rounds[0] != 0 && rounds[1] != 0) { return rounds[0] == rounds[1]; } return false; } private RagdollData applyRagdoll(Player player, bool turnToGhost) { //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Expected O, but got Unknown //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: 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_02f1: Unknown result type (might be due to invalid IL or missing references) //IL_0335: Unknown result type (might be due to invalid IL or missing references) //IL_033a: Unknown result type (might be due to invalid IL or missing references) //IL_033e: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) //IL_0359: Unknown result type (might be due to invalid IL or missing references) //IL_03a4: Unknown result type (might be due to invalid IL or missing references) //IL_03f1: Unknown result type (might be due to invalid IL or missing references) //IL_03f6: Unknown result type (might be due to invalid IL or missing references) //IL_04b6: Unknown result type (might be due to invalid IL or missing references) //IL_04c1: Unknown result type (might be due to invalid IL or missing references) //IL_04c6: Unknown result type (might be due to invalid IL or missing references) //IL_04c9: Unknown result type (might be due to invalid IL or missing references) //IL_0411: Unknown result type (might be due to invalid IL or missing references) //IL_0416: Unknown result type (might be due to invalid IL or missing references) //IL_0418: Unknown result type (might be due to invalid IL or missing references) //IL_041d: Unknown result type (might be due to invalid IL or missing references) //IL_0421: Unknown result type (might be due to invalid IL or missing references) //IL_042b: Unknown result type (might be due to invalid IL or missing references) //IL_04f9: Unknown result type (might be due to invalid IL or missing references) //IL_0504: Unknown result type (might be due to invalid IL or missing references) //IL_0511: Unknown result type (might be due to invalid IL or missing references) //IL_0513: Unknown result type (might be due to invalid IL or missing references) //IL_045c: Unknown result type (might be due to invalid IL or missing references) //IL_0461: Unknown result type (might be due to invalid IL or missing references) //IL_0463: Unknown result type (might be due to invalid IL or missing references) //IL_0468: Unknown result type (might be due to invalid IL or missing references) //IL_046c: Unknown result type (might be due to invalid IL or missing references) //IL_0476: Unknown result type (might be due to invalid IL or missing references) //IL_047b: Unknown result type (might be due to invalid IL or missing references) //IL_047f: Unknown result type (might be due to invalid IL or missing references) //IL_0489: Unknown result type (might be due to invalid IL or missing references) //IL_048b: Unknown result type (might be due to invalid IL or missing references) Player player2 = player; try { ragdollingPlayers.Add(((Component)player2.Controller).gameObject); } catch { } RagdollData ragdollData = null; bool flag = false; foreach (RagdollData ragdoll in ragdolls) { if ((Object)(object)ragdoll.Owner == (Object)(object)((Component)player2.Controller).gameObject && !ragdoll.Enabled) { ragdollData = ragdoll; ragdollData.RagdollSet.SetActive(true); ragdollData.Enabled = true; ragdollData.Ragdoll.transform.localScale = ragdollTemplate.transform.localScale; flag = true; break; } } if (!flag) { ragdollData = createRagdoll(((Component)player2.Controller).gameObject); } if (turnToGhost) { if (!ghostPlayers.Contains(((Component)player2.Controller).gameObject)) { SkinnedMeshRenderer component = ((Component)((Component)player2.Controller).transform.GetChild(0).GetChild(0)).GetComponent<SkinnedMeshRenderer>(); try { playerMaterials.Add(((Component)player2.Controller).gameObject, ((Renderer)component).material); } catch { } ((Renderer)component).material = new Material(GhostMaterial); setMaterialColor(((Renderer)component).material, new Color(0.8f, 0.8f, 0.8f, 1f)); try { ghostPlayers.Add(((Component)player2.Controller).gameObject); } catch { } } if (player2 == Singleton<PlayerManager>.instance.localPlayer) { oldPlayerCamClip = playerCam.nearClipPlane; oldLegacyCamClip = legacyCam.nearClipPlane; legacyCam.nearClipPlane = 0.1f; playerCam.nearClipPlane = 0.1f; if (lockCam && scene.Contains("Map")) { camToRagdoll(ragdollData); } } } alignRagdoll(ragdollData); Rigidbody val = null; Vector3 val2 = ((gameDatas.Count <= 0) ? Vector3.zero : (gameDatas[gameDatas.Count - 1].CleanPlayerStates.FirstOrDefault((PlayerState state) => (Object)(object)state.Player == (Object)(object)((Component)player2.Controller).gameObject)?.Velocity ?? Vector3.zero)); foreach (Rigidbody componentsInChild in ragdollData.Ragdoll.GetComponentsInChildren<Rigidbody>()) { componentsInChild.AddForce(val2, (ForceMode)1); } Vector3 position = ((Component)player2.Controller).transform.GetChild(1).GetChild(0).GetChild(0) .position; ((Vector3)(ref position))..ctor(position.x, position.y - playerMeasurement / 2f, position.z); if (gameDatas.Count > 1 && gameDatas[gameDatas.Count - 1].StructureStates.Count > 0) { closestStructure = getClosestStructure(position); val = (ragdollData.initialForceRB = ragdollData.children.OrderBy((GameObject child) => Vector3.Distance(child.transform.position, closestStructure.Position)).First().GetComponent<Rigidbody>()); } if ((Object)(object)val != (Object)null) { if (closestStructure.Velocity == Vector3.zero) { Rigidbody obj4 = val; Vector3 val3 = closestStructure.Position - position; obj4.AddForce(((Vector3)(ref val3)).normalized * 1f, (ForceMode)1); foreach (Rigidbody componentsInChild2 in ragdollData.Ragdoll.GetComponentsInChildren<Rigidbody>()) { val3 = closestStructure.Position - position; Vector3 val4 = ((Vector3)(ref val3)).normalized * 1f; componentsInChild2.AddForce(val4, (ForceMode)1); ragdollData.initialForce = val4; } } else { Vector3 val5 = closestStructure.Velocity * ImpactMultiplier; val.AddForce(val5, (ForceMode)1); foreach (Rigidbody componentsInChild3 in ragdollData.Ragdoll.GetComponentsInChildren<Rigidbody>()) { componentsInChild3.AddForce(closestStructure.Velocity * ImpactMultiplier, (ForceMode)1); ragdollData.initialForce = val5; } } } return ragdollData; } private StructureState getClosestStructure(Vector3 position) { //IL_0007: 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_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) if (gameDatas.Count > 0 && gameDatas[gameDatas.Count - 1].StructureStates.Count > 0) { return gameDatas[gameDatas.Count - 1].StructureStates.OrderBy((StructureState structure) => Vector3.Distance(structure.Position, position)).First(); } return new StructureState(Vector3.zero, Vector3.zero, isFrozen: false, null); } private void undoRagdoll(RagdollData ragdoll, bool cleanCorpse) { bool flag = (Object)(object)ragdoll.Owner == (Object)(object)((Component)Singleton<PlayerManager>.instance.localPlayer.Controller).gameObject; if (ghostPlayers.Contains(ragdoll.Owner)) { ((Renderer)((Component)ragdoll.Owner.transform.GetChild(0).GetChild(0)).GetComponent<SkinnedMeshRenderer>()).material = playerMaterials[ragdoll.Owner]; playerMaterials.Remove(ragdoll.Owner); legacyCam.nearClipPlane = oldLegacyCamClip; playerCam.nearClipPlane = oldPlayerCamClip; if (flag && lockCam) { camToPlayer(); } ghostPlayers.Remove(ragdoll.Owner); } ragdollingPlayers.Remove(ragdoll.Owner); if (cleanCorpse) { ragdoll.RagdollSet.SetActive(false); ragdoll.Enabled = false; } } private void undoRagdoll(Player player, bool cleanCorpse) { foreach (RagdollData ragdoll in ragdolls) { if ((Object)(object)ragdoll.Owner == (Object)(object)((Component)player.Controller).gameObject) { undoRagdoll(ragdoll, cleanCorpse); break; } } } public IEnumerator UndoRagdollAfterDelay(Player player, bool cleanCorpse, float waitForSeconds) { yield return (object)new WaitForSeconds(waitForSeconds); undoRagdoll(player, cleanCorpse); } public IEnumerator UndoRagdollAfterDelay(RagdollData ragdoll, bool cleanCorpse, float waitForSeconds) { yield return (object)new WaitForSeconds(waitForSeconds); undoRagdoll(ragdoll, cleanCorpse); } private void undoAllRagdolls() { foreach (RagdollData ragdoll in ragdolls) { undoRagdoll(ragdoll, cleanCorpse: true); } } private RagdollData createRagdoll(GameObject player) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_035b: Unknown result type (might be due to invalid IL or missing references) //IL_0365: Expected O, but got Unknown //IL_0435: Unknown result type (might be due to invalid IL or missing references) //IL_043b: Unknown result type (might be due to invalid IL or missing references) //IL_0444: Unknown result type (might be due to invalid IL or missing references) GameObject val = Object.Instantiate<GameObject>(ragdollTemplate); val.SetActive(true); val.transform.position = player.transform.position; GameObject val2 = new GameObject("RagdollSet"); val2.transform.SetParent(ragdollStorage.transform); val.transform.SetParent(val2.transform); RagdollData ragdollData = new RagdollData(); ragdollData.RagdollSet = val2; ragdollData.Owner = player; ragdollData.Ragdoll = val; ragdollData.Head = ((Component)val.transform.Find("Hips/Spine/Spine1/Spine2/Neck/Head")).gameObject; ragdollData.Body = ((Component)val.transform.Find("Hips")).gameObject; ragdollData.LeftArmUp = ((Component)val.transform.Find("Hips/Spine/Spine1/Spine2/LeftShoulder/LeftArm")).gameObject; ragdollData.LeftArm = ((Component)val.transform.Find("Hips/Spine/Spine1/Spine2/LeftShoulder/LeftArm/LeftForeArm")).gameObject; ragdollData.RightArmUp = ((Component)val.transform.Find("Hips/Spine/Spine1/Spine2/RightShoulder/RightArm")).gameObject; ragdollData.RightArm = ((Component)val.transform.Find("Hips/Spine/Spine1/Spine2/RightShoulder/RightArm/RightForeArm")).gameObject; ragdollData.LeftLegUp = ((Component)val.transform.Find("Hips/LeftUpLeg")).gameObject; ragdollData.LeftLeg = ((Component)val.transform.Find("Hips/LeftUpLeg/LeftLeg")).gameObject; ragdollData.RightLegUp = ((Component)val.transform.Find("Hips/RightUpLeg")).gameObject; ragdollData.RightLeg = ((Component)val.transform.Find("Hips/RightUpLeg/RightLeg")).gameObject; bool flag = (Object)(object)player == (Object)(object)((Component)Singleton<PlayerManager>.instance.localPlayer.Controller).gameObject; GameObject val3 = Object.Instantiate<GameObject>(player); val3.transform.SetParent(val2.transform); ragdollData.Clone = val3; GameObject gameObject = ((Component)val3.transform.Find("Visuals/Skelington")).gameObject; ragdollData.VHead = ((Component)gameObject.transform.Find("Bone_Pelvis/Bone_Spine_A/Bone_Chest/Bone_Neck/Bone_Head")).gameObject; ragdollData.VBody = ((Component)gameObject.transform.Find("Bone_Pelvis")).gameObject; ragdollData.VLeftArmUp = ((Component)gameObject.transform.Find("Bone_Pelvis/Bone_Spine_A/Bone_Chest/Bone_Shoulderblade_L/Bone_Shoulder_L")).gameObject; ragdollData.VLeftArm = ((Component)gameObject.transform.Find("Bone_Pelvis/Bone_Spine_A/Bone_Chest/Bone_Shoulderblade_L/Bone_Shoulder_L/Bone_Lowerarm_L")).gameObject; ragdollData.VRightArmUp = ((Component)gameObject.transform.Find("Bone_Pelvis/Bone_Spine_A/Bone_Chest/Bone_Shoulderblade_R/Bone_Shoulder_R")).gameObject; ragdollData.VRightArm = ((Component)gameObject.transform.Find("Bone_Pelvis/Bone_Spine_A/Bone_Chest/Bone_Shoulderblade_R/Bone_Shoulder_R/Bone_Lowerarm_R")).gameObject; ragdollData.VLeftLegUp = ((Component)gameObject.transform.Find("Bone_Pelvis/Bone_Hip_L")).gameObject; ragdollData.VLeftLeg = ((Component)gameObject.transform.Find("Bone_Pelvis/Bone_Hip_L/Bone_Knee_L")).gameObject; ragdollData.VRightLegUp = ((Component)gameObject.transform.Find("Bone_Pelvis/Bone_Hip_R")).gameObject; ragdollData.VRightLeg = ((Component)gameObject.transform.Find("Bone_Pelvis/Bone_Hip_R/Bone_Knee_R")).gameObject; setUpClone(val3, forRagdoll: true); SkinnedMeshRenderer component = ((Component)val3.transform.GetChild(0).GetChild(0)).GetComponent<SkinnedMeshRenderer>(); if (flag) { ((Renderer)component).material = ((Component)player.transform.GetChild(0)).GetComponent<PlayerVisuals>().NonHeadClippedMaterial; } PopulateChildren(val.transform, ragdollData.children); ragdollData.CameraGO = new GameObject("Camera"); ragdollData.CameraGO.transform.SetParent(val2.transform); ragdollData.Camera = ragdollData.CameraGO.AddComponent<Camera>(); ragdollData.Camera.nearClipPlane = 0.1f; ((Behaviour)ragdollData.Camera).enabled = false; ((Component)ragdollData.Camera).tag = "MainCamera"; ragdollData.AudioListener = ragdollData.CameraGO.AddComponent<AudioListener>(); ((Behaviour)ragdollData.AudioListener).enabled = false; Rigidbody[] array = Il2CppArrayBase<Rigidbody>.op_Implicit(val.GetComponentsInChildren<Rigidbody>()); Rigidbody[] array2 = array; foreach (Rigidbody val4 in array2) { string[] array3 = new string[6] { "Player", "Floor", "PedestalFloor", "CombatFloor", "Environment", "Clouds" }; val4.includeLayers = LayerMaskExtensions.AddToMask(default(LayerMask), Il2CppStringArray.op_Implicit(array3)); } ragdolls.Add(ragdollData); return ragdollData; } private void setUpClone(GameObject clone, bool forRagdoll) { Object.Destroy((Object)(object)((Component)clone.transform.GetChild(4)).gameObject); Object.Destroy((Object)(object)((Component)clone.transform.GetChild(5)).gameObject); Object.Destroy((Object)(object)((Component)clone.transform.GetChild(1).GetChild(0).GetChild(0) .GetChild(1)).gameObject); Object.Destroy((Object)(object)((Component)clone.transform.GetChild(1).GetChild(0).GetChild(0) .GetChild(2)).gameObject); if (Random.RandomRange(1, 1000) > 1) { ((Behaviour)((Component)clone.transform.GetChild(1).GetChild(0).GetChild(0)).GetComponent<PlayerEyeSystem>()).enabled = false; } ((Component)clone.transform.GetChild(1)).gameObject.SetActive(false); ((Behaviour)clone.GetComponent<PlayerStackProcessor>()).enabled = false; ((Behaviour)clone.GetComponent<PlayerPoseSystem>()).enabled = false; ((Behaviour)clone.GetComponent<PlayerBoxInteractionSystem>()).enabled = false; ((Behaviour)clone.GetComponent<PhotonView>()).enabled = false; ((Behaviour)clone.GetComponent<PhotonVoiceView>()).enabled = false; ((Behaviour)clone.GetComponent<PlayerResetSystem>()).enabled = false; ((Behaviour)clone.GetComponent<PlayerNetworking>()).enabled = false; Object.DestroyImmediate((Object)(object)clone.GetComponent<PlayerMovement>()); Object.DestroyImmediate((Object)(object)clone.GetComponent<PlayerController>()); GameObject gameObject = ((Component)clone.transform.GetChild(0)).gameObject; ((Behaviour)gameObject.GetComponent<Animator>()).enabled = false; ((Behaviour)gameObject.GetComponent<PlayerIK>()).enabled = false; ((Behaviour)gameObject.GetComponent<VRIK>()).enabled = false; Transform obj = clone.transform.Find("NameTag"); if (obj != null) { ((Component)obj).gameObject.SetActive(false); } Transform obj2 = clone.transform.Find("Park"); if (obj2 != null) { ((Component)obj2).gameObject.SetActive(false); } Transform obj3 = clone.transform.Find("Health"); if (obj3 != null) { ((Component)obj3.GetChild(0)).gameObject.SetActive(false); } Transform obj4 = clone.transform.Find("LIV"); GameObject val = ((obj4 != null) ? ((Component)obj4).gameObject : null); if ((Object)(object)val != (Object)null) { Object.DestroyImmediate((Object)(object)val); } if (forRagdoll) { return; } foreach (MeshRenderer componentsInChild in clone.GetComponentsInChildren<MeshRenderer>()) { ((Renderer)componentsInChild).material = silhouetteMaterial; } } private void PopulateChildren(Transform parent, List<GameObject> children) { for (int i = 0; i < parent.childCount; i++) { Transform child = parent.GetChild(i); children.Add(((Component)child).gameObject); PopulateChildren(child, children); } } private void camToRagdoll(RagdollData ragdoll) { camToPlayer(); if ((Object)(object)ragdoll.Camera != (Object)null) { ((Behaviour)ragdoll.Camera).enabled = true; } ((Behaviour)playerCam).enabled = false; ((Behaviour)playerAudioListener).enabled = false; camOnRagdoll = ragdoll; } private void camToPlayer() { foreach (RagdollData ragdoll in ragdolls) { if ((Object)(object)ragdoll.Camera != (Object)null) { ((Behaviour)ragdoll.Camera).enabled = false; } } ((Behaviour)playerCam).enabled = true; ((Behaviour)playerAudioListener).enabled = true; camOnRagdoll = null; } public IEnumerator camToPlayerAfterDelay(float waitForSeconds) { yield return (object)new WaitForSeconds(waitForSeconds); camToPlayer(); } private void setMaterialColor(Material material, Color color) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_0026: Unknown result type (might be due to invalid IL or missing references) Shader shader = material.shader; for (int i = 0; i < shader.GetPropertyCount(); i++) { if ((int)shader.GetPropertyType(i) == 0) { string propertyName = shader.GetPropertyName(i); material.SetColor(propertyName, color); } } } private void alignRagdoll(RagdollData ragdoll) { //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0118: 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_0148: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_0248: 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_0265: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_029e: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_02e3: Unknown result type (might be due to invalid IL or missing references) Transform val = ragdoll.Owner.transform.Find("Visuals/Skelington"); Transform val2 = val.Find("Bone_Pelvis/Bone_Spine_A/Bone_Chest/Bone_Neck/Bone_Head"); Transform val3 = val.Find("Bone_Pelvis"); Transform val4 = val.Find("Bone_Pelvis/Bone_Spine_A/Bone_Chest/Bone_Shoulderblade_L/Bone_Shoulder_L"); Transform val5 = val.Find("Bone_Pelvis/Bone_Spine_A/Bone_Chest/Bone_Shoulderblade_L/Bone_Shoulder_L/Bone_Lowerarm_L"); Transform val6 = val.Find("Bone_Pelvis/Bone_Spine_A/Bone_Chest/Bone_Shoulderblade_R/Bone_Shoulder_R"); Transform val7 = val.Find("Bone_Pelvis/Bone_Spine_A/Bone_Chest/Bone_Shoulderblade_R/Bone_Shoulder_R/Bone_Lowerarm_R"); Transform val8 = val.Find("Bone_Pelvis/Bone_Hip_L"); Transform val9 = val.Find("Bone_Pelvis/Bone_Hip_L/Bone_Knee_L"); Transform val10 = val.Find("Bone_Pelvis/Bone_Hip_R"); Transform val11 = val.Find("Bone_Pelvis/Bone_Hip_R/Bone_Knee_R"); ragdoll.Head.transform.position = val2.position; ragdoll.Body.transform.position = val3.position; ragdoll.LeftArmUp.transform.position = val4.position; ragdoll.LeftArm.transform.position = val5.position; ragdoll.RightArmUp.transform.position = val6.position; ragdoll.RightArm.transform.position = val7.position; ragdoll.LeftLegUp.transform.position = val8.position; ragdoll.LeftLeg.transform.position = val9.position; ragdoll.RightLegUp.transform.position = val10.position; ragdoll.RightLeg.transform.position = val11.position; Quaternion val12 = Quaternion.Euler(0f, 180f, 0f); ragdoll.Head.transform.rotation = val2.rotation; ragdoll.Body.transform.rotation = val3.rotation; ragdoll.LeftArmUp.transform.rotation = val4.rotation; ragdoll.LeftArm.transform.rotation = val5.rotation * val12; ragdoll.RightArmUp.transform.rotation = val6.rotation; ragdoll.RightArm.transform.rotation = val7.rotation * val12; ragdoll.LeftLegUp.transform.rotation = val8.rotation * val12; ragdoll.LeftLeg.transform.rotation = val9.rotation * val12; ragdoll.RightLegUp.transform.rotation = val10.rotation * val12; ragdoll.RightLeg.transform.rotation = val11.rotation * val12; Rigidbody[] array = Il2CppArrayBase<Rigidbody>.op_Implicit(ragdoll.Ragdoll.GetComponentsInChildren<Rigidbody>()); Rigidbody[] array2 = array; foreach (Rigidbody val13 in array2) { val13.velocity = Vector3.zero; val13.angularVelocity = Vector3.zero; } } private void explodeRagdolls(StructureState structure) { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_020e: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) foreach (RagdollData ragdoll in ragdolls) { if (!ragdoll.Enabled) { continue; } for (int i = 0; i < ragdoll.Ragdoll.transform.childCount; i++) { Transform child = ragdoll.Ragdoll.transform.GetChild(i); Rigidbody component = ((Component)child).GetComponent<Rigidbody>(); if (!((Object)(object)component == (Object)null)) { float num = Vector3.Distance(child.position, structure.Position); float num2 = 1f; switch (structure.Name) { case "Pillar": num2 = 1f; break; case "Wall": num2 = 7f; break; case "Disc": num2 = 0f; break; case "RockCube": num2 = 4f; break; case "Ball": num2 = 1f; break; case "LargeRock": num2 = 9f; break; case "SmallRock": num2 = 5f; break; } if (structure.IsVolatile) { num2 *= 1.5f; } if (num <= 2.5f) { float num3 = 1f - num / 2.5f; float num4 = num2 * num3 * 1000f; Vector3 val = child.position - structure.Position; Vector3 normalized = ((Vector3)(ref val)).normalized; component.AddForce(normalized * num4, (ForceMode)1); } } } } } public IEnumerator PlayDramaticEffects() { recolorSilhouette(); List<Player> deadPlayers = getDeadPlayers(); hitVFXs.Clear(); oldLegacyCamClip = legacyCam.nearClipPlane; preImpactAudio.GetComponent<AudioSource>().volume = effectsVolume; preImpactAudio.GetComponent<AudioSource>().Play(); dramaticEffects = new GameObject("DramaticEffects"); dramaticEffects.transform.parent = modParentObject.transform; silhouetteBG = Object.Instantiate<GameObject>(silhouetteBGTemplate); silhouetteBG.transform.parent = dramaticEffects.transform; silhouetteBG.SetActive(true); silhouetteMaterial = new Material(Shader.Find("Universal Render Pipeline/Unlit")); silhouetteMaterial.SetColor("_BaseColor", new Color(0f, 0f, 0f, 1f)); flashMaterial = new Material(Shader.Find("Universal Render Pipeline/Unlit")); flashMaterial.SetColor("_BaseColor", new Color(1f, 1f, 1f, 0.5f)); flashMaterial.SetFloat("_Surface", 1f); flashMaterial.SetOverrideTag("RenderType", "Transparent"); flashMaterial.SetInt("_SrcBlend", 5); flashMaterial.SetInt("_DstBlend", 10); flashMaterial.SetInt("_ZWrite", 0); flashMaterial.renderQueue = 5000; flashMaterial.EnableKeyword("_SURFACE_TYPE_TRANSPARENT"); flashMaterial.EnableKeyword("_ALPHAPREMULTIPLY_ON"); if (scene == "Park") { player1Clone = Object.Instantiate<GameObject>(((Component)Singleton<PlayerManager>.Instance.localPlayer.Controller).gameObject); if (Singleton<PlayerManager>.Instance.AllPlayers.Count > 1 && deadPlayers.First() != Singleton<PlayerManager>.Instance.localPlayer) { player2Clone = Object.Instantiate<GameObject>(((Component)deadPlayers.First().Controller).gameObject); } else { player2Clone = null; } } else { player1Clone = Object.Instantiate<GameObject>(((Component)Singleton<PlayerManager>.Instance.AllPlayers[0].Controller).gameObject); if (Singleton<PlayerManager>.Instance.AllPlayers.Count > 1 && (Object)(object)Singleton<PlayerManager>.Instance.AllPlayers[1].Controller != (Object)null) { player2Clone = Object.Instantiate<GameObject>(((Component)Singleton<PlayerManager>.Instance.AllPlayers[1].Controller).gameObject); } else { player2Clone = null; } } setUpClone(player1Clone, forRagdoll: false); ((Renderer)((Component)player1Clone.transform.GetChild(0).GetChild(0)).GetComponent<SkinnedMeshRenderer>()).material = silhouetteMaterial; player1Clone.transform.SetParent(modParentObject.transform); Transform transform = player1Clone.transform; transform.position += new Vector3(dramaticEffectsDistance, 0f, 0f); player1Clone.transform.SetParent(dramaticEffects.transform); if ((Object)(object)player2Clone != (Object)null) { setUpClone(player2Clone, forRagdoll: false); ((Renderer)((Component)player2Clone.transform.GetChild(0).GetChild(0)).GetComponent<SkinnedMeshRenderer>()).material = silhouetteMaterial; player2Clone.transform.SetParent(modParentObject.transform); Transform transform2 = player2Clone.transform; transform2.position += new Vector3(dramaticEffectsDistance, 0f, 0f); player2Clone.transform.SetParent(dramaticEffects.transform); } player1Clone.transform.Find("Visuals/Skelington/Bone_Pelvis/Bone_Spine_A/Bone_Chest/Bone_Neck/Bone_Head").localScale = Vector3.zero; player1CloneCamera = new GameObject("EffectsCamera"); player1CloneCamera.transform.SetParent(dramaticEffects.transform, true); player1CloneCamera.transform.position = ((Component)Singleton<PlayerManager>.instance.localPlayer.Controller).transform.GetChild(1).GetChild(0).GetChild(0) .position + new Vector3(dramaticEffectsDistance, 0f, 0f); Camera effectsCamera = player1CloneCamera.AddComponent<Camera>(); effectsCamera.nearClipPlane = 0.01f; ((Component)effectsCamera).tag = "MainCamera"; ((Behaviour)playerCam).enabled = false; ((Behaviour)effectsCamera).enabled = true; createFlash(); inFreezeFrame = true; ((Behaviour)legacyCamRC).enabled = false; fogBefore = RenderSettings.fog; RenderSettings.fog = false; yield return (object)new WaitForSeconds(0.4f); createFlash(); inFreezeFrame = false; ((Behaviour)legacyCamRC).enabled = true; RenderSettings.fog = fogBefore; foreach (Player player in getDeadPlayers()) { Vector3 playerHeadPos = ((Component)player.Controller).transform.GetChild(1).GetChild(0).GetChild(0) .position; closestStructure = getClosestStructure(playerHeadPos); Vector3 val = closestStructure.Position - playerHeadPos; Vector3 direction = ((Vector3)(ref val)).normalized; Quaternion.LookRotation(direction, Vector3.up); Vector3 shockwavePos = playerHeadPos + direction * 0.35f; createShockwave(shockwavePos); createHitVFX(shockwavePos + new Vector3(dramaticEffectsDistance, 0f, 0f)); Vector3 dustPos = new Vector3(0f, -20f, 0f); if (deadPlayers.Count > 0) { foreach (Player deadPlayer in deadPlayers) { if (((Component)deadPlayer.Controller).gameObject.GetComponent<PlayerMovement>().IsGrounded()) { dustPos = ((Component)deadPlayer.Controller).gameObject.transform.GetChild(1).position; } } } createDustVFX(dustPos + new Vector3(dramaticEffectsDistance, 0f, 0f)); } if (shockwaves.Count == 0) { createShockwave(((Component)Singleton<PlayerManager>.instance.localPlayer.Controller).transform.GetChild(1).GetChild(1).position); } impactAudio.GetComponent<AudioSource>().volume = effectsVolume; impactAudio.GetComponent<AudioSource>().Play(); ((Behaviour)effectsCamera).enabled = false; dramaticEffects.SetActive(false); freezeRagdolls(frozen: false); if (hitVFXs.Count > 0) { foreach (GameObject hitVFX in hitVFXs) { hitVFX.transform.Translate(0f - dramaticEffectsDistance, 0f, 0f); } } if (dustVFXs.Count > 0) { foreach (GameObject dustVFX in dustVFXs) { dustVFX.transform.Translate(0f - dramaticEffectsDistance, 0f, 0f); } } Object.Destroy((Object)(object)((Component)player1Clone.transform.GetChild(0).GetChild(0)).gameObject); if ((Object)(object)player2Clone != (Object)null) { Object.Destroy((Object)(object)((Component)player2Clone.transform.GetChild(0).GetChild(0)).gameObject); } Object.Destroy((Object)(object)dramaticEffects); ((Behaviour)playerCam).enabled = true; } private void createHitVFX(Vector3 pos) { //IL_006e: Unknown result type (might be due to invalid IL or missing references) GameObject val = null; for (int i = 0; i < hitmarkerPool.transform.childCount; i++) { GameObject gameObject = ((Component)hitmarkerPool.transform.GetChild(i)).gameObject; if (!gameObject.activeSelf) { val = gameObject; break; } } if (!((Object)(object)val == (Object)null)) { val.SetActive(true); val.transform.position = pos; PlayerHitmarker component = val.GetComponent<PlayerHitmarker>(); component.SetDamage(7f); component.Play(); MelonCoroutines.Start(enlargeVFX(val)); hitVFXs.Add(val); } } private void createDustVFX(Vector3 pos) { //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: 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) GameObject val = null; for (int i = 0; i < dustPool.transform.childCount; i++) { GameObject gameObject = ((Component)dustPool.transform.GetChild(i)).gameObject; if (!gameObject.activeSelf) { val = gameObject; break; } } if (!((Object)(object)val == (Object)null)) { ogDustMaterial = ((Renderer)val.GetComponent<VFXRenderer>()).material; ((Renderer)val.GetComponent<VFXRenderer>()).material = silhouetteMaterial; val.SetActive(true); val.transform.position = pos; val.transform.localScale = Vector3.one * 2f; VisualEffect component = val.GetComponent<VisualEffect>(); component.RecreateData(); component.playRate = 0f; component.Play(); dustVFXs.Add(val); MelonCoroutines.Start(playDustVFX(val)); } } private IEnumerator playDustVFX(GameObject dustVFX) { yield return (object)new WaitForSeconds(0.4f); dustVFX.GetComponent<VisualEffect>().playRate = 1f; yield return (object)new WaitForSeconds(5f); dustVFX.transform.localScale = Vector3.one; dustVFX.SetActive(false); ((Renderer)dustVFX.GetComponent<VFXRenderer>()).material = ogDustMaterial; dustVFXs.Remove(dustVFX); } private IEnumerator enlargeVFX(GameObject hitVFX) { yield return (object)new WaitForSeconds(0.1f); hitVFX.GetComponent<PlayerHitmarker>().SetDamage(15f); yield return (object)new WaitForSeconds(3f); hitVFX.SetActive(false); hitVFXs.Remove(hitVFX); } private void createFlash() { //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)flash != (Object)null) { Object.Destroy((Object)(object)flash); } flash = Object.Instantiate<GameObject>(silhouetteBGTemplate); flash.SetActive(true); ((Object)flash).name = "Flash"; flash.transform.SetParent(modParentObject.transform); flash.transform.localScale = Vector3.one * 0.5f; flash.GetComponent<Renderer>().material = flashMaterial; flash.transform.position = ((Component)Camera.main).transform.position; flashStartTime = Time.time; } private List<Player> getDeadPlayers() { List<Player> list = new List<Player>(); Enumerator<Player> enumerator = Singleton<PlayerManager>.instance.AllPlayers.GetEnumerator(); while (enumerator.MoveNext()) { Player current = enumerator.Current; if (current.Data.HealthPoints <= 0 && !list.Contains(current)) { try { list.Add(current); } catch { } } } return list; } private void createShockwave(Vector3 pos) { //IL_0050: Unknown result type (might be due to invalid IL or missing references) GameObject val = Object.Instantiate<GameObject>(silhouetteBGTemplate); val.GetComponent<Renderer>().material = flashMaterial; ((Object)val).name = "Shockwave"; val.SetActive(true); val.transform.SetParent(modParentObject.transform); val.transform.position = pos; shockwaves.Add(val); shockwaveStartTime = Time.time; } private void freezeRagdolls(bool frozen) { //IL_0074: 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) if (ragdolls.Count == 0) { return; } foreach (RagdollData ragdoll in ragdolls) { foreach (Rigidbody componentsInChild in ragdoll.Ragdoll.GetComponentsInChildren<Rigidbody>()) { componentsInChild.isKinematic = frozen; componentsInChild.detectCollisions = !frozen; if (!frozen) { MelonCoroutines.Start(reapplyRagdollForce(componentsInChild, ragdoll.initialForce)); if ((Object)(object)componentsInChild == (Object)(object)ragdoll.initialForceRB) { MelonCoroutines.Start(reapplyRagdollForce(componentsInChild, ragdoll.initialForce)); } } } } } public IEnumerator reapplyRagdollForce(Rigidbody rb, Vector3 force) { //IL_0015: 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) yield return (object)new WaitForSeconds(Time.deltaTime * 3f); if ((Object)(object)rb != (Object)null) { rb.AddForce(force, (ForceMode)1); } } private GameObject LoadAssetBundle(string bundleName, string objectName) { using Stream stream = ((MelonBase)this).MelonAssembly.Assembly.GetManifestResourceStream(bundleName); byte[] array = new byte[stream.Length]; stream.Read(array, 0, array.Length); Il2CppStructArray<byte> val = new Il2CppStructArray<byte>((long)array.Length); for (int i = 0; i < array.Length; i++) { ((Il2CppArrayBase<byte>)(object)val)[i] = array[i]; } Il2CppAssetBundle val2 = Il2CppAssetBundleManager.LoadFromMemory(val); return Object.Instantiate<GameObject>(val2.LoadAsset<GameObject>(objectName)); } } public class RagdollData { public bool Enabled = true; public IEnumerator clearCoroutine; public int createdTime = Environment.TickCount; public GameObject RagdollSet; public GameObject Owner; public GameObject Clone; public GameObject Ragdoll; public GameObject CameraGO; public Camera Camera; public AudioListener AudioListener; public GameObject Head; public GameObject Body; public GameObject LeftArmUp; public GameObject LeftArm; public GameObject RightArmUp; public GameObject RightArm; public GameObject LeftLegUp; public GameObject LeftLeg; public GameObject RightLegUp; public GameObject RightLeg; public GameObject VHead; public GameObject VBody; public GameObject VLeftArmUp; public GameObject VLeftArm; public GameObject VRightArmUp; public GameObject VRightArm; public GameObject VLeftLegUp; public GameObject VLeftLeg; public GameObject VRightLegUp; public GameObject VRightLeg; public List<GameObject> children = new List<GameObject>(); public Vector3 initialForce = Vector3.zero; public Rigidbody initialForceRB; } public class StructureState { public Vector3 Position; public Vector3 Velocity; public bool IsFrozen; public GameObject Structure; public string Name; public bool IsExploded = false; public bool IsVolatile = false; public StructureState(Vector3 position, Vector3 velocity, bool isFrozen, GameObject structure) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) Position = position; Velocity = velocity; IsFrozen = isFrozen; Structure = structure; if ((Object)(object)structure != (Object)null) { Name = ((Object)structure).name; Transform val = structure.transform.Find("ExplodeStatus_VFX"); if ((Object)(object)val != (Object)null) { IsExploded = true; Il2CppReferenceArray<ShiftStone> equippedShiftstones = ((Component)((Component)val).GetComponent<PooledVisualEffect>().playerThatSpawnedThisEffect).GetComponent<PlayerShiftstoneSystem>().GetEquippedShiftstones(); if (((Il2CppArrayBase<ShiftStone>)(object)equippedShiftstones)[0] is VolatileStone || ((Il2CppArrayBase<ShiftStone>)(object)equippedShiftstones)[1] is VolatileStone) { IsVolatile = true; } } } else { Name = ""; } } } public class PlayerState { public Transform Transform; public Vector3 Velocity; public GameObject Player; public PlayerState(Transform transform, Vector3 velocity, GameObject player) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) Transform = transform; Velocity = velocity; Player = player; } } public class GameState { public List<StructureState> StructureStates; public List<StructureState> CleanStructureStates; public List<PlayerState> PlayerStates; public List<PlayerState> CleanPlayerStates; } }