using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BoneLib;
using BoneLib.BoneMenu;
using Crumble;
using Il2CppSLZ.Marrow;
using MelonLoader;
using MelonLoader.Preferences;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle(null)]
[assembly: AssemblyDescription(null)]
[assembly: AssemblyCompany(null)]
[assembly: AssemblyProduct("Crumble")]
[assembly: AssemblyCopyright("Developed by Bread Soup")]
[assembly: AssemblyTrademark(null)]
[assembly: AssemblyFileVersion("1.1.0")]
[assembly: MelonInfo(typeof(Main), "Crumble", "1.1.0", "Bread Soup", null)]
[assembly: MelonColor(255, 255, 255, 255)]
[assembly: MelonGame("Stress Level Zero", "BONELAB")]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyVersion("1.1.0.0")]
namespace Crumble;
internal class Main : MelonMod
{
internal const string Name = "Crumble";
internal const string Description = null;
internal const string Author = "Bread Soup";
internal const string Company = null;
internal const string Version = "1.1.0";
internal const string DownloadLink = null;
private PhysGrounder _feet;
private bool _sceneLoaded;
private bool _hasRagdolledFromCrumble;
private bool _previousRagdollState;
private bool _currentRagdollState;
private bool _previousFrame;
private bool _currentFrame;
public static float Threshold = 7f;
public static float Markiplier = 1.5f;
public static float RagdollHealthPercentage = 25f;
private static readonly Vector3 Add = new Vector3(0f, 0.5f, 0f);
public override void OnInitializeMelon()
{
Hooking.OnLevelLoaded += delegate
{
OnSceneAwake();
};
Preferences.MelonPreferencesCreator();
Preferences.BoneMenuCreator();
}
private void OnSceneAwake()
{
_sceneLoaded = true;
_feet = Player.PhysicsRig.feet.GetComponent<PhysGrounder>();
_previousRagdollState = Player.PhysicsRig._legsKinematic;
_previousFrame = _feet.isGrounded;
}
public override void OnUpdate()
{
//IL_00e8: 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_00f2: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: 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_0169: Unknown result type (might be due to invalid IL or missing references)
if (!Preferences.IsEnabled || !_sceneLoaded)
{
return;
}
float num = Player.RigManager.health.curr_Health / Player.RigManager.health.max_Health * 100f;
if (num >= RagdollHealthPercentage && !Player.PhysicsRig._legsKinematic && Player.RigManager.health.curr_Health > 0f && _hasRagdolledFromCrumble)
{
Player.PhysicsRig.UnRagdollRig();
}
if (_hasRagdolledFromCrumble && Player.PhysicsRig._legsKinematic)
{
_hasRagdolledFromCrumble = false;
}
_currentRagdollState = Player.PhysicsRig._legsKinematic;
if (!_previousRagdollState && _currentRagdollState && Preferences.RagdollFlingingFix)
{
Vector3 val = Player.PhysicsRig.feet.transform.position + Add;
Player.RigManager.Teleport(val, true);
}
_previousRagdollState = _currentRagdollState;
_currentFrame = _feet.isGrounded;
if (_currentFrame && !_previousFrame && Player.PhysicsRig.wholeBodyVelocity.y < 0f - Threshold)
{
float num2 = Mathf.Abs(Player.PhysicsRig.wholeBodyVelocity.y + Threshold);
num2 *= Markiplier;
Player.RigManager.health.TAKEDAMAGE(num2);
float num3 = Player.RigManager.health.curr_Health / Player.RigManager.health.max_Health * 100f;
if (num3 <= RagdollHealthPercentage && Preferences.RagdollFromFallDamage)
{
Player.PhysicsRig.RagdollRig();
_hasRagdolledFromCrumble = true;
}
}
_previousFrame = _currentFrame;
}
}
internal static class Preferences
{
private static MelonPreferences_Category MelonPrefCategory { get; set; }
private static MelonPreferences_Entry<bool> MelonPrefEnabled { get; set; }
internal static bool IsEnabled { get; private set; }
private static MelonPreferences_Entry<float> MelonPrefDamageThreshold { get; set; }
private static MelonPreferences_Entry<float> MelonPrefDamageMultiplier { get; set; }
private static MelonPreferences_Entry<float> MelonPrefRagdollPercentage { get; set; }
private static MelonPreferences_Entry<bool> MelonPrefRagdollFromFallDamage { get; set; }
public static bool RagdollFromFallDamage { get; private set; }
private static MelonPreferences_Entry<bool> MelonPrefRagdollFlingingFix { get; set; }
public static bool RagdollFlingingFix { get; private set; }
internal static void MelonPreferencesCreator()
{
MelonPrefCategory = MelonPreferences.CreateCategory("Crumble");
MelonPrefEnabled = MelonPrefCategory.CreateEntry<bool>("IsEnabled", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
IsEnabled = MelonPrefEnabled.Value;
MelonPrefDamageThreshold = MelonPrefCategory.CreateEntry<float>("Damage Threshold", 7f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
MelonPrefDamageMultiplier = MelonPrefCategory.CreateEntry<float>("Damage Multiplier", 1.5f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
MelonPrefRagdollPercentage = MelonPrefCategory.CreateEntry<float>("Ragdoll Percentage", 25f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
MelonPrefRagdollFromFallDamage = MelonPrefCategory.CreateEntry<bool>("Ragdoll From Fall Damage", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
RagdollFromFallDamage = MelonPrefRagdollFromFallDamage.Value;
MelonPrefRagdollFlingingFix = MelonPrefCategory.CreateEntry<bool>("Ragdoll Flinging Fix", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
RagdollFlingingFix = MelonPrefRagdollFlingingFix.Value;
}
internal static void BoneMenuCreator()
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: 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_015b: Unknown result type (might be due to invalid IL or missing references)
Page val = Page.Root.CreatePage("<color=#ff2424>C</color><color=#ff2926>r</color><color=#ff2e28>u</color><color=#ff332a>m</color><color=#ff372c>b</color><color=#ff3a2e>l</color><color=#ff3e30>e</color>", Color.white, 0, true);
val.CreateBool("Mod Toggle", new Color(1f, 0.3686f, 0f), IsEnabled, (Action<bool>)OnSetEnabled);
val.CreateFloat("Damage Threshold", new Color(0.9882f, 0.1333f, 0.1059f), Main.Threshold, 1f, 0f, 100f, (Action<float>)delegate(float dt)
{
Main.Threshold = dt;
MelonPrefDamageThreshold.Value = dt;
MelonPrefCategory.SaveToFile(false);
});
val.CreateFloat("Damage Multiplier", new Color(0.9882f, 0.1333f, 0.1059f), Main.Markiplier, 0.1f, 0f, 100f, (Action<float>)delegate(float dm)
{
Main.Markiplier = dm;
MelonPrefDamageMultiplier.Value = dm;
MelonPrefCategory.SaveToFile(false);
});
val.CreateFloat("Ragdoll Percentage", Color.yellow, Main.RagdollHealthPercentage, 5f, 0f, 100f, (Action<float>)delegate(float rp)
{
Main.RagdollHealthPercentage = rp;
MelonPrefRagdollPercentage.Value = rp;
MelonPrefCategory.SaveToFile(false);
});
val.CreateBool("Ragdoll From Fall Damage", Color.yellow, RagdollFromFallDamage, (Action<bool>)OnRagdollFromFallDamage);
val.CreateBool("Ragdoll Flinging Fix", Color.yellow, RagdollFlingingFix, (Action<bool>)OnRagdollFlingingFix);
}
private static void OnSetEnabled(bool value)
{
IsEnabled = value;
MelonPrefEnabled.Value = value;
MelonPrefCategory.SaveToFile(false);
}
private static void OnRagdollFromFallDamage(bool value)
{
RagdollFromFallDamage = value;
MelonPrefRagdollFromFallDamage.Value = value;
MelonPrefCategory.SaveToFile(false);
}
private static void OnRagdollFlingingFix(bool value)
{
RagdollFlingingFix = value;
MelonPrefRagdollFlingingFix.Value = value;
MelonPrefCategory.SaveToFile(false);
}
}