using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UltraTweaker;
using UltraTweaker.SettingUI;
using UltraTweaker.SettingUI.UIElements;
using UltraTweaker.SettingUI.UIElements.Impl;
using UltraTweaker.Subsettings;
using UltraTweaker.Subsettings.Impl;
using UltraTweaker.Tweaks;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.SceneManagement;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("Movement")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("funny silly machine go fast! :3")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+ef328d0880f8857eb6f79820d3f4e1be2ce0fb37")]
[assembly: AssemblyProduct("Movement")]
[assembly: AssemblyTitle("Movement")]
[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.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace Movement
{
[BepInPlugin("waffle.ultrakill.movement", "MovementPlus", "1.0.5")]
public class Movement : BaseUnityPlugin
{
public const string GUID = "waffle.ultrakill.movement";
public const string Name = "MovementPlus";
public const string Version = "1.0.5";
public static readonly string AssetsPath = Path.Combine(ModPath(), "Assets");
public static readonly string BundlePath = Path.Combine(AssetsPath, "movementplus.bundle");
public static AssetBundle Bundle;
public void Start()
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Expected O, but got Unknown
Bundle = AssetBundle.LoadFromFile(BundlePath);
SettingUIHandler.Pages.Add("waffle.ultrakill.movement.movement_mod", new Page("GENERAL", "MOVEMENT+"));
UltraTweaker.AddAssembly(Assembly.GetExecutingAssembly());
}
public static string ModPath(Assembly asm = null)
{
if (asm == null)
{
asm = Assembly.GetExecutingAssembly();
}
return asm.Location.Substring(0, asm.Location.LastIndexOf(Path.DirectorySeparatorChar));
}
}
}
namespace Movement.Tweaks
{
[TweakMetadata("Double Jump", "waffle.ultrakill.movement.double_jump", "Jump, but double.", "waffle.ultrakill.movement.movement_mod", 2, null, false, false)]
public class DoubleJump : Tweak
{
public class JumpPatches
{
[HarmonyPatch(typeof(NewMovement), "Update")]
[HarmonyPrefix]
public static void DoubleJump(NewMovement __instance)
{
if (__instance.gc.onGround)
{
JumpsLeft = Jumps;
}
if (MonoSingleton<InputManager>.Instance.InputSource.Jump.WasPerformedThisFrame && !__instance.gc.onGround && !__instance.wc.onWall && JumpsLeft > 0f)
{
__instance.Jump();
JumpsLeft -= 1f;
}
}
}
private Harmony harmony = new Harmony("waffle.ultrakill.movement.double_jump");
public static float Jumps;
public static float JumpsLeft;
public DoubleJump()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Expected O, but got Unknown
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Expected O, but got Unknown
//IL_004b: Expected O, but got Unknown
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Expected O, but got Unknown
base.Subsettings = new Dictionary<string, Subsetting> {
{
"jumps",
(Subsetting)new IntSubsetting((Tweak)(object)this, new Metadata("Jumps", "jumps", "How many jumps you get."), (SubsettingUIElement)new SliderIntSubsettingElement("{0}"), 2, 5, 1)
} };
}
public override void OnTweakEnabled()
{
((Tweak)this).OnTweakEnabled();
SetValues();
harmony.PatchAll(typeof(JumpPatches));
}
public override void OnTweakDisabled()
{
((Tweak)this).OnTweakDisabled();
harmony.UnpatchSelf();
}
public override void OnSubsettingUpdate()
{
SetValues();
}
public void SetValues()
{
Jumps = base.Subsettings["jumps"].GetValue<int>();
}
}
[TweakMetadata("Momentum Dash", "waffle.ultrakill.movement.momentum_dash", "Dashes don't decrease speed at the end.", "waffle.ultrakill.movement.movement_mod", 3, null, false, false)]
public class MomentumDash : Tweak
{
public class DashPatches
{
[HarmonyPatch(typeof(NewMovement), "Update")]
[HarmonyPrefix]
public static bool CancelCancelling(NewMovement __instance)
{
if (__instance.boostLeft - 4f >= 0f && !__instance.gc.touchingGround)
{
__instance.boostLeft = 0f;
__instance.boost = false;
return false;
}
return true;
}
}
private Harmony harmony = new Harmony("waffle.ultrakill.movement.momentum_dash");
public override void OnTweakEnabled()
{
((Tweak)this).OnTweakEnabled();
harmony.PatchAll(typeof(DashPatches));
}
public override void OnTweakDisabled()
{
((Tweak)this).OnTweakDisabled();
harmony.UnpatchSelf();
}
}
[TweakMetadata("Hook Swing", "waffle.ultrakill.movement.real_hook", "Swing with the whiplash.", "waffle.ultrakill.movement.movement_mod", 0, null, false, false)]
public class RealHook : Tweak
{
public class RealHookPatches
{
private static ConfigurableJoint gj;
[HarmonyPatch(typeof(HookArm), "Start")]
[HarmonyPostfix]
public static void ReplaceModel(HookArm __instance)
{
if (((Tweak)Tweak.GetInstance<RealHook>()).Subsettings["custom_model"].GetValue<bool>())
{
CreateArmModel();
}
}
[HarmonyPatch(typeof(HookArm), "Update")]
[HarmonyPostfix]
public static void FixHandPos(HookArm __instance)
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
((Component)__instance.hand).transform.localPosition = Vector3.zero;
}
[HarmonyPatch(typeof(HookArm), "Update")]
[HarmonyPostfix]
public static void MakeSwing(HookArm __instance)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Invalid comparison between Unknown and I4
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_0127: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Unknown result type (might be due to invalid IL or missing references)
//IL_010f: Unknown result type (might be due to invalid IL or missing references)
if (!__instance.lightTarget && (int)__instance.state == 3)
{
if ((Object)(object)__instance.caughtTransform != (Object)null)
{
__instance.hookPoint = __instance.caughtTransform.position + __instance.caughtPoint;
if (!Object.op_Implicit((Object)(object)((Component)MonoSingleton<NewMovement>.Instance).GetComponent<ConfigurableJoint>()))
{
gj = ((Component)MonoSingleton<NewMovement>.Instance).gameObject.AddComponent<ConfigurableJoint>();
gj.xMotion = (ConfigurableJointMotion)1;
gj.yMotion = (ConfigurableJointMotion)1;
gj.zMotion = (ConfigurableJointMotion)1;
ConfigurableJoint obj = gj;
SoftJointLimit linearLimit = default(SoftJointLimit);
((SoftJointLimit)(ref linearLimit)).limit = Vector3.Distance(((Component)gj).transform.position, __instance.caughtTransform.position + __instance.caughtPoint);
obj.linearLimit = linearLimit;
((Joint)gj).autoConfigureConnectedAnchor = false;
MonoSingleton<NewMovement>.Instance.rb.AddForce(Vector3.up * 15f * -1f, (ForceMode)2);
}
((Joint)gj).connectedAnchor = __instance.caughtTransform.position + __instance.caughtPoint;
}
if ((Object)(object)__instance.caughtEid != (Object)null && __instance.caughtEid.dead)
{
Object.Destroy((Object)(object)gj);
__instance.StopThrow(0f, false);
}
}
else
{
Object.Destroy((Object)(object)gj);
}
}
[HarmonyPatch(typeof(HookArm), "Update")]
[HarmonyPrefix]
public static void CollideWithWalls(HookArm __instance)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Invalid comparison between Unknown and I4
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)invisHook != (Object)null && (int)__instance.state == 0)
{
RaycastHit val = default(RaycastHit);
Physics.Raycast(((Component)MonoSingleton<CameraController>.Instance).transform.position, ((Component)MonoSingleton<CameraController>.Instance).transform.forward, ref val, 1000000f, LayerMask.op_Implicit(__instance.enviroMask), (QueryTriggerInteraction)1);
invisHook.transform.position = ((RaycastHit)(ref val)).point - ((Component)MonoSingleton<CameraController>.Instance).transform.forward;
}
}
[HarmonyPatch(typeof(HookArm), "FixedUpdate")]
[HarmonyPrefix]
public static bool StopPull(HookArm __instance, ref Vector3 __state)
{
//IL_000c: 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)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Invalid comparison between Unknown and I4
__state = MonoSingleton<NewMovement>.Instance.rb.velocity;
if (!__instance.lightTarget && (int)__instance.state == 3)
{
return false;
}
return true;
}
[HarmonyPatch(typeof(HookArm), "FixedUpdate")]
[HarmonyPostfix]
public static void SetVelo(HookArm __instance, Vector3 __state)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
if (!__instance.lightTarget)
{
MonoSingleton<NewMovement>.Instance.rb.velocity = __state;
}
}
[HarmonyPatch(typeof(HookArm), "StopThrow")]
[HarmonyPrefix]
public static bool StopJumpDisablingTheHook(HookArm __instance, float animationTime)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Invalid comparison between Unknown and I4
if ((int)__instance.state == 3 && !__instance.lightTarget && MonoSingleton<InputManager>.Instance.InputSource.Jump.WasPerformedThisFrame && animationTime == 1f)
{
return false;
}
return true;
}
[HarmonyPatch(typeof(HookArm), "Update")]
[HarmonyPostfix]
public static void Pull(HookArm __instance)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Invalid comparison between Unknown and I4
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//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_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
if ((int)__instance.state == 3 && !__instance.lightTarget && MonoSingleton<InputManager>.Instance.InputSource.Jump.IsPressed)
{
ConfigurableJoint obj = gj;
SoftJointLimit linearLimit = default(SoftJointLimit);
SoftJointLimit linearLimit2 = gj.linearLimit;
((SoftJointLimit)(ref linearLimit)).limit = ((SoftJointLimit)(ref linearLimit2)).limit - Time.deltaTime * shortenSpeed;
obj.linearLimit = linearLimit;
Rigidbody rb = MonoSingleton<NewMovement>.Instance.rb;
float pullSpeed = RealHook.pullSpeed;
Vector3 val = ((Component)MonoSingleton<HookArm>.Instance.caughtTransform).transform.position + MonoSingleton<HookArm>.Instance.caughtPoint - ((Component)__instance).transform.position;
rb.velocity = pullSpeed * ((Vector3)(ref val)).normalized;
}
}
}
private Harmony harmony = new Harmony("waffle.ultrakill.movement.real_hook");
private static GameObject model;
private static GameObject invisHook;
private static float pullSpeed;
private static float shortenSpeed;
private static HookArmDataStorage hads;
public RealHook()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Expected O, but got Unknown
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Expected O, but got Unknown
//IL_0044: Expected O, but got Unknown
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Expected O, but got Unknown
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Expected O, but got Unknown
//IL_0070: Expected O, but got Unknown
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Expected O, but got Unknown
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Expected O, but got Unknown
//IL_00b0: Expected O, but got Unknown
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Expected O, but got Unknown
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Expected O, but got Unknown
//IL_00f0: Expected O, but got Unknown
//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: Expected O, but got Unknown
base.Subsettings = new Dictionary<string, Subsetting>
{
{
"custom_model",
(Subsetting)new BoolSubsetting((Tweak)(object)this, new Metadata("Custom Model", "custom_model", "A custom model by Rem_Safe_Space."), (SubsettingUIElement)new BoolSubsettingElement(), true)
},
{
"any_surf",
(Subsetting)new BoolSubsetting((Tweak)(object)this, new Metadata("Any Surface", "any_surf", "If you should hook on every surface."), (SubsettingUIElement)new BoolSubsettingElement(), true)
},
{
"space_pull",
(Subsetting)new FloatSubsetting((Tweak)(object)this, new Metadata("Space To Pull", "space_pull", "Amount to pull yourself to the center with Space."), (SubsettingUIElement)new SliderFloatSubsettingElement("{0}", 1), 50f, 100f, 0f)
},
{
"space_short",
(Subsetting)new FloatSubsetting((Tweak)(object)this, new Metadata("Space To Shorten", "space_short", "Amount to shorten the hook with Space."), (SubsettingUIElement)new SliderFloatSubsettingElement("{0}", 1), 0f, 100f, 0f)
}
};
}
public override void OnTweakEnabled()
{
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
((Tweak)this).OnTweakEnabled();
harmony.PatchAll(typeof(RealHookPatches));
SetValues();
if ((Object)(object)model == (Object)null)
{
model = Movement.Bundle.LoadAsset<GameObject>("Swing Arm.prefab");
model.GetComponentInChildren<Renderer>().material.shader = Addressables.LoadAssetAsync<Shader>((object)"Assets/Shaders/Main/ULTRAKILL-vertexlit.shader").WaitForCompletion();
}
}
public override void OnTweakDisabled()
{
((Tweak)this).OnTweakDisabled();
harmony.UnpatchSelf();
}
public override void OnSubsettingUpdate()
{
SetValues();
}
public override void OnSceneLoad(Scene scene, LoadSceneMode mode)
{
SetValues();
}
public void SetValues()
{
Object.Destroy((Object)(object)invisHook);
pullSpeed = base.Subsettings["space_pull"].GetValue<float>();
shortenSpeed = base.Subsettings["space_short"].GetValue<float>();
TryMakeHookPoint();
if (((Tweak)Tweak.GetInstance<RealHook>()).Subsettings["custom_model"].GetValue<bool>() && (Object)(object)hads == (Object)null)
{
CreateArmModel();
}
else
{
hads?.Begone();
}
}
public void TryMakeHookPoint()
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Expected O, but got Unknown
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
if (Tweak.IsGameplayScene() && base.Subsettings["any_surf"].GetValue<bool>())
{
invisHook = Object.Instantiate<GameObject>(Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Levels/Interactive/GrapplePoint.prefab").WaitForCompletion());
((Component)invisHook.transform.GetChild(0)).gameObject.SetActive(false);
((Component)invisHook.transform.GetChild(1)).gameObject.SetActive(false);
((Behaviour)invisHook.GetComponent<Light>()).enabled = false;
((Behaviour)invisHook.GetComponent<AudioSource>()).enabled = false;
invisHook.GetComponent<HookPoint>().grabParticle = new GameObject();
invisHook.GetComponent<HookPoint>().grabParticle.AddComponent<DestroyOnCheckpointRestart>();
invisHook.transform.localScale = Vector3.one * 2f;
}
}
public static void CreateArmModel()
{
HookArm instance = MonoSingleton<HookArm>.Instance;
if ((Object)(object)instance != (Object)null && Tweak.IsGameplayScene())
{
hads = Object.Instantiate<GameObject>(model, ((Component)instance).transform).GetComponent<HookArmDataStorage>();
hads.Apply();
}
}
}
public class HookArmDataStorage : MonoBehaviour
{
public Animator anim;
public Transform hand;
public Transform hook;
public GameObject hookModel;
public LineRenderer inspectLr;
private GameObject oldModel;
private Animator oldAnim;
private Transform oldHand;
private Transform oldHook;
private GameObject oldHookModel;
private LineRenderer oldInspectLr;
private Color oldColour;
public void Apply()
{
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: 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_00e3: Unknown result type (might be due to invalid IL or missing references)
HookArm instance = MonoSingleton<HookArm>.Instance;
oldModel = instance.model;
oldAnim = instance.anim;
oldHand = instance.hand;
oldHook = instance.hook;
oldHookModel = instance.hookModel;
oldInspectLr = instance.inspectLr;
instance.model = ((Component)this).gameObject;
instance.anim = anim;
instance.hand = hand;
instance.hook = hook;
instance.hookModel = hookModel;
instance.inspectLr = inspectLr;
instance.model.SetActive(oldModel.activeSelf);
oldModel.SetActive(false);
oldColour = instance.lr.startColor;
instance.lr.startColor = Color.white;
instance.lr.endColor = Color.white;
}
public void Begone()
{
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
HookArm instance = MonoSingleton<HookArm>.Instance;
instance.model = oldModel;
instance.anim = oldAnim;
instance.hand = oldHand;
instance.hook = oldHook;
instance.hookModel = oldHookModel;
instance.inspectLr = oldInspectLr;
instance.lr.startColor = oldColour;
instance.lr.endColor = oldColour;
Object.Destroy((Object)(object)((Component)this).gameObject);
}
}
[TweakMetadata("Recoil", "waffle.ultrakill.movement.recoil", "Every weapon gives recoil.", "waffle.ultrakill.movement.movement_mod", 1, null, false, false)]
public class Recoil : Tweak
{
public class RecoilPatches
{
[HarmonyPatch(typeof(Revolver), "Shoot")]
[HarmonyPrefix]
private static void AddRevolverRecoil(Revolver __instance, int shotType)
{
if (shotType == 2)
{
float num = __instance.pierceShotCharge / 100f;
AddRecoil(20f * RevolverRecoil * num);
}
else
{
AddRecoil(10f * RevolverRecoil);
}
}
[HarmonyPatch(typeof(Shotgun), "Shoot")]
[HarmonyPrefix]
private static void AddShotgunRecoil(Shotgun __instance)
{
float num = 1 + ((__instance.variation == 1) ? ((__instance.primaryCharge + 1) / 3) : 0);
AddRecoil(15f * num * ShotgunRecoil);
}
[HarmonyPatch(typeof(Shotgun), "ShootSinks")]
[HarmonyPrefix]
private static void AddShotgunCoreRecoil(Shotgun __instance)
{
AddRecoil(10f * (__instance.grenadeForce / 30f * 2f) * ShotgunRecoil);
}
[HarmonyPatch(typeof(Nailgun), "Shoot")]
[HarmonyPrefix]
private static void AddNailRecoil()
{
AddRecoil(0.75f * NailgunRecoil);
}
[HarmonyPatch(typeof(Nailgun), "ShootMagnet")]
[HarmonyPrefix]
private static void AddNailMagnetRecoil()
{
AddRecoil(10f * NailgunRecoil);
}
[HarmonyPatch(typeof(Railcannon), "Shoot")]
[HarmonyPrefix]
private static void AddRailRecoil()
{
AddRecoil(50f * RailcannonRecoil);
}
[HarmonyPatch(typeof(RocketLauncher), "Shoot")]
[HarmonyPrefix]
private static void AddRocketRecoil()
{
AddRecoil(15f * RocketRecoil);
}
[HarmonyPatch(typeof(RocketLauncher), "ShootCannonball")]
[HarmonyPrefix]
private static void AddRocketCannonballRecoil(RocketLauncher __instance)
{
AddRecoil(30f * __instance.cbCharge * RocketRecoil);
}
}
private Harmony harmony = new Harmony("waffle.ultrakill.movement.recoil");
public static float RevolverRecoil;
public static float ShotgunRecoil;
public static float NailgunRecoil;
public static float RailcannonRecoil;
public static float RocketRecoil;
public static float FloorMult;
public static float FlooredMultiplier => MonoSingleton<NewMovement>.Instance.gc.touchingGround ? FloorMult : 1f;
public Recoil()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Expected O, but got Unknown
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Expected O, but got Unknown
//IL_0058: Expected O, but got Unknown
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Expected O, but got Unknown
//IL_0074: 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_0098: Expected O, but got Unknown
//IL_0098: Expected O, but got Unknown
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Expected O, but got Unknown
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Expected O, but got Unknown
//IL_00d8: Expected O, but got Unknown
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Expected O, but got Unknown
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0118: Expected O, but got Unknown
//IL_0118: Expected O, but got Unknown
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
//IL_011d: Expected O, but got Unknown
//IL_0134: 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_0158: Expected O, but got Unknown
//IL_0158: Expected O, but got Unknown
//IL_0153: Unknown result type (might be due to invalid IL or missing references)
//IL_015d: Expected O, but got Unknown
//IL_0174: Unknown result type (might be due to invalid IL or missing references)
//IL_017f: Unknown result type (might be due to invalid IL or missing references)
//IL_0198: Expected O, but got Unknown
//IL_0198: Expected O, but got Unknown
//IL_0193: Unknown result type (might be due to invalid IL or missing references)
//IL_019d: Expected O, but got Unknown
base.Subsettings = new Dictionary<string, Subsetting>
{
{
"rev_recoil",
(Subsetting)new FloatSubsetting((Tweak)(object)this, new Metadata("Revolver", "rev_recoil", "Revolver recoil amount."), (SubsettingUIElement)new SliderFloatSubsettingElement("{0}x", 1), 1f, 2f, 0f)
},
{
"sho_recoil",
(Subsetting)new FloatSubsetting((Tweak)(object)this, new Metadata("Shotgun", "sho_recoil", "Shotgun recoil amount."), (SubsettingUIElement)new SliderFloatSubsettingElement("{0}x", 1), 1f, 2f, 0f)
},
{
"nai_recoil",
(Subsetting)new FloatSubsetting((Tweak)(object)this, new Metadata("Nail", "nai_recoil", "Nailgun recoil amount."), (SubsettingUIElement)new SliderFloatSubsettingElement("{0}x", 1), 1f, 2f, 0f)
},
{
"rai_recoil",
(Subsetting)new FloatSubsetting((Tweak)(object)this, new Metadata("Railcannon", "rai_recoil", "Railcannon recoil amount."), (SubsettingUIElement)new SliderFloatSubsettingElement("{0}x", 1), 1f, 2f, 0f)
},
{
"rock_recoil",
(Subsetting)new FloatSubsetting((Tweak)(object)this, new Metadata("Rocket", "rock_recoil", "Rocket Launcher recoil amount."), (SubsettingUIElement)new SliderFloatSubsettingElement("{0}x", 1), 1f, 2f, 0f)
},
{
"floor_mult",
(Subsetting)new FloatSubsetting((Tweak)(object)this, new Metadata("On Floor", "floor_mult", "On floor recoil multiplier."), (SubsettingUIElement)new SliderFloatSubsettingElement("{0}x", 1), 1f, 2f, 0f)
}
};
}
public static void AddRecoil(float strength)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
MonoSingleton<NewMovement>.Instance.rb.AddForce(strength * -((Component)MonoSingleton<CameraController>.Instance).transform.forward * FlooredMultiplier, (ForceMode)2);
}
public override void OnTweakEnabled()
{
((Tweak)this).OnTweakEnabled();
SetValues();
harmony.PatchAll(typeof(RecoilPatches));
}
public override void OnTweakDisabled()
{
((Tweak)this).OnTweakDisabled();
harmony.UnpatchSelf();
}
public override void OnSubsettingUpdate()
{
SetValues();
}
public void SetValues()
{
RevolverRecoil = base.Subsettings["rev_recoil"].GetValue<float>();
ShotgunRecoil = base.Subsettings["sho_recoil"].GetValue<float>();
NailgunRecoil = base.Subsettings["nai_recoil"].GetValue<float>();
RailcannonRecoil = base.Subsettings["rai_recoil"].GetValue<float>();
RocketRecoil = base.Subsettings["rock_recoil"].GetValue<float>();
FloorMult = base.Subsettings["floor_mult"].GetValue<float>();
}
}
}
namespace System.Runtime.CompilerServices
{
[ExcludeFromCodeCoverage]
[DebuggerNonUserCode]
internal static class IsExternalInit
{
}
}