using System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using HarmonyLib; using Il2Cpp; using Il2CppFemur; using Il2CppInterop.Runtime.InteropTypes; using Il2CppInterop.Runtime.InteropTypes.Arrays; using MelonLoader; using MelonLoader.Preferences; using MelonLoader.Utils; using Microsoft.CodeAnalysis; using SuperKickGB; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: MelonInfo(typeof(global::SuperKickGB.SuperKickGB), "SuperKickGB", "1.0.0", "Zooks", null)] [assembly: MelonGame("Boneloaf", "Gang Beasts")] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("SuperKickGB")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Super Kick Mod for GB")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("SuperKickGB")] [assembly: AssemblyTitle("SuperKickGB")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] 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; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace SuperKickGB { public class SuperKickGB : MelonMod { public static MelonPreferences_Category? ConfigCategory; public static MelonPreferences_Entry? NpcLaunchVelocity; public static MelonPreferences_Entry? EnableMod; public static AudioClip? KickAudioClip; public static GameObject? SoundPlayerObj; public static AudioSource? SoundPlayerSource; public override void OnInitializeMelon() { ConfigCategory = MelonPreferences.CreateCategory("SuperKickGBConfig", "Super Kick GB Configuration"); NpcLaunchVelocity = ConfigCategory.CreateEntry("NpcLaunchVelocity", 50f, "NPC Flight Velocity on Hit", (string)null, false, false, (ValueValidator)null, (string)null); EnableMod = ConfigCategory.CreateEntry("EnableMod", true, "Enable Mod", (string)null, false, false, (ValueValidator)null, (string)null); try { KickAudioClip = WavLoader.LoadWav(Path.Combine(MelonEnvironment.UserDataDirectory, "kick.wav")); if ((Object)(object)KickAudioClip != (Object)null) { ((MelonBase)this).LoggerInstance.Msg("Loaded kick.wav successfully."); } } catch (Exception) { } ((MelonBase)this).LoggerInstance.Msg("SuperKickGB loaded."); } public static void PlayKickSound() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown if (!((Object)(object)KickAudioClip == (Object)null)) { if ((Object)(object)SoundPlayerObj == (Object)null) { SoundPlayerObj = new GameObject("SuperKickGBSoundPlayer"); Object.DontDestroyOnLoad((Object)(object)SoundPlayerObj); SoundPlayerSource = SoundPlayerObj.AddComponent(); } if ((Object)(object)SoundPlayerSource != (Object)null) { SoundPlayerSource.volume = 1f; SoundPlayerSource.spatialBlend = 0f; SoundPlayerSource.PlayOneShot(KickAudioClip); } } } } public static class WavLoader { public static AudioClip? LoadWav(string filePath) { if (!File.Exists(filePath)) { return null; } byte[] array = File.ReadAllBytes(filePath); ushort num = BitConverter.ToUInt16(array, 22); uint num2 = BitConverter.ToUInt32(array, 24); ushort num3 = BitConverter.ToUInt16(array, 34); int num4 = 44; for (int i = 36; i < array.Length - 4; i++) { if (array[i] == 100 && array[i + 1] == 97 && array[i + 2] == 116 && array[i + 3] == 97) { num4 = i + 8; break; } } int num5 = array.Length - num4; int num6 = num3 / 8; int num7 = num5 / num6; float[] array2 = new float[num7]; switch (num3) { case 16: { for (int k = 0; k < num7; k++) { int num9 = num4 + k * 2; if (num9 + 1 < array.Length) { short num10 = BitConverter.ToInt16(array, num9); array2[k] = (float)num10 / 32768f; } } break; } case 8: { for (int l = 0; l < num7; l++) { int num11 = num4 + l; if (num11 < array.Length) { array2[l] = (float)(array[num11] - 128) / 128f; } } break; } case 32: { for (int j = 0; j < num7; j++) { int num8 = num4 + j * 4; if (num8 + 3 < array.Length) { array2[j] = BitConverter.ToSingle(array, num8); } } break; } default: return null; } AudioClip obj = AudioClip.Create("kick", num7 / num, (int)num, (int)num2, false); obj.SetData(Il2CppStructArray.op_Implicit(array2), 0); return obj; } } [HarmonyPatch(typeof(CollisionHandeler), "OnCollisionEnter")] public static class CollisionHandeler_OnCollisionEnter_Patch { private static float _lastHitTime; private static Rigidbody? GetHipsRigidbody(Actor actor) { if ((Object)(object)actor == (Object)null || (Object)(object)actor.bodyHandeler == (Object)null) { return null; } Il2CppReferenceArray allRigidbodies = actor.bodyHandeler.GetAllRigidbodies(); if (allRigidbodies != null && ((Il2CppArrayBase)(object)allRigidbodies).Length > 0) { for (int i = 0; i < ((Il2CppArrayBase)(object)allRigidbodies).Length; i++) { Rigidbody val = ((Il2CppArrayBase)(object)allRigidbodies)[i]; if ((Object)(object)val != (Object)null && (Object)(object)((Component)val).gameObject != (Object)null && ((Object)((Component)val).gameObject).name.ToLower().Contains("hips")) { return val; } } return ((Il2CppArrayBase)(object)allRigidbodies)[0]; } return null; } private static Vector3 GetPhysicalPosition(Actor actor) { //IL_0022: 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) Rigidbody hipsRigidbody = GetHipsRigidbody(actor); if ((Object)(object)hipsRigidbody != (Object)null) { return ((Component)hipsRigidbody).transform.position; } return ((Component)actor).transform.position; } [HarmonyPostfix] public static void Postfix(CollisionHandeler __instance, Collision collision) { //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_0256: 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_026a: Unknown result type (might be due to invalid IL or missing references) //IL_026e: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_02b1: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_02ba: 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_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: 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_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) try { if (SuperKickGB.EnableMod == null || !SuperKickGB.EnableMod.Value || (Object)(object)__instance == (Object)null || (Object)(object)__instance.actor == (Object)null || (Object)(object)((Component)__instance).gameObject == (Object)null) { return; } string text = ((Object)((Component)__instance).gameObject).name.ToLower(); if ((!text.Contains("foot") && !text.Contains("leg") && !text.Contains("hips") && !text.Contains("butt") && !text.Contains("shin") && !text.Contains("calf")) || !__instance.actor.IsLocal || Time.time - _lastHitTime < 0.3f) { return; } ControlHandeler controlHandeler = __instance.actor.controlHandeler; if (controlHandeler == null) { return; } bool flag = controlHandeler.leftKick || controlHandeler.rightKick || controlHandeler.kickDuck; ControlHandeler_Human val = ((Il2CppObjectBase)controlHandeler).TryCast(); if (val != null) { flag = flag || val.leftKickTimer > 0f || val.rightKickTimer > 0f; } if (!flag || collision == null || (Object)(object)collision.gameObject == (Object)null) { return; } Actor val2 = null; InteractableObject componentInParent = collision.gameObject.GetComponentInParent(); val2 = ((!((Object)(object)componentInParent != (Object)null)) ? collision.gameObject.GetComponentInParent() : componentInParent.actor); if ((Object)(object)val2 == (Object)null || (Object)(object)val2 == (Object)(object)__instance.actor) { return; } _lastHitTime = Time.time; Vector3 physicalPosition = GetPhysicalPosition(val2); Vector3 physicalPosition2 = GetPhysicalPosition(__instance.actor); Vector3 val3 = physicalPosition - physicalPosition2; Vector3 normalized = ((Vector3)(ref val3)).normalized; if ((Object)(object)val2.statusHandeler != (Object)null) { try { Damage val4 = (Damage)0; val2.statusHandeler.AddDamage(val4, 1000f, ((Component)__instance.actor).gameObject); val2.statusHandeler.stamina = 0f; val2.statusHandeler.unconsciousTime = 5f; } catch (Exception) { } } if ((Object)(object)val2.bodyHandeler != (Object)null) { Il2CppReferenceArray allRigidbodies = val2.bodyHandeler.GetAllRigidbodies(); if (allRigidbodies != null && ((Il2CppArrayBase)(object)allRigidbodies).Length > 0) { val3 = normalized + Vector3.up * 0.15f; Vector3 normalized2 = ((Vector3)(ref val3)).normalized; float num = ((SuperKickGB.NpcLaunchVelocity != null) ? SuperKickGB.NpcLaunchVelocity.Value : 50f); for (int i = 0; i < ((Il2CppArrayBase)(object)allRigidbodies).Length; i++) { Rigidbody val5 = ((Il2CppArrayBase)(object)allRigidbodies)[i]; if ((Object)(object)val5 != (Object)null) { val5.velocity += normalized2 * num; } } } } if ((Object)(object)__instance.actor.effectsHandeler != (Object)null) { __instance.actor.effectsHandeler.Laugh(); } SuperKickGB.PlayKickSound(); } catch (Exception) { } } } }