using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; 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("UncappedDamage")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("UncappedDamage")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("4eaf577e-ad76-41a6-850c-269239eea9b8")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.1", FrameworkDisplayName = ".NET Framework 4.7.1")] [assembly: AssemblyVersion("1.0.0.0")] namespace UncappedDamage; [BepInPlugin("com.yourname.uncappeddamage", "Uncapped Damage Bar", "1.0.0")] public class UncappedDamagePlugin : BaseUnityPlugin { public static ManualLogSource Log; private void Awake() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) Log = ((BaseUnityPlugin)this).Logger; new Harmony("com.yourname.uncappeddamage").PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Uncapped Damage loaded!"); } } [HarmonyPatch(typeof(CharacterAfflictions), "GetStatusCap")] public class UncapStatusCapPatch { private static void Postfix(STATUSTYPE type, ref float __result) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 if ((int)type == 0) { __result = float.MaxValue; } } } [HarmonyPatch(typeof(CharacterMovement), "FallFactor")] public class UncapFallFactorPatch { public static float UncappedLerp(float a, float b, float value) { if (Mathf.Approximately(a, b)) { return 0f; } return Mathf.Max(0f, (value - a) / (b - a)); } private static IEnumerable Transpiler(IEnumerable instructions) { MethodInfo inverseLerpMethod = AccessTools.Method(typeof(Mathf), "InverseLerp", (Type[])null, (Type[])null); MethodInfo ourMethod = AccessTools.Method(typeof(UncapFallFactorPatch), "UncappedLerp", (Type[])null, (Type[])null); foreach (CodeInstruction instruction in instructions) { int num; if (instruction.opcode == OpCodes.Call) { object operand = instruction.operand; if (operand is MethodInfo mi) { num = ((mi == inverseLerpMethod) ? 1 : 0); goto IL_00ea; } } num = 0; goto IL_00ea; IL_00ea: if (num != 0) { yield return new CodeInstruction(OpCodes.Call, (object)ourMethod); } else { yield return instruction; } } } } [HarmonyPatch(typeof(CharacterMovement), "MaxVelDmg")] public class UncapMaxVelDmgPatch { private static void Postfix(ref float __result) { __result = float.MaxValue; } } [HarmonyPatch(typeof(CharacterAfflictions), "AddStatus")] public class UncapAddStatusFieldPatch { private static void Prefix(CharacterAfflictions __instance, STATUSTYPE statusType, out float __state) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) __state = __instance.currentStatuses[statusType]; } private static void Postfix(CharacterAfflictions __instance, STATUSTYPE statusType, float amount, bool __result, float __state) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) if ((int)statusType <= 0 && __result) { float num = __instance.currentStatuses[statusType]; float num2 = num - __state; if (amount > num2) { __instance.currentStatuses[statusType] = __state + amount; } } } } public class WrapAroundBarState { public List rowClones = new List(); public float baseHeight; public Vector2 pivot; } [HarmonyPatch(typeof(BarAffliction), "ChangeAffliction")] public class WrapAroundBarPatch { private static readonly Dictionary states = new Dictionary(); private const float ROW_CAPACITY = 3f; private const int MAX_VISIBLE_ROWS = 5; private const float ROW_GAP = 6f; private static bool Prefix(BarAffliction __instance, StaminaBar bar) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_0035: Unknown result type (might be due to invalid IL or missing references) if ((int)__instance.afflictionType > 0) { return true; } if ((Object)(object)Character.observedCharacter == (Object)null) { return true; } float currentStatus = Character.observedCharacter.refs.afflictions.GetCurrentStatus(__instance.afflictionType); if (currentStatus <= 1f) { HideExtraRows(__instance); return true; } HandleWrapAround(__instance, bar, currentStatus); return false; } private static void HandleWrapAround(BarAffliction instance, StaminaBar bar, float currentStatus) { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: 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_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_0133: 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_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_0224: Unknown result type (might be due to invalid IL or missing references) Transform parent = ((Component)instance).transform.parent.parent; RectTransform val = (RectTransform)(object)((parent is RectTransform) ? parent : null); if (!states.TryGetValue(instance, out var value)) { value = new WrapAroundBarState { baseHeight = instance.rtf.sizeDelta.y, pivot = instance.rtf.pivot }; states[instance] = value; } float x = bar.fullBar.sizeDelta.x; float num = 3f * x; int num2 = Mathf.FloorToInt(currentStatus / 3f); float num3 = currentStatus - (float)num2 * 3f; bool flag = num3 > 0.0001f; int num4 = (flag ? (num2 + 1) : num2); int needed = num4 - 1; float num5 = value.baseHeight + 6f; if (num4 > 5) { num5 = (value.baseHeight + 6f) * 5f / (float)num4; } float size = ((num4 > 1) ? num : (currentStatus * x)); instance.size = size; ((Component)instance).gameObject.SetActive(true); Vector3[] array = (Vector3[])(object)new Vector3[4]; instance.rtf.GetWorldCorners(array); Vector3 val2 = ((Transform)val).InverseTransformPoint(array[0]); EnsureCloneCount(instance, value, val, needed); for (int i = 0; i < value.rowClones.Count; i++) { int num6 = i + 1; bool flag2 = num6 < num4; ((Component)value.rowClones[i]).gameObject.SetActive(flag2); if (flag2) { bool flag3 = num6 == num4 - 1; float num7 = ((flag3 && flag) ? (num3 * x) : num); if (num7 < bar.minAfflictionWidth) { num7 = bar.minAfflictionWidth; } value.rowClones[i].sizeDelta = new Vector2(num7, value.baseHeight); float num8 = val2.x + value.pivot.x * num7; float num9 = val2.y + (float)num6 * num5 + value.pivot.y * value.baseHeight; ((Transform)value.rowClones[i]).localPosition = new Vector3(num8, num9, 0f); } } } private static void EnsureCloneCount(BarAffliction instance, WrapAroundBarState state, RectTransform barRt, int needed) { while (state.rowClones.Count < needed) { GameObject val = Object.Instantiate(((Component)instance).gameObject, (Transform)(object)barRt); ((Object)val).name = ((Object)((Component)instance).gameObject).name + "_Row" + (state.rowClones.Count + 1); BarAffliction component = val.GetComponent(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); } state.rowClones.Add(val.GetComponent()); } } private static void HideExtraRows(BarAffliction instance) { if (!states.TryGetValue(instance, out var value)) { return; } foreach (RectTransform rowClone in value.rowClones) { if ((Object)(object)rowClone != (Object)null) { ((Component)rowClone).gameObject.SetActive(false); } } } }