Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of UnlockMomentum v0.1.6
UnlockMomentum.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security.Permissions; using BepInEx; using EntityStates; using EntityStates.Loader; using EntityStates.Toolbot; using HG.Reflection; using HarmonyLib; using RoR2; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.1.6.0")] namespace Local.Unlock.Momentum; [BepInPlugin("local.unlock.momentum", "UnlockMomentum", "0.1.6")] public class Plugin : BaseUnityPlugin { public const string identifier = "local.unlock.momentum"; public const string version = "0.1.6"; private static Harmony instance; public void Awake() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) Patch(); } [ConCommand(commandName = "toggle_momentum", helpText = "Select air control behavior.")] private static void Patch(ConCommandArgs args = default(ConCommandArgs)) { //IL_0000: 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) if (args.userArgs != null && ((ConCommandArgs)(ref args)).Count != 0) { throw new ConCommandException("No value required."); } if (instance == null) { instance = Harmony.CreateAndPatchAll(typeof(Plugin), (string)null); Debug.Log((object)"Unlocked air control."); } else { instance.UnpatchSelf(); instance = null; Debug.Log((object)"Restored default behavior."); } } [HarmonyPatch(typeof(CharacterMotor), "PreMove")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> Transpile(IEnumerable<CodeInstruction> codeInstructions) { foreach (CodeInstruction codeInstruction in codeInstructions) { if (CodeInstructionExtensions.Calls(codeInstruction, typeof(Vector3).GetMethod("MoveTowards"))) { yield return new CodeInstruction(OpCodes.Ldarg_0, (object)null); yield return CodeInstruction.Call(typeof(Plugin), "Accelerate", (Type[])null, (Type[])null); } else if (CodeInstructionExtensions.LoadsField(codeInstruction, typeof(CharacterMotor).GetField("disableAirControlUntilCollision"), false)) { yield return new CodeInstruction(OpCodes.Pop, (object)null); yield return new CodeInstruction(OpCodes.Ldc_I4_0, (object)null); } else { yield return codeInstruction; } } } private static Vector3 Accelerate(Vector3 original, Vector3 target, float delta, CharacterMotor character) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: 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_013f: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_0152: 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) if (character.acceleration <= 0f) { return original; } if (!character.isGrounded || character.isAirControlForced) { Vector3 val = original; if (!character.isFlying) { target.y = (val.y = 0f); } CharacterBody body = character.body; float num = Mathf.Max(((Vector3)(ref target)).magnitude, body.moveSpeed); float magnitude = ((Vector3)(ref val)).magnitude; float num2 = magnitude / num; if (!body.isSprinting) { num *= body.sprintingSpeedMultiplier; } SkillLocator skillLocator = body.skillLocator; GenericSkill val2 = ((skillLocator != null) ? skillLocator.FindSkillByFamilyName("LoaderBodySecondaryFamily") : null); if (character.disableAirControlUntilCollision && !character.isFlying) { if (!body.isPlayerControlled || target == Vector3.zero) { return original; } if (Object.op_Implicit((Object)(object)val2) && Object.op_Implicit((Object)(object)val2.stateMachine)) { EntityState state = val2.stateMachine.state; if (((FireHook)(((state is FireHook) ? state : null)?)).isStuck ?? false) { return original; } delta *= 0.75f / Mathf.Pow(character.acceleration, 0.25f); } else { delta /= 1.5f; if (original.y > 0f) { delta /= Mathf.Pow(1.25f, original.y * ((Vector3)(ref original)).magnitude / 750f); } } } else { num2 = (1f + num2) / 2f; } if (num != 0f && num2 > 1f) { target *= num2; } num2 = magnitude - num; if (num2 > 0f && val2 == null) { float num3 = 0.5f; if (target != Vector3.zero) { num3 *= 1f - Vector3.Dot(((Vector3)(ref val)).normalized, ((Vector3)(ref target)).normalized); } delta *= 1f + num2 / (character.acceleration * 0.15f) * num3; } if (!character.isFlying) { target.y = original.y; } } return Vector3.MoveTowards(original, target, delta); } [HarmonyPatch(typeof(ToolbotDash), "OnEnter")] [HarmonyPrefix] private static void Unlock(EntityState __instance) { __instance.characterMotor.disableAirControlUntilCollision = false; } }