using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
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("KnuckleTesting")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("KnuckleTesting")]
[assembly: AssemblyCopyright("Copyright © 2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("9407f467-496e-4117-8715-bdfe3bce9f1b")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace ParkourKnuckle;
[BepInPlugin("com.nimius.parkourknuckle", "Parkour Knuckle", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
private Harmony _harmony;
private void Awake()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Expected O, but got Unknown
_harmony = new Harmony("com.nimius.parkourknuckle");
_harmony.PatchAll();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Harmony Patches applied successfully.");
}
}
[HarmonyPatch(typeof(ENT_Player), "Update")]
public class PlayerModifierPatch
{
private static Quaternion targetRotation;
private static bool isRotating = false;
private static float turnSpeed = 24f;
private static float chargeStartTime;
private static bool isCharging;
private static float maxChargeTime = 5f;
private static float leapForceMultiplier = 1.5f;
private static float lastLeapTime = 0f;
private static float leapCooldown = 3f;
private static float minStamina = 1f;
private static float maxStamina = 5f;
private static float upwardArcForce = 1f;
private static bool isHolding = false;
private static bool hasWallRunInAir = false;
private static float tiltLerpSpeed = 4f;
private static float gripValue = 0f;
private static bool isVerticalRun = false;
private static bool hasWallRunVertical = false;
private static float verticalGraceTimer = 0f;
private static float maxGraceTime = 0.2f;
private static bool isVaulting = false;
private static Vector3 vaultTargetPos;
private static float vaultTimer = 0f;
private static float vaultDuration = 0.2f;
[HarmonyPostfix]
public static void Postfix(ENT_Player __instance)
{
//IL_0041: 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_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: 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_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_02be: Unknown result type (might be due to invalid IL or missing references)
//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
//IL_02db: Unknown result type (might be due to invalid IL or missing references)
//IL_02e2: Unknown result type (might be due to invalid IL or missing references)
//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
//IL_04f4: Unknown result type (might be due to invalid IL or missing references)
//IL_0503: Unknown result type (might be due to invalid IL or missing references)
//IL_03e1: Unknown result type (might be due to invalid IL or missing references)
//IL_03e6: Unknown result type (might be due to invalid IL or missing references)
//IL_03eb: Unknown result type (might be due to invalid IL or missing references)
//IL_03f3: Unknown result type (might be due to invalid IL or missing references)
//IL_03f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0412: Unknown result type (might be due to invalid IL or missing references)
//IL_0417: Unknown result type (might be due to invalid IL or missing references)
//IL_0421: Unknown result type (might be due to invalid IL or missing references)
//IL_0426: Unknown result type (might be due to invalid IL or missing references)
//IL_042b: Unknown result type (might be due to invalid IL or missing references)
//IL_0437: Unknown result type (might be due to invalid IL or missing references)
//IL_043e: Unknown result type (might be due to invalid IL or missing references)
//IL_0565: Unknown result type (might be due to invalid IL or missing references)
//IL_0570: Unknown result type (might be due to invalid IL or missing references)
//IL_0575: Unknown result type (might be due to invalid IL or missing references)
//IL_058e: Unknown result type (might be due to invalid IL or missing references)
//IL_0599: Unknown result type (might be due to invalid IL or missing references)
//IL_07bd: Unknown result type (might be due to invalid IL or missing references)
//IL_07cc: Unknown result type (might be due to invalid IL or missing references)
//IL_07d1: Unknown result type (might be due to invalid IL or missing references)
//IL_07df: Unknown result type (might be due to invalid IL or missing references)
//IL_07e4: Unknown result type (might be due to invalid IL or missing references)
//IL_07f1: Unknown result type (might be due to invalid IL or missing references)
//IL_061e: Unknown result type (might be due to invalid IL or missing references)
//IL_0615: Unknown result type (might be due to invalid IL or missing references)
//IL_0825: Unknown result type (might be due to invalid IL or missing references)
//IL_0830: Unknown result type (might be due to invalid IL or missing references)
//IL_0623: Unknown result type (might be due to invalid IL or missing references)
//IL_0625: Unknown result type (might be due to invalid IL or missing references)
//IL_0627: Unknown result type (might be due to invalid IL or missing references)
//IL_062c: Unknown result type (might be due to invalid IL or missing references)
//IL_0631: Unknown result type (might be due to invalid IL or missing references)
//IL_0635: Unknown result type (might be due to invalid IL or missing references)
//IL_063a: Unknown result type (might be due to invalid IL or missing references)
//IL_0642: Unknown result type (might be due to invalid IL or missing references)
//IL_064d: Unknown result type (might be due to invalid IL or missing references)
//IL_0678: Unknown result type (might be due to invalid IL or missing references)
//IL_0680: Unknown result type (might be due to invalid IL or missing references)
//IL_0698: Unknown result type (might be due to invalid IL or missing references)
//IL_069a: Unknown result type (might be due to invalid IL or missing references)
//IL_069f: Unknown result type (might be due to invalid IL or missing references)
//IL_06b4: Unknown result type (might be due to invalid IL or missing references)
//IL_06b6: Unknown result type (might be due to invalid IL or missing references)
//IL_06c7: Unknown result type (might be due to invalid IL or missing references)
//IL_06cc: Unknown result type (might be due to invalid IL or missing references)
//IL_06d1: Unknown result type (might be due to invalid IL or missing references)
//IL_06df: Unknown result type (might be due to invalid IL or missing references)
//IL_06e4: Unknown result type (might be due to invalid IL or missing references)
//IL_06f1: Unknown result type (might be due to invalid IL or missing references)
//IL_06fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0704: Unknown result type (might be due to invalid IL or missing references)
//IL_0714: Unknown result type (might be due to invalid IL or missing references)
//IL_0719: Unknown result type (might be due to invalid IL or missing references)
//IL_0723: Unknown result type (might be due to invalid IL or missing references)
//IL_0728: Unknown result type (might be due to invalid IL or missing references)
//IL_08d8: Unknown result type (might be due to invalid IL or missing references)
//IL_08df: Unknown result type (might be due to invalid IL or missing references)
//IL_08ef: Unknown result type (might be due to invalid IL or missing references)
//IL_08f4: Unknown result type (might be due to invalid IL or missing references)
//IL_08fb: Unknown result type (might be due to invalid IL or missing references)
//IL_090b: Unknown result type (might be due to invalid IL or missing references)
//IL_0910: Unknown result type (might be due to invalid IL or missing references)
//IL_0915: Unknown result type (might be due to invalid IL or missing references)
//IL_0918: Unknown result type (might be due to invalid IL or missing references)
//IL_09b7: Unknown result type (might be due to invalid IL or missing references)
//IL_09bc: Unknown result type (might be due to invalid IL or missing references)
//IL_09c6: Unknown result type (might be due to invalid IL or missing references)
//IL_09d7: Unknown result type (might be due to invalid IL or missing references)
//IL_09dc: Unknown result type (might be due to invalid IL or missing references)
//IL_0a36: Unknown result type (might be due to invalid IL or missing references)
//IL_0a3b: Unknown result type (might be due to invalid IL or missing references)
//IL_0a7e: Unknown result type (might be due to invalid IL or missing references)
//IL_0a83: Unknown result type (might be due to invalid IL or missing references)
//IL_0a8d: Unknown result type (might be due to invalid IL or missing references)
//IL_0a92: Unknown result type (might be due to invalid IL or missing references)
//IL_0a97: Unknown result type (might be due to invalid IL or missing references)
//IL_0a99: Unknown result type (might be due to invalid IL or missing references)
//IL_0aa1: Unknown result type (might be due to invalid IL or missing references)
//IL_0ab2: Unknown result type (might be due to invalid IL or missing references)
//IL_0ab9: Unknown result type (might be due to invalid IL or missing references)
//IL_0abe: Unknown result type (might be due to invalid IL or missing references)
//IL_0ac3: Unknown result type (might be due to invalid IL or missing references)
//IL_0acf: Unknown result type (might be due to invalid IL or missing references)
//IL_0ad4: Unknown result type (might be due to invalid IL or missing references)
//IL_0af2: Unknown result type (might be due to invalid IL or missing references)
//IL_0af7: Unknown result type (might be due to invalid IL or missing references)
//IL_0b01: Unknown result type (might be due to invalid IL or missing references)
//IL_0b06: Unknown result type (might be due to invalid IL or missing references)
//IL_0b10: Unknown result type (might be due to invalid IL or missing references)
//IL_0ca5: Unknown result type (might be due to invalid IL or missing references)
//IL_0caa: Unknown result type (might be due to invalid IL or missing references)
//IL_0cb7: Unknown result type (might be due to invalid IL or missing references)
//IL_0cc2: Unknown result type (might be due to invalid IL or missing references)
//IL_0ccc: Unknown result type (might be due to invalid IL or missing references)
//IL_0cdc: Unknown result type (might be due to invalid IL or missing references)
//IL_0ce1: Unknown result type (might be due to invalid IL or missing references)
//IL_0ce4: Unknown result type (might be due to invalid IL or missing references)
//IL_0b57: Unknown result type (might be due to invalid IL or missing references)
//IL_0b5f: Unknown result type (might be due to invalid IL or missing references)
//IL_0b7b: Unknown result type (might be due to invalid IL or missing references)
//IL_0b83: Unknown result type (might be due to invalid IL or missing references)
//IL_0b8d: Unknown result type (might be due to invalid IL or missing references)
//IL_0b92: Unknown result type (might be due to invalid IL or missing references)
//IL_0b97: Unknown result type (might be due to invalid IL or missing references)
//IL_0b99: Unknown result type (might be due to invalid IL or missing references)
//IL_0b9b: Unknown result type (might be due to invalid IL or missing references)
//IL_0bb8: Unknown result type (might be due to invalid IL or missing references)
//IL_0bbd: Unknown result type (might be due to invalid IL or missing references)
//IL_0bc7: Unknown result type (might be due to invalid IL or missing references)
//IL_0bcc: Unknown result type (might be due to invalid IL or missing references)
//IL_0bd1: Unknown result type (might be due to invalid IL or missing references)
//IL_0bd3: Unknown result type (might be due to invalid IL or missing references)
//IL_0bdb: Unknown result type (might be due to invalid IL or missing references)
//IL_0be0: Unknown result type (might be due to invalid IL or missing references)
//IL_0c14: Unknown result type (might be due to invalid IL or missing references)
//IL_0c19: Unknown result type (might be due to invalid IL or missing references)
//IL_0c23: Unknown result type (might be due to invalid IL or missing references)
//IL_0c28: Unknown result type (might be due to invalid IL or missing references)
//IL_0c32: Unknown result type (might be due to invalid IL or missing references)
//IL_0c4f: Unknown result type (might be due to invalid IL or missing references)
//IL_0c54: Unknown result type (might be due to invalid IL or missing references)
//IL_0c5e: Unknown result type (might be due to invalid IL or missing references)
//IL_0c63: Unknown result type (might be due to invalid IL or missing references)
//IL_0c68: Unknown result type (might be due to invalid IL or missing references)
bool flag = Time.time < lastLeapTime + leapCooldown;
CharacterController component = ((Component)__instance).GetComponent<CharacterController>();
bool isGrounded = component.isGrounded;
if (Input.GetKeyUp((KeyCode)120) && !flag)
{
targetRotation = ((Component)__instance).transform.rotation * Quaternion.Euler(0f, 180f, 0f);
isRotating = true;
}
if (isRotating)
{
((Component)__instance).transform.rotation = Quaternion.Slerp(((Component)__instance).transform.rotation, targetRotation, Time.deltaTime * turnSpeed);
if (Quaternion.Angle(((Component)__instance).transform.rotation, targetRotation) < 0.5f)
{
isRotating = false;
}
}
if (Input.GetKeyDown((KeyCode)103))
{
Hand[] hands = __instance.hands;
foreach (Hand val in hands)
{
if ((Object)(object)val.handhold != (Object)null && val.handhold.GetHolding())
{
isHolding = true;
break;
}
}
if (isGrounded || isHolding)
{
bool flag2 = true;
Hand[] hands2 = __instance.hands;
foreach (Hand val2 in hands2)
{
if (val2.gripStrength < minStamina)
{
flag2 = false;
}
}
if (flag2)
{
chargeStartTime = Time.time;
isCharging = true;
}
}
}
if (isCharging && Input.GetKey((KeyCode)103) && (isGrounded || isHolding))
{
float num = Mathf.Min(Time.time - chargeStartTime, maxChargeTime);
CL_CameraControl.Shake(num * 0.001f);
Hand[] hands3 = __instance.hands;
foreach (Hand val3 in hands3)
{
val3.ShakeHand(num * 0.001f);
}
}
if (!isGrounded && !isHolding)
{
isCharging = false;
}
if (Input.GetKeyUp((KeyCode)103) && isCharging)
{
float num2 = Mathf.Min(Time.time - chargeStartTime, maxChargeTime);
float num3 = Mathf.Min(Time.time - chargeStartTime, maxChargeTime);
float num4 = num3 * leapForceMultiplier;
float num5 = Mathf.CeilToInt(Mathf.Lerp(minStamina, maxStamina, num3 / maxChargeTime));
Vector3 val4 = ((Component)__instance.cam).transform.forward + Vector3.up * upwardArcForce;
Vector3 directionalForce = ((Vector3)(ref val4)).normalized * num4;
((GameEntity)__instance).SetDirectionalForce(directionalForce);
Hand[] hands4 = __instance.hands;
foreach (Hand val5 in hands4)
{
val5.gripStrength -= num5;
if (val5.gripStrength < 0f)
{
val5.gripStrength = 0f;
}
if (val5.IsHolding())
{
val5.DropHand(true);
}
}
isCharging = false;
}
if (Input.GetKeyDown((KeyCode)32) && Input.GetKey((KeyCode)115))
{
bool flag3 = true;
Hand[] hands5 = __instance.hands;
foreach (Hand val6 in hands5)
{
if (val6.gripStrength < 1f)
{
flag3 = false;
}
}
if (!isHolding && flag3)
{
Vector3 val7 = -((Component)__instance).transform.forward;
RaycastHit val8 = default(RaycastHit);
if (Physics.Raycast(((Component)__instance).transform.position, val7, ref val8, 1.2f))
{
Vector3 val9 = ((RaycastHit)(ref val8)).normal + Vector3.up * 1.2f;
float num6 = 1.5f;
((GameEntity)__instance).SetDirectionalForce(((Vector3)(ref val9)).normalized * num6);
CL_CameraControl.Shake(0.03f);
Hand[] hands6 = __instance.hands;
foreach (Hand val10 in hands6)
{
val10.gripStrength -= 1f;
if (val10.gripStrength < 0f)
{
val10.gripStrength = 0f;
}
}
}
}
}
if (isGrounded && !isVerticalRun)
{
isVerticalRun = false;
hasWallRunInAir = false;
hasWallRunVertical = false;
((Collider)component).enabled = true;
((Component)__instance).transform.rotation = Quaternion.Euler(0f, ((Component)__instance).transform.eulerAngles.y, 0f);
}
bool flag4 = true;
Hand[] hands7 = __instance.hands;
foreach (Hand val11 in hands7)
{
gripValue = val11.gripStrength;
if (val11.gripStrength <= 0f)
{
flag4 = false;
}
}
RaycastHit val12 = default(RaycastHit);
bool flag5 = Physics.Raycast(((Component)__instance).transform.position, -((Component)__instance).transform.right, ref val12, 1.2f);
RaycastHit val13 = default(RaycastHit);
bool flag6 = Physics.Raycast(((Component)__instance).transform.position, ((Component)__instance).transform.right, ref val13, 1.2f);
bool flag7 = Input.GetKey((KeyCode)32) && !Input.GetKey((KeyCode)119) && (Input.GetKey((KeyCode)97) || Input.GetKey((KeyCode)100));
if (!isGrounded && !hasWallRunInAir && flag7 && (flag5 || flag6))
{
if (flag4)
{
((Collider)component).enabled = false;
Vector3 val14 = (flag5 ? ((RaycastHit)(ref val12)).normal : ((RaycastHit)(ref val13)).normal);
Vector3 val15 = Vector3.Cross(val14, Vector3.up);
Vector3 val16 = ((Vector3)(ref val15)).normalized;
RaycastHit val17 = default(RaycastHit);
if (Physics.Raycast(((Component)__instance).transform.position, ((Component)__instance).transform.forward, ref val17, 1.2f))
{
hasWallRunInAir = true;
((Collider)component).enabled = true;
return;
}
if (Vector3.Dot(val16, ((Component)__instance).transform.forward) < 0f)
{
val16 = -val16;
}
float num8 = (flag5 ? (-15f) : 15f);
Quaternion val18 = Quaternion.LookRotation(val16) * Quaternion.Euler(0f, 0f, num8);
((Component)__instance).transform.rotation = Quaternion.Slerp(((Component)__instance).transform.rotation, val18, Time.deltaTime * tiltLerpSpeed);
((GameEntity)__instance).SetDirectionalForce(val16 * 0.8f * (gripValue * 0.1f) + Vector3.up * 0.1f);
CL_CameraControl.Shake(0.005f);
Hand[] hands8 = __instance.hands;
foreach (Hand val19 in hands8)
{
val19.gripStrength -= 0.075f;
if (val19.gripStrength < 0f)
{
val19.gripStrength = 0f;
}
}
}
else
{
hasWallRunInAir = true;
((Collider)component).enabled = true;
}
}
else
{
Quaternion val20 = Quaternion.Euler(0f, ((Component)__instance).transform.eulerAngles.y, 0f);
((Component)__instance).transform.rotation = Quaternion.Slerp(((Component)__instance).transform.rotation, val20, Time.deltaTime * tiltLerpSpeed);
if (!isGrounded && ((Collider)component).enabled)
{
hasWallRunInAir = true;
}
((Collider)component).enabled = true;
}
RaycastHit val21 = default(RaycastHit);
bool flag8 = Physics.Raycast(((Component)__instance).transform.position, ((Component)__instance).transform.forward, ref val21, 1.2f);
bool flag9 = Input.GetKey((KeyCode)32) && Input.GetKey((KeyCode)119);
if (isVerticalRun)
{
if (flag9)
{
verticalGraceTimer = 0f;
}
else
{
verticalGraceTimer += Time.deltaTime;
}
}
if (isVerticalRun && !Input.GetKey((KeyCode)119) && Input.GetKeyDown((KeyCode)32) && verticalGraceTimer > 0f && verticalGraceTimer < maxGraceTime)
{
float num10 = 1.5f;
float num11 = 1.5f;
Vector3 directionalForce2 = ((RaycastHit)(ref val21)).normal * num10 * (gripValue * 0.1f) + Vector3.up * num11 * (gripValue * 0.1f);
((GameEntity)__instance).SetDirectionalForce(directionalForce2);
isVerticalRun = false;
verticalGraceTimer = 0f;
hasWallRunVertical = true;
((Collider)component).enabled = true;
return;
}
if (isVerticalRun && verticalGraceTimer >= maxGraceTime)
{
isVerticalRun = false;
hasWallRunVertical = true;
((Collider)component).enabled = true;
verticalGraceTimer = 0f;
}
if (isVaulting)
{
vaultTimer += Time.deltaTime;
float num12 = vaultTimer / vaultDuration;
((Component)__instance).transform.position = Vector3.Lerp(((Component)__instance).transform.position, vaultTargetPos, 2f);
if (Vector3.Distance(((Component)__instance).transform.position, vaultTargetPos) < 0.1f)
{
isVaulting = false;
((Collider)component).enabled = true;
}
return;
}
if (flag9 && !hasWallRunVertical && flag8 && (isGrounded || isVerticalRun))
{
float num13 = Vector3.Angle(((RaycastHit)(ref val21)).normal, Vector3.up);
if (flag4 && num13 > 80f && num13 < 100f)
{
isVerticalRun = true;
((Collider)component).enabled = false;
Vector3 val22 = ((Component)__instance).transform.position + Vector3.up * 1.5f;
bool flag10 = Physics.Raycast(val22, ((Component)__instance).transform.forward, 0.25f);
Quaternion val23 = Quaternion.LookRotation(Vector3.up, ((RaycastHit)(ref val21)).normal);
RaycastHit val24 = default(RaycastHit);
if (flag10 && Quaternion.Angle(((Component)__instance).transform.rotation, val23) < 25f && Physics.SphereCast(((Component)__instance).transform.position + Vector3.up * 1f, 0.3f, Vector3.up, ref val24, 0.7f))
{
isVaulting = false;
hasWallRunVertical = true;
isVerticalRun = false;
((Collider)component).enabled = true;
return;
}
if (!flag10 && !Physics.Raycast(val22, ((Component)__instance).transform.forward, 1f))
{
Vector3 val25 = val22 + ((Component)__instance).transform.forward * 1f;
RaycastHit val26 = default(RaycastHit);
if (Physics.Raycast(val25, Vector3.down, ref val26, 2f))
{
Vector3 val27 = ((RaycastHit)(ref val26)).point + Vector3.up * 0.5f;
RaycastHit val28 = default(RaycastHit);
if (Physics.Raycast(val27, -((Component)__instance).transform.forward, ref val28, 1.5f) && ((RaycastHit)(ref val28)).distance < 0.2f)
{
return;
}
RaycastHit val29 = default(RaycastHit);
if (!Physics.SphereCast(((RaycastHit)(ref val26)).point + Vector3.up * 0.1f, 0.3f, Vector3.up, ref val29, 1.8f))
{
vaultTargetPos = ((RaycastHit)(ref val26)).point + Vector3.up * 1.1f;
isVaulting = true;
vaultTimer = 0f;
isVerticalRun = false;
hasWallRunVertical = true;
((Collider)component).enabled = false;
return;
}
}
}
((Component)__instance).transform.rotation = Quaternion.Slerp(((Component)__instance).transform.rotation, val23, Time.deltaTime * 10f);
Vector3 directionalForce3 = Vector3.up * 0.4f * (gripValue * 0.15f);
((GameEntity)__instance).SetDirectionalForce(directionalForce3);
CL_CameraControl.Shake(0.008f);
Hand[] hands9 = __instance.hands;
foreach (Hand val30 in hands9)
{
val30.gripStrength -= 0.09f;
if (val30.gripStrength < 0f)
{
val30.gripStrength = 0f;
}
}
return;
}
}
if (!isGrounded && !isVerticalRun && !isVaulting && verticalGraceTimer <= 0f && ((Collider)component).enabled)
{
hasWallRunVertical = true;
}
}
}