cool parkour animation
Key RequiredUniversal

cool parkour animation

Universal ScriptTEsttTEstt 11.2K views 383 executesUpdated Mar 13, 2025
2.5/ 5(2 votes)
1150% Positive
Lua Script•1677 lines (52064 chars)
local player = game:service("Players").LocalPlayer
local mouse = player:GetMouse()
local cam = workspace.CurrentCamera
local char = player.Character
local Torsoz = char:findFirstChild("Torso")
local RA = char:findFirstChild("Right Arm")
local LA = char:findFirstChild("Left Arm")
local RL = char:findFirstChild("Right Leg")
local LL = char:findFirstChild("Left Leg")
local H = char:findFirstChild("Head")
local Hu = char:findFirstChild("Humanoid")
local RS = Torsoz:findFirstChild("Right Shoulder")
local LS = Torsoz:findFirstChild("Left Shoulder")
local RH = Torsoz:findFirstChild("Right Hip")
local LH = Torsoz:findFirstChild("Left Hip")
local N = Torsoz:findFirstChild("Neck")
local NV = Vector3.new(0,0,0)
local FOV = 70
local Shift, Space, Sitting = false,false,false
local GravPoint = 0
local Diving = false
local DivingCooldown = 0
local DivingDir = NV
local DivingCF = CFrame.new(0,0,0)
local DivingBG, DivingBV
local HWallRunning = false
local HWRGravDrop = false
local HWRLastPart
local HWRCooldown = 0
local HWRDir
local VWallRunning = false
local VWRLastPart
local VWRCooldown = 0
local VWRLeft,VWRRight = false,false
local Sliding = false
local SlideCooldown = 0
local Standing = true
local Action = "Standing"
local animplus = true
local animspeed = 0
local animangle = 0.01
local Joint1, Joint2, Joint3, Joint4, Joint5
 
for i, v in pairs(char:children()) do
if (v.className == "LocalScript" and v.Name == "ParkourSkrip") or v.className == "NumberValue" or v.className == "BoolValue" or v.className == "Model" or v.Name == "Animate" then
v:remove()
end
end
 
local loadids = {112474909, 112474911, 112474909}
 
local stamina = 10000
local maxstamina = 10000
local defsprint = 28
local sprint = defsprint  
 
local pause = Instance.new("BoolValue", char)
pause.Name = "Pause"
pause.Value = false
local flow = Instance.new("NumberValue", char)
flow.Name = "Flow"
flow.Value = 0
local flowcooldown = 0
 
local m = Instance.new("Model", char)
m.Name = "FlowChainPartz"
 
local P = Instance.new("Part")
P.Name = "TrailPart"
P.formFactor = "Custom"
P.Size = Vector3.new(0.2,0.2,0.2)
P.Locked = true
P.Anchored = true
P.CanCollide = false
P.TopSurface = 0
P.BottomSurface = 0
 
script.Name = "ParkourSkrip"
 
local hue = 0
 
function HSV(H,S,V)
H = H % 360
local C = V * S
local H2 = H/60
local X = C * (1 - math.abs((H2 %2) -1))
local color = Color3.new(0,0,0)
if H2 <= 0 then
color = Color3.new(C,0,0)
elseif 0 <= H2 and H2 <= 1 then
color = Color3.new(C,X,0)
elseif 1 <= H2 and H2 <= 2 then
color = Color3.new(X,C,0)
elseif 2 <= H2 and H2 <= 3 then
color = Color3.new(0,C,X)
elseif 3 <= H2 and H2 <= 4 then
color = Color3.new(0,X,C)
elseif 4 <= H2 and H2 <= 5 then
color = Color3.new(X,0,C)
elseif 5 <= H2 and H2 <= 6 then
color = Color3.new(C,0,X)
end
local m = V - C
return Color3.new(color.r + m, color.g + m, color.b + m)
end
 
function GetWeld(weld)
if weld:findFirstChild("XAngle") == nil then
local a = Instance.new("NumberValue", weld)
a.Name = "XAngle"
end
if weld:findFirstChild("YAngle") == nil then
local a = Instance.new("NumberValue", weld)
a.Name = "YAngle"
end
if weld:findFirstChild("ZAngle") == nil then
local a = Instance.new("NumberValue", weld)
a.Name = "ZAngle"
end
return weld.C0.p, Vector3.new(weld.XAngle.Value, weld.YAngle.Value, weld.ZAngle.Value)
end
 
function SetWeld(weld, i, loops, origpos,origangle, nextpos,nextangle)
if weld:findFirstChild("XAngle") == nil then
local a = Instance.new("NumberValue", weld)
a.Name = "XAngle"
end
if weld:findFirstChild("YAngle") == nil then
local a = Instance.new("NumberValue", weld)
a.Name = "YAngle"
end
if weld:findFirstChild("ZAngle") == nil then
local a = Instance.new("NumberValue", weld)
a.Name = "ZAngle"
end
 
local tox,toy,toz = 0,0,0
if origangle.x > nextangle.x then
tox = -math.abs(origangle.x - nextangle.x) /loops*i
else
tox = math.abs(origangle.x - nextangle.x) /loops*i
end
if origangle.y > nextangle.y then
toy = -math.abs(origangle.y - nextangle.y) /loops*i
else
toy = math.abs(origangle.y - nextangle.y) /loops*i
end
if origangle.z > nextangle.z then
toz = -math.abs(origangle.z - nextangle.z) /loops*i
else
toz = math.abs(origangle.z - nextangle.z) /loops*i
end
 
local tox2,toy2,toz2 = 0,0,0
if origpos.x > nextpos.x then
tox2 = -math.abs(origpos.x - nextpos.x) /loops*i
else
tox2 = math.abs(origpos.x - nextpos.x) /loops*i
end
if origpos.y > nextpos.y then
toy2 = -math.abs(origpos.y - nextpos.y) /loops*i
else
toy2 = math.abs(origpos.y - nextpos.y) /loops*i
end
if origpos.z > nextpos.z then
toz2 = -math.abs(origpos.z - nextpos.z) /loops*i
else
toz2 = math.abs(origpos.z - nextpos.z) /loops*i
end
 
weld.XAngle.Value = origangle.x + tox
weld.YAngle.Value = origangle.y + toy
weld.ZAngle.Value = origangle.z + toz
weld.C0 = CFrame.new(origpos.x + tox2,origpos.y + toy2,origpos.z + toz2) * CFrame.Angles(origangle.x + tox,origangle.y + toy,origangle.z + toz)
end
 
function LoadTextures()
local pls = game:service("ContentProvider")
for i, v in pairs(loadids) do
pls:Preload("http://www.roblox.com/asset/?id="..v)
wait(0.04)
end
end
LoadTextures()
 
function CreateGui()
for i, v in pairs(player.PlayerGui:children()) do
if v.className == "ScreenGui" and v.Name == "staminaGui" then
v:remove()
end
end
local g = Instance.new("ScreenGui", player.PlayerGui)
g.Name = "staminaGui"
 
local c = Instance.new("Frame", g)
c.Visible = false
c.Size = UDim2.new(0,86,0,320)
c.BackgroundTransparency = 1
c.Position = UDim2.new(1,-96,0.5,-160)
c.Name = "Container"
 
local t = Instance.new("TextLabel", c)
t.Size = UDim2.new(0,0,-0.1,0)
t.Position = UDim2.new(0.3,0,0.5,0)
t.TextXAlignment = "Right"
t.Font = "ArialBold"
t.TextTransparency = 0.1
t.TextColor3 = Color3.new(0,0.6,0.8)
t.TextStrokeColor3 = Color3.new(0,0.2,0.8)
t.TextStrokeTransparency = 0.3
t.FontSize = 6
t.BackgroundTransparency = 1
local t2 = t:Clone()
t2.Parent = c
t2.Size = UDim2.new(0,0,0.1,0)
local l = t:Clone()
l.Parent = c
l.Size = UDim2.new(0,0,0,0)
l.Text = "-----"
 
local f1 = Instance.new("Frame", c)
f1.Name = "Backing"
f1.ClipsDescendants = true
f1.Size = UDim2.new(1,0,0,0)
f1.BackgroundColor3 = Color3.new(0.8,0,0)
f1.BackgroundTransparency = 1
local f1img = Instance.new("ImageLabel", f1)
f1img.BackgroundTransparency = 1
f1img.Image = "http://www.roblox.com/asset/?id=112474909"
f1img.Size = UDim2.new(1,0,0,c.Size.Y.Offset)
 
local f2 = Instance.new("Frame", c)
f2.Name = "Overlay"
f2.ClipsDescendants = true
f2.Size = UDim2.new(1,0,1,0)
f2.BackgroundColor3 = Color3.new(0,0,0.8)
f2.BackgroundTransparency = 1
local f2img = Instance.new("ImageLabel", f2)
f2img.BackgroundTransparency = 1
f2img.Image = "http://www.roblox.com/asset/?id=112474911"
f2img.Size = UDim2.new(1,0,0,c.Size.Y.Offset)
 
function Calculate()
local ysize = c.Size.Y.Offset
local per = (stamina/maxstamina) * c.Size.Y.Offset
local rem = (-(stamina/maxstamina-1)) * c.Size.Y.Offset
f1.Size = UDim2.new(1,0,0,rem)
f2.Size = UDim2.new(1,0,0,per)
f2.Position = UDim2.new(0,0,0,rem)
f2img.Position = UDim2.new(0,0,0,-rem)
t.Text = math.floor(stamina)
t2.Text = maxstamina
end
Calculate()
 
wait(0.01)
c.Visible = true
end
CreateGui()
 
player.CharacterAdded:connect(function()
char = player.Character
Torsoz = char:findFirstChild("Torso")
RA = char:findFirstChild("Right Arm")
LA = char:findFirstChild("Left Arm")
RL = char:findFirstChild("Right Leg")
LL = char:findFirstChild("Left Leg")
H = char:findFirstChild("Head")
Hu = char:findFirstChild("Humanoid")
RS = Torsoz:findFirstChild("Right Shoulder")
LS = Torsoz:findFirstChild("Left Shoulder")
RH = Torsoz:findFirstChild("Right Hip")
LH = Torsoz:findFirstChild("Left Hip")
N = Torsoz:findFirstChild("Neck")
stamina = maxstamina
CreateGui()
end)
 
function RAY(pos, dir, startpos, endpos, distleft, collidedlist)
collidedlist = collidedlist or {char}
startpos = startpos or pos
distleft = distleft or dir.unit * dir.magnitude
endpos = endpos or pos + distleft
local ray = Ray.new(pos, distleft)
local hitz,enz = workspace:FindPartOnRayWithIgnoreList(ray, collidedlist)
--[[
local p = P:Clone()
p.Parent = char
p.Size = Vector3.new(0.4,0.4,0.4)
p.BrickColor = BrickColor.new("Lime green")
p.CanCollide = false
p.CFrame = CFrame.new(enz)
p.Transparency = 0.3
]]
if hitz ~= nil then
if hitz.CanCollide == false then
table.insert(collidedlist, hitz)
local newpos = enz
local newdistleft = distleft - (dir.unit * (pos - newpos).magnitude)
if newdistleft ~= NV then
return RAY(newpos-(dir*0.01), dir, startpos, endpos, newdistleft+(dir*0.01), collidedlist)
end
end
end
 
return hitz, enz, ray
end
 
function Sit()
Standing = false
local hitz,enz = RAY(Torsoz.Position, Vector3.new(0,-4.1,0))
local tordir = Vector3.new(Torsoz.CFrame.lookVector.x,0,Torsoz.CFrame.lookVector.z)
if (hitz ~= nil and hitz.CanCollide == true) then
local cf = CFrame.new(enz+Vector3.new(0,1.28,0), enz+Vector3.new(0,1.28,0)+tordir) * CFrame.Angles(math.pi/6,0,0)
local hitz2,enz2 = RAY(enz+Vector3.new(0,2.25,0), tordir*-2.2)
Hu.PlatformStand = true
Torsoz.CFrame = cf
local bp = Instance.new("BodyPosition", Torsoz)
bp.Name = "StaminaBodyObject"
bp.maxForce = Vector3.new(1/0,1/0,1/0)
bp.D = 100
bp.position = cf.p
local bg = Instance.new("BodyGyro", Torsoz)
bg.Name = "StaminaBodyObject"
bg.maxTorque = Vector3.new(1/0,1/0,1/0)
bg.cframe = cf
bg.D = 100
SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.34,-1,0.2), Vector3.new((math.pi/2)-(math.pi/6),0,math.pi/8))
SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.34,-1,0.2), Vector3.new((math.pi/2)-(math.pi/6),0,-math.pi/8))
 
if hitz2 ~= nil and hitz2.CanCollide == true then
Joint3.C0 = CFrame.new(0.9,0.4,-0.45) * CFrame.Angles(0,math.pi/2.13,0) * CFrame.Angles(math.pi/2.3,0,0)
Joint4.C0 = CFrame.new(-0.9,0.4,-0.4) * CFrame.Angles(0,-math.pi/2.05,0) * CFrame.Angles(math.pi/2.3,0,0)
Joint5.C0 = CFrame.new(0,1,0) * CFrame.Angles(-math.pi/8.8,0,0)
else
SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.4,0.4,0.1), Vector3.new(-(math.pi/6)-(math.pi/10),0,math.pi/9))
SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.4,0.4,0.1), Vector3.new(-(math.pi/6)-(math.pi/10),0,-math.pi/9))
SetWeld(Joint5,1,1, NV,NV, Vector3.new(0,1,0), Vector3.new(-math.pi/12,0,0))
end
 
Sitting = true
Action = "Sitting"
end
end
 
 
function Stand()
Hu.PlatformStand = false
if Sitting == true then
local tordir = Torsoz.Position + (Torsoz.CFrame.lookVector*10000)
local cf = CFrame.new(Torsoz.Position + Vector3.new(0,1.8,0), Vector3.new(tordir.x,Torsoz.Position.y,tordir.z))
Torsoz.CFrame = cf
end
for i, v in pairs(Torsoz:children()) do
if v.Name == "StaminaBodyObject" then
v:remove()
end
end
RH.Part0 = nil
LH.Part0 = nil
RS.Part0 = nil
LS.Part0 = nil
Joint1.Part0 = Torsoz
Joint1.Part1 = RL
Joint1.C0 = CFrame.new(0.5,-1,0)
Joint1.C1 = CFrame.new(0,1,0)
Joint2.Part0 = Torsoz
Joint2.Part1 = LL
Joint2.C0 = CFrame.new(-0.5,-1,0)
Joint2.C1 = CFrame.new(0,1,0)
Joint3.Part0 = Torsoz
Joint3.Part1 = RA
Joint3.C0 = CFrame.new(1.5,0.5,0)
Joint3.C1 = CFrame.new(0,0.5,0)
Joint4.Part0 = Torsoz
Joint4.Part1 = LA
Joint4.C0 = CFrame.new(-1.5,0.5,0)
Joint4.C1 = CFrame.new(0,0.5,0)
Joint5.Part0 = Torsoz
Joint5.Part1 = H
Joint5.C0 = CFrame.new(0,1,0)
Joint5.C1 = CFrame.new(0,-0.5,0)
Sitting = false
Diving = false
Standing = true
Action = "Standing"
end
 
--------------------------------------- Dive ----------------------------------
 
function Dive()
stamina = stamina - 10
flow.Value = flow.Value + 10
if flow.Value > 100 then
flow.Value = 100
end
Standing = false
local dir = Vector3.new(Torsoz.CFrame.lookVector.x,0,Torsoz.CFrame.lookVector.z)
GravPoint = 18
DivingDir = dir
local cf = CFrame.new(Torsoz.Position, dir+Vector3.new(0,Torsoz.Position.y,0))
DivingCF = cf
DivingDir = dir
Hu.PlatformStand = true
local bv = Instance.new("BodyVelocity", Torsoz)
bv.Name = "StaminaBodyObject"
bv.maxForce = Vector3.new(1/0,1/0,1/0)
bv.velocity = Vector3.new(DivingDir.x*24,GravPoint,DivingDir.z*24)
DivingBV = bv
local bg = Instance.new("BodyGyro", Torsoz)
bg.Name = "StaminaBodyObject"
bg.maxTorque = Vector3.new(1/0,1/0,1/0)
bg.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+bv.velocity) * CFrame.Angles(-math.pi/2,0,0)
bg.D = 100
DivingBG = bg
 
local joint = Joint3
joint.C1 = CFrame.new(0,0.5,0)
local joint2 = Joint4
joint2.C1 = CFrame.new(0,0.5,0)
local joint3 = Joint1
joint3.C1 = CFrame.new(0,1,0)
local joint4 = Joint2
joint4.C1 = CFrame.new(0,1,0)
 
local joint5 = Joint5
 
Diving = true
Action = "Diving"
 
for i = 1, 8 do
SetWeld(joint,i,8, Vector3.new(1.5,0.5,0), NV, Vector3.new(1.45,0.5,0.1), Vector3.new(-0.2,-math.pi/9,math.pi/13))
SetWeld(joint2,i,8, Vector3.new(-1.5,0.5,0), NV, Vector3.new(-1.45,0.5,0.1), Vector3.new(-0.2,math.pi/9,-math.pi/13))
SetWeld(joint3,i,8, Vector3.new(0.5,-1,0), NV, Vector3.new(0.5,-1,0.03), Vector3.new(-0.2,-math.pi/10,math.pi/14))
SetWeld(joint4,i,8, Vector3.new(-0.5,-1,0), NV, Vector3.new(-0.5,-1,0.03), Vector3.new(-0.2,math.pi/10,-math.pi/14))
SetWeld(joint5,i,8, Vector3.new(0,1,0), NV, Vector3.new(0,1,0), Vector3.new(0.45,0,0))
wait(0.025)
end
 
local counter = 0
while Diving == true do
counter = counter + 1
bg.Parent = Torsoz
local hitz, enz = RAY(Torsoz.Position, bv.velocity.unit*4.6)
if hitz ~= nil and hitz.CanCollide == true then
local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-4,0))
if hitz2 ~= nil then
Diving = "Rolling"
Action = "DiveRolling"
else
Torsoz.CFrame = Torsoz.CFrame * CFrame.new(0,-0.3,0)
Torsoz.Velocity = NV
flow.Value = 0
break
end
end
if counter > 190 then
break
end
wait(0.02)
end
 
bv.velocity = (dir*20) + Vector3.new(0,-0.5,0)
 
local bgcf = bg.cframe
local haslanded = false
local count = 0
 
while haslanded == false do
bg.cframe = bgcf * CFrame.Angles(-0.3*count,0,0)
local hitz, enz = RAY(Torsoz.Position, ((Torsoz.CFrame*CFrame.new(0,-1,0)).p - Torsoz.CFrame.p).unit*1.6)
if hitz ~= nil and hitz.CanCollide == true then
haslanded = true
end
local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-3.8,0))
if hitz2 == nil then
Torsoz.Velocity = NV
break
elseif haslanded == true then
local bp = Instance.new("BodyPosition", Torsoz)
bp.Name = "StaminaJumpFix"
bp.maxForce = Vector3.new(0,1/0,0)
bp.P = 7000
bp.position = enz2 + Vector3.new(0,2.8,0)
game:service("Debris"):AddItem(bp, 0.3)
else
bv.velocity = (dir*20) + Vector3.new(0,-(Torsoz.Position - enz2).magnitude*3,0)
 
end
count = count + 1
if count <= 6 then
local i = count
local j1,j1a = GetWeld(joint)
local j2,j2a = GetWeld(joint2)
local j3,j3a = GetWeld(joint3)
local j4,j4a = GetWeld(joint4)
local j5,j5a = GetWeld(joint5)
SetWeld(joint,i,6, j1,j1a, Vector3.new(1.35,0.5,-0.2), Vector3.new(math.pi/2.6,0,-math.pi/5.8))
SetWeld(joint2,i,6, j2,j2a, Vector3.new(-1.35,0.5,-0.2), Vector3.new(math.pi/2.6,0,math.pi/5.8))
SetWeld(joint3,i,6, j3,j3a, Vector3.new(0.51,0.4,-0.6), Vector3.new(-0.1,0,0.05))
SetWeld(joint4,i,6, j4,j4a, Vector3.new(-0.51,0.4,-0.6), Vector3.new(-0.1,0,-0.05))
SetWeld(joint5,i,6, j5,j5a, Vector3.new(0,1,0), Vector3.new(-0.4,0,0))
elseif count >= 50 then
break
end
wait(0.02)
end
 
Torsoz.Velocity = NV
 
Stand()
DivingCooldown = 9
end
 
function FindSurface(part, position)
local obj = part.CFrame:pointToObjectSpace(position)
local siz = part.Size/2
for i,v in pairs(Enum.NormalId:GetEnumItems()) do
local vec = Vector3.FromNormalId(v)
local wvec = part.CFrame:vectorToWorldSpace(vec)
local vz = (obj)/(siz*vec)
if (math.abs(vz.X-1) < 0.01 or math.abs(vz.Y-1) < 0.01 or math.abs(vz.Z-1) < 0.01) then
return wvec,vec
end
end
if part.className == "WedgePart" then
return part.CFrame:vectorToWorldSpace(Vector3.new(0,0.707,-0.707)), Vector3.new(0,0.707,-0.707)
end
end
 
function HWallRun(part, pos, side)
if (part.className == "Part" and part.Shape == Enum.PartType.Block) or part.className ~= "Part" then
flow.Value = flow.Value + 9
Standing = false
HWallRunning = true
Action = "HWallRunning"
GravPoint = 10
HWRLastPart = part
local dir, dirc = FindSurface(part, pos)
towall = -dir
dir = (CFrame.new(NV, dir) * CFrame.Angles(0,side,0)).lookVector
 
local bv = Instance.new("BodyVelocity", Torsoz)
bv.Name = "StaminaBodyObject"
bv.maxForce = Vector3.new(1/0,1/0,1/0)
bv.P = 9000
bv.velocity = (dir*(sprint-0.5)) + Vector3.new(0,GravPoint,0)
local bg = Instance.new("BodyGyro", Torsoz)
bg.Name = "StaminaBodyObject"
bg.maxTorque = Vector3.new(1/0,1/0,1/0)
bg.cframe = CFrame.new(Torsoz.Position+(towall*-2), Torsoz.Position) * CFrame.Angles(0,-side,-side/4.2)
bg.D = 100
 
local sid = Instance.new("Snap")
 
local joint1 = Joint3
if side == -math.pi/2 then
SetWeld(joint1,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new(math.pi/1.3,0.1,math.pi/2.5))
else
sid = joint1
SetWeld(joint1,1,1, NV,NV, Vector3.new(1.4,0.6,0), Vector3.new(-math.pi/12,0,math.pi/7))
end
local j1c0 = joint1.C0
 
local joint2 = Joint4
if side == math.pi/2 then
SetWeld(joint2,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new(math.pi/1.3,-0.1,-math.pi/2.5))
else
sid = joint2
SetWeld(joint2,1,1, NV,NV, Vector3.new(-1.4,0.6,0), Vector3.new(-math.pi/12,0,-math.pi/7))
end
local j2c0 = joint2.C0
 
local joint3 = Joint1
joint3.C1 = CFrame.new(0,1,0)
if side == -math.pi/2 then
SetWeld(joint3,1,1, NV,NV, Vector3.new(0.5,-0.38,-0.3), Vector3.new(0,math.pi/2,0.14))
else
SetWeld(joint3,1,1, NV,NV, Vector3.new(0.5,-0.8,-0.2), Vector3.new(0,math.pi/2,0.2))
end
 
local joint4 = Joint2
joint4.C1 = CFrame.new(0,1,0)
if side == -math.pi/2 then
SetWeld(joint4,1,1, NV,NV, Vector3.new(-0.5,-0.8,-0.2), Vector3.new(0,0,0.2))
else
SetWeld(joint4,1,1, NV,NV, Vector3.new(-0.5,-0.38,-0.3), Vector3.new(0,0,0.14))
end
 
local joint5 = Joint5
SetWeld(joint5,1,1,NV,NV,Vector3.new(0,0.9,0),Vector3.new(0,0,side/7))
 
Torsoz.CFrame = CFrame.new(pos+(towall*-2), pos) * CFrame.Angles(0,-side,-side/2.2)
bg.cframe = CFrame.new(pos+(towall*-2), pos) * CFrame.Angles(0,-side,-side/2.2)
 
local aniangle = 0
local aniplus = true
local aniangle2 = 0
local aniplus2 = true
 
local prevpart = part
HWRLastPart = part
while HWallRunning == true do
 
if aniangle > math.pi then
aniplus = false
elseif aniangle < -math.pi then
aniplus = true  
end
if aniplus == true then
aniangle = aniangle + 0.95
elseif aniplus == false then
aniangle = aniangle - 0.95
end
 
if aniangle2 > math.pi then
aniplus2 = false
elseif aniangle2 < -math.pi then
aniplus2 = true  
end
if aniplus2 == true then
aniangle2 = aniangle2 + 0.23
elseif aniplus2 == false then
aniangle2 = aniangle2 - 0.23
end
 
Hu.PlatformStand = true
local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-3,0))
local hitz2, enz2 = RAY(Torsoz.Position, towall*3.4)
 
--- if player ends wall run on ground
if hitz ~= nil and hitz.CanCollide == true then
bg.cframe = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side,0)
local offset = (bg.cframe.p.y+enz2.y) - bg.cframe.p.y
Torsoz.CFrame = CFrame.new(Vector3.new(bg.cframe.p.x,offset,bg.cframe.p.z), enz2) * CFrame.Angles(0,-side,0)
Torsoz.Velocity = NV
break
end
 
---- if new wall found --------
if hitz2 ~= nil and hitz2.CanCollide == true then
if hitz2 ~= prevpart then
local direct = CFrame.new(Torsoz.Position, Torsoz.Position+dir) * CFrame.Angles(0,side,0)
local hitz3, enz3 = RAY(Torsoz.Position, (direct * CFrame.Angles(0,-side/2.3,0)).lookVector*4)
if hitz3 ~= nil then
Torsoz.CFrame = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side*1.1,-side/2.2)
bg.cframe = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side*1.1,-side/2.2)
dir, dirc = FindSurface(hitz2, enz2)
towall = -dir
dir = (CFrame.new(NV, dir) * CFrame.Angles(0,side,0)).lookVector
prevpart = hitz2
HWRLastPart = hitz2
else
---- if player fails to find new wall to run on
Torsoz.CFrame = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
bg.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
Torsoz.Velocity = NV
HWRCooldown = 5
break
end
end
--- continue to wall run
Torsoz.CFrame = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side,-side/2.2)
bg.cframe = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side,-side/2.2)
else
---- if player ends wall run at end of wall
Torsoz.CFrame = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
bg.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
Torsoz.Velocity = NV
HWRCooldown = 5
break
end
 
local hitz3, enz3 = RAY(Torsoz.Position, Torsoz.CFrame.lookVector*2)
if hitz3 ~= nil and hitz3.CanCollide == true then
Torsoz.CFrame = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
bg.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
Torsoz.Velocity = NV
HWRCooldown = 5
break
end
 
bv.Parent = Torsoz
bv.velocity = (dir*(sprint-0.5)) + Vector3.new(0,GravPoint,0)
bg.cframe = bg.cframe * CFrame.Angles(aniangle/80,aniangle/80,0)
Torsoz.CFrame = Torsoz.CFrame * CFrame.Angles(aniangle/80,aniangle/80,0)
local j3,j3a = GetWeld(joint3)
local j4,j4a = GetWeld(joint4)
SetWeld(joint3,1,1, j3,j3a, j3,Vector3.new(-0.2+(aniangle/4),0,0))
SetWeld(joint4,1,1, j4,j4a, j4,Vector3.new(-0.2+(-aniangle/4),0,0))
if side == math.pi/2 then
local j1,j1a = GetWeld(joint1)
SetWeld(joint1,1,1, j1,j1a, j1, Vector3.new(0,0,0.8+(aniangle2/14)))
else
local j2,j2a = GetWeld(joint2)
SetWeld(joint2,1,1, j2,j2a, j2, Vector3.new(0,0,-0.8-(aniangle2/14)))
end
 
wait(0.025)
if GravPoint < -100 then
bg.cframe = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side,0)
local offset = math.abs((bg.cframe.p.y+enz2.y) - bg.cframe.p.y)
Torsoz.CFrame = CFrame.new(Vector3.new(bg.cframe.p.x,offset,bg.cframe.p.z), enz2) * CFrame.Angles(0,-side,0)
break
end
 
end
 
if HWallRunning == "Jumping" then
HWRCooldown = 6
joint1.C1 = CFrame.new(0,0.5,0)
 
joint2.C1 = CFrame.new(0,0.5,0)
if side == -math.pi/2 then
joint2.C0 = CFrame.new(-1.35,0.5,0) * CFrame.Angles(0,side/2.4,-math.pi/3)
else
joint2.C0 = CFrame.new(-1.35,0.5,0) * CFrame.Angles(0,side/2.4,-math.pi/4)
end
 
joint3.C1 = CFrame.new(0,1,0)
if side == -math.pi/2 then
joint3.C0 = CFrame.new(0.5,-0.8,0) * CFrame.Angles(0,math.pi+(side/2.4),-math.pi/4)
else
joint3.C0 = CFrame.new(0.5,-0.8,0) * CFrame.Angles(0,(side/2.4),math.pi/4)
end
joint4.MaxVelocity = 10
joint4.DesiredAngle = 0
joint4.C1 = CFrame.new(0,1,0)
if side == -math.pi/2 then
joint4.C0 = CFrame.new(-0.5,-0.8,0) * CFrame.Angles(0,math.pi+(side/2.4),math.pi/4)
else
joint4.C0 = CFrame.new(-0.5,-0.8,0) * CFrame.Angles(0,(side/2.4),-math.pi/4)
end
 
local joint5 = Joint5
joint5.C1 = CFrame.new(0,-0.5,0) * CFrame.Angles(0,side/2.4,0)
joint5.C0 = CFrame.new(0,1,0)
 
local j1,j1a = GetWeld(joint1)
local j2,j2a = GetWeld(joint2)
local j3,j3a = GetWeld(joint3)
local j4,j4a = GetWeld(joint4)
local j5,j5a = GetWeld(joint5)
 
GravPoint = 26
local collidecount = 0
local bgangle = side/2
local count = 1
local dir2 = (CFrame.new(NV, dir) * CFrame.Angles(0,-side/2.4,0)).lookVector
HWRDir = dir2
bv.velocity = (dir2*(sprint+5)) + Vector3.new(0,GravPoint,0)
while HWallRunning == "Jumping" do
local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-4,0))
local hitz2, enz2 = RAY(Torsoz.Position, dir2*1.4)
if hitz ~= nil and hitz.CanCollide == true then
local offset = math.abs(enz.y - Torsoz.CFrame.p.y)
Torsoz.CFrame = CFrame.new(enz+Vector3.new(0,2.9,0), enz+Vector3.new(0,2.9,0)+dir2)
Torsoz.Velocity = NV
break
end
 
if hitz2 ~= nil and hitz2.CanCollide == true then
collidecount = collidecount + 1
if collidecount == 4 then
Torsoz.CFrame = CFrame.new(Torsoz.Position, Torsoz.Position+dir2) * CFrame.new(0,0,0.4)
Torsoz.Velocity = Vector3.new(0,Torsoz.Velocity.y,0)
HWRCooldown = 5
VWRCooldown = 5
wait(0.02)
break
end
end
 
if side/2 > 0 then
if bgangle > 0.2 then
bgangle = bgangle - 0.055
end
else
if bgangle < -0.2 then
bgangle = bgangle + 0.055
end
end
 
if count <= 5 then
if side == -math.pi/2 then
SetWeld(joint1,count,5, j1,j1a, Vector3.new(1.35,0.5,0), Vector3.new(0,side/2.4,math.pi/4))
SetWeld(joint2,count,5, j2,j2a, Vector3.new(-1.35,0.5,0), Vector3.new(0,side/2.4,-math.pi/3))
SetWeld(joint3,count,5, j3,j3a, Vector3.new(0.5,-0.8,0), Vector3.new(0,-side/1.7,0))
joint3.C0 = joint3.C0 * CFrame.Angles((-math.pi/4)/5*count,0,0)
SetWeld(joint4,count,5, j4,j4a, Vector3.new(-0.5,-0.8,0), Vector3.new(0,-side/1.7,0))
joint4.C0 = joint4.C0 * CFrame.Angles((math.pi/4)/5*count,0,0)
else
SetWeld(joint1,count,5, j1,j1a, Vector3.new(1.35,0.5,0), Vector3.new(0,side/2.4,math.pi/3))
SetWeld(joint2,count,5, j2,j2a, Vector3.new(-1.35,0.5,0), Vector3.new(0,side/2.4,-math.pi/4))
SetWeld(joint3,count,5, j3,j3a, Vector3.new(0.5,-0.8,0), Vector3.new(0,-side/1.7,0))
joint3.C0 = joint3.C0 * CFrame.Angles((math.pi/4)/5*count,0,0)
SetWeld(joint4,count,5, j4,j4a, Vector3.new(-0.5,-0.8,0), Vector3.new(0,-side/1.7,0))
joint4.C0 = joint4.C0 * CFrame.Angles((-math.pi/4)/5*count,0,0)
end
 
count = count + 1
end
 
bg.Parent = Torsoz
bg.cframe = CFrame.new(NV, dir) * CFrame.Angles(0,side/15,-bgangle)
bv.velocity = (dir2*(sprint+5)) + Vector3.new(0,GravPoint,0)
if collidecount ~= 0 then
bv.velocity = Vector3.new(0,bv.velocity.y,0)
end
if GravPoint < -120 then
break
end
wait(0.025)
end
end
 
Hu.PlatformStand = false
bv:remove()
 
HWRGravDrop = false
Stand()
HWallRunning = false
end
end
 
function VWR(part, pos)
if (part.className == "Part" and part.Shape == Enum.PartType.Block) or part.className ~= "Part" then
print("VWR Activated")
flow.Value = flow.Value + 9
Standing = false
VWallRunning = true
Action = "VWallRunning"
GravPoint = 0
local percent = 1
VWRLastPart = part
local dir, dirc = FindSurface(part, pos)
towall = -dir
dir = (CFrame.new(NV, -dir) * CFrame.Angles(math.pi/2,0,0)).lookVector
--[[
local p = P:Clone()
p.Parent = char
p.Size = Vector3.new(2,2,2)
p.BrickColor = BrickColor.new("Lime green")
p.CanCollide = false
p.CFrame = part.CFrame * CFrame.new(dirc*5)
p.Transparency = 0.3
]]
local bv = Instance.new("BodyVelocity", Torsoz)
bv.Name = "StaminaBodyObject"
bv.maxForce = Vector3.new(1/0,1/0,1/0)
bv.P = 9000
bv.velocity = (dir*(sprint-1))*percent
 
local bg = Instance.new("BodyGyro", Torsoz)
bg.Name = "StaminaBodyObject"
bg.maxTorque = Vector3.new(1/0,1/0,1/0)
bg.D = 100
local posi = pos + (-towall*1.8)
bg.cframe = CFrame.new(posi, posi+towall) * CFrame.Angles((math.pi/5),0,0)
Torsoz.CFrame = CFrame.new(posi, posi+towall) * CFrame.Angles((math.pi/5),0,0)
 
local joint1 = Joint3
SetWeld(joint1,1,1, NV,NV, Vector3.new(1.4,0.45,-0.1), Vector3.new(-math.pi/3.2,0,math.pi/8))
 
local joint2 = Joint4
SetWeld(joint2,1,1, NV,NV, Vector3.new(-1.4,0.45,-0.1), Vector3.new(-math.pi/3.2,0,-math.pi/8))
 
local joint3 = Joint1
SetWeld(joint3,1,1, NV,NV, Vector3.new(0.48,-0.6,-0.1), Vector3.new(0,math.pi/2,0))
joint3.C1 = CFrame.new(0,0.7,0.2) * CFrame.Angles(0,math.pi/2,0)
 
local joint4 = Joint2
SetWeld(joint4,1,1, NV,NV, Vector3.new(-0.48,-0.6,-0.1), Vector3.new(0,math.pi/2,0))
joint4.C1 = CFrame.new(0,0.7,0.2) * CFrame.Angles(0,math.pi/2,0)
 
local joint5 = Joint5
SetWeld(joint5,1,1, NV,NV, Vector3.new(0,1,0), Vector3.new(math.pi/20,0,0))
 
local aniangle = 0
local aniplus = true
 
while VWallRunning == true do
local hitz, enz = RAY(Torsoz.Position, towall*2.1)
local hitz2, enz2 = RAY(Torsoz.Position, (CFrame.new(NV,towall)*CFrame.Angles(math.pi/2,0,0)).lookVector*2.4)
 
if aniangle > math.pi then
aniplus = false
elseif aniangle < -math.pi then
aniplus = true  
end
if aniplus == true then
aniangle = aniangle + (1.3*(percent+0.2))
elseif aniplus == false then
aniangle = aniangle - (1.3*(percent+0.2))
end
 
bv.velocity = (dir*(sprint-1))*percent
if VWRLeft == true then
bv.velocity = bv.velocity + ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * (11*percent+5))
end
if VWRRight == true then
bv.velocity = bv.velocity - ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * (11*percent+5))
end
 
bg.cframe = CFrame.new(posi, posi+towall) * CFrame.Angles((math.pi/5),0,0) * CFrame.Angles(0,aniangle/60,0)
 
SetWeld(joint1,1,1, NV,NV, Vector3.new(1.4,0.45,-0.1), Vector3.new(-math.pi/3.2,aniangle/52,(math.pi/8)+(aniangle/30)))
SetWeld(joint2,1,1, NV,NV, Vector3.new(-1.4,0.45,-0.1), Vector3.new(-math.pi/3.2,aniangle/52,(-math.pi/8)+(-aniangle/30)))
SetWeld(joint3,1,1, NV,NV, Vector3.new(0.51,-0.75,-(aniangle/30)), Vector3.new(0,math.pi/2,(aniangle/8)-0.3))
SetWeld(joint4,1,1, NV,NV, Vector3.new(-0.51,-0.75,(aniangle/30)), Vector3.new(0,math.pi/2,(-aniangle/8)-0.3))
 
if hitz == nil then
local lv = Torsoz.Position + (Torsoz.CFrame.lookVector*100)
Torsoz.CFrame = CFrame.new(Torsoz.Position, Vector3.new(lv.x,Torsoz.Position.y,lv.z))
break
end
 
if hitz2 ~= nil then
percent = 0
VWallRunning = "Falling"
Action = "VWRFalling"
GravPoint = -7
break
end
 
wait(0.02)
percent = percent - 0.028
if percent <= 0.15 then
VWallRunning = "Falling"
Action = "VWRFalling"
end
end
 
-------------------------- Falling from VWR ------------------------------
if VWallRunning == "Falling" then
GravPoint = GravPoint - 1
local dirpos = (-towall *5) + Vector3.new(0,GravPoint,0)
bv.velocity = CFrame.new(NV, dirpos).lookVector * dirpos.magnitude
 
local j1,j1a = GetWeld(joint1)
local j2,j2a = GetWeld(joint2)
local j3,j3a = GetWeld(joint3)
local j4,j4a = GetWeld(joint4)
local j5,j5a = GetWeld(joint5)
 
local counter = 0
while VWallRunning == "Falling" do
counter = counter + 1
local hitz, enz = RAY(H.Position, Vector3.new(0,-2.4,0))
 
dirpos = (-towall *5) + Vector3.new(0,GravPoint,0)
bv.velocity = CFrame.new(NV, dirpos).lookVector * dirpos.magnitude
if VWRLeft == true then
bv.velocity = bv.velocity + ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * 9)
end
if VWRRight == true then
bv.velocity = bv.velocity - ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * 9)
end
bg.cframe = CFrame.new(NV, (-towall*30) + Vector3.new(0,GravPoint,0)) * CFrame.Angles(-math.pi/2.55,math.pi,0)
 
if counter <= 35 then
SetWeld(joint1,counter,35, j1,j1a, Vector3.new(1.4,0.45,-0.1), Vector3.new(math.pi/9,0,math.pi/9))
SetWeld(joint2,counter,35, j2,j2a, Vector3.new(-1.4,0.45,-0.1), Vector3.new(math.pi/9,0,-math.pi/9))
SetWeld(joint3,counter,35, j3,j3a, Vector3.new(0.5,-0.75,0), Vector3.new(0,math.pi/2,math.pi/9))
joint3.C1 = CFrame.new(0,0.7 + (0.3/35*counter),0.2 - (0.2/35*counter)) * CFrame.Angles(0,math.pi/2,0)
SetWeld(joint4,counter,35, j4,j4a, Vector3.new(-0.5,-0.75,0), Vector3.new(0,math.pi/2,math.pi/9))
joint4.C1 = CFrame.new(0,0.7 + (0.3/35*counter),0.2 - (0.2/35*counter)) * CFrame.Angles(0,math.pi/2,0)
SetWeld(joint5,counter,35, j5,j5a, Vector3.new(0,1,0), Vector3.new(-math.pi/6,0,0))
end
 
if hitz ~= nil then
bv:remove()
Torsoz.CFrame = CFrame.new(enz+Vector3.new(0,2,0), (enz+Vector3.new(0,2,0)) + ((-towall*25) + Vector3.new(0,GravPoint,0))) * CFrame.Angles(-math.pi/2.55,math.pi,0)
Torsoz.Velocity = NV
Torsoz.RotVelocity = NV
local bp = Instance.new("BodyPosition", Torsoz)
bp.maxForce = Vector3.new(1/0,1/0,1/0)
bp.position = Torsoz.CFrame.p
game:service("Debris"):AddItem(bp, 0.16)
flow.Value = 0
break
end
 
if GravPoint > - 180 then
GravPoint = GravPoint - 1.9
end
if counter > 200 then
break
end
wait(0.02)
end
 
local bp = Instance.new("BodyPosition")
 
local counter2 = counter
local bgangleplus = 0
 
local j1,j1a = GetWeld(joint1)
local j2,j2a = GetWeld(joint2)
local j3,j3a = GetWeld(joint3)
local j4,j4a = GetWeld(joint4)
local j5,j5a = GetWeld(joint5)
 
local landingpos
 
while VWallRunning == "BackflipFromFall" do
counter2 = counter2 + 1
local hitz, enz = RAY(H.Position+Vector3.new(0,2,0), Vector3.new(0,-4.4,0))
 
if counter2 - counter < 13 then
bgangleplus = bgangleplus - ((math.pi*1.1)/13)
end
if counter2 - counter <= 13 then
SetWeld(joint1,counter2-counter,13, j1,j1a, Vector3.new(1.4,0.5,0.1), Vector3.new(math.pi/2,0.1,math.pi/2))
SetWeld(joint2,counter2-counter,13, j2,j2a, Vector3.new(-1.4,0.5,0.1), Vector3.new(math.pi/2,-0.1,-math.pi/2))
SetWeld(joint3,counter2-counter,13, j3,j3a, Vector3.new(0.52,-0.3,-0.65), Vector3.new(0,math.pi/2,0))
SetWeld(joint4,counter2-counter,13, j4,j4a, Vector3.new(-0.51,-0.9,-0.05), Vector3.new(0,math.pi/2,0))
SetWeld(joint5,counter2-counter,13, j5,j5a, Vector3.new(0,0.9,0), Vector3.new(-math.pi/7,0,0))
end
 
dirpos = (-towall *5) + Vector3.new(0,GravPoint,0)
--bv.velocity = Vector3.new(0,-2,0)
bv.velocity = CFrame.new(NV, dirpos).lookVector * dirpos.magnitude
if VWRLeft == true then
bv.velocity = bv.velocity + ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * 9)
end
if VWRRight == true then
bv.velocity = bv.velocity - ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * 9)
end
bg.cframe = CFrame.new(NV, (-towall*30) + Vector3.new(0,GravPoint,0)) * CFrame.Angles((-math.pi/2.4) + bgangleplus,math.pi,0)
 
if hitz ~= nil then
bv:remove()
landingpos = enz - (towall*1.3)
if counter2 - counter > 8 then
bp = Instance.new("BodyPosition", Torsoz)
bp.maxForce = Vector3.new(1/0,1/0,1/0)
bp.position = enz+Vector3.new(0,2.4,0) + (-towall*1)
VWallRunning = "LandingFall"
else
Torsoz.CFrame = bg.cframe + (enz+Vector3.new(0,2.3,0))
Torsoz.Velocity = NV
Torsoz.RotVelocity = NV
local bp = Instance.new("BodyPosition", Torsoz)
bp.maxForce = Vector3.new(1/0,1/0,1/0)
bp.position = Torsoz.CFrame.p
game:service("Debris"):AddItem(bp, 0.14)
flow.Value = 0
end
break
end
 
if GravPoint > - 180 then
GravPoint = GravPoint - 1.9
end
if counter2 > 200 then
break
end
wait(0.02)
end
 
if VWallRunning == "LandingFall" then
print("Landing")
 
joint3.C1 = CFrame.new(0,1,0) * CFrame.Angles(0,math.pi/2,0)
joint4.C1 = CFrame.new(0,1,0) * CFrame.Angles(0,math.pi/2,0)
local j1,j1a = GetWeld(joint1)
local j2,j2a = GetWeld(joint2)
local j3,j3a = GetWeld(joint3)
local j4,j4a = GetWeld(joint4)
local j5,j5a = GetWeld(joint5)
 
local a
local mesh
if GravPoint < -70 then
a = P:Clone()
a.Parent = Torsoz
a.Name = "AirLandingEffect"
a.BrickColor = BrickColor.new("Medium stone grey")
a.Transparency = 0.3
a.CFrame = CFrame.new(landingpos+Vector3.new(0,0.4,0))
mesh = Instance.new("SpecialMesh", a)
mesh.MeshId = "http://www.roblox.com/asset/?id=20329976"
mesh.Scale = Vector3.new(0,0,0)
end
 
local bgcf = CFrame.new(NV, Vector3.new(towall.x,0,towall.z))
bg.cframe = bgcf * CFrame.Angles(-math.pi/7,0,0)
local bgval = math.pi/7/2
 
for i = 1, 6 do
Hu.PlatformStand = true
SetWeld(joint1,i,6, j1,j1a, Vector3.new(1.2,0.5,0.2), Vector3.new(math.pi/2,0.5,math.pi/1.2))
SetWeld(joint2,i,6, j2,j2a, Vector3.new(-1.2,0.5,0.2), Vector3.new(math.pi/2,-0.5,-math.pi/1.2))
SetWeld(joint3,i,6, j3,j3a, Vector3.new(0.51,-0.3,-0.8), Vector3.new(0,math.pi/2,-math.pi/7))
SetWeld(joint4,i,6, j4,j4a, Vector3.new(-0.51,-0.8,-0.7), Vector3.new(0,math.pi/2,-math.pi/3))
SetWeld(joint5,i,6, j5,j5a, Vector3.new(0,0.85,0), Vector3.new(-math.pi/8,0,0))
bp.position = bp.position + Vector3.new(0,-0.07,0)
bg.cframe = bgcf * CFrame.Angles((-bgval*2) + (bgval/6*i),0,0)
Torsoz.CFrame = bg.cframe + bp.position
if a ~= nil then
mesh.Scale = mesh.Scale + Vector3.new(1.3,0.35,1.3)
a.Transparency = 0.3 + (0.7/6*i)
end
wait(0.02)
end
if a ~= nil then
a:remove()
end
local j1,j1a = GetWeld(joint1)
local j2,j2a = GetWeld(joint2)
local j3,j3a = GetWeld(joint3)
local j4,j4a = GetWeld(joint4)
local j5,j5a = GetWeld(joint5)
for i = 1, 6 do
Hu.PlatformStand = true
SetWeld(joint1,i,6, j1,j1a, Vector3.new(1.5,0.5,0), Vector3.new(0,0,0))
SetWeld(joint2,i,6, j2,j2a, Vector3.new(-1.5,0.5,0), Vector3.new(0,0,0))
SetWeld(joint3,i,6, j3,j3a, Vector3.new(0.5,-1,0), Vector3.new(0,math.pi/2,0))
SetWeld(joint4,i,6, j4,j4a, Vector3.new(-0.5,-1,0), Vector3.new(0,math.pi/2,0))
SetWeld(joint5,i,6, j5,j5a, Vector3.new(0,1,0), Vector3.new(0,0,0))
bp.position = bp.position + Vector3.new(0,0.1,0)
bg.cframe = bgcf * CFrame.Angles(-bgval + (bgval/6*i),0,0)
Torsoz.CFrame = bg.cframe + bp.position
wait(0.02)
end
 
bp:remove()
end
 
end
 
bv:remove()
bg:remove()
VWallRunning = false
Stand()
end
end
 
function Slide(pos)
flow.Value = flow.Value + 6
Action = "Sliding"
Sliding = true
GravPoint = Torsoz.Velocity.y
local spd = Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude + 10
local dir = Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).unit
 
local bv = Instance.new("BodyVelocity", Torsoz)
bv.maxForce = Vector3.new(1/0,1/0,1/0)
bv.velocity = dir*spd
local bg = Instance.new("BodyGyro", Torsoz)
bg.maxTorque = Vector3.new(1/0,1/0,1/0)
bg.cframe = CFrame.new(NV, dir) * CFrame.Angles(math.pi/2.2,0.24,0)
 
local joint1 = Joint1
local joint2 = Joint2
local joint3 = Joint3
local joint4 = Joint4
local joint5 = Joint5
local j1,j1a = GetWeld(joint1)
local j2,j2a = GetWeld(joint2)
 
SetWeld(joint1,1,1, NV,NV, Vector3.new(j1.x,j1.y,j1.z), Vector3.new(j1a.x,math.pi/2,j1a.z))
joint1.C1 = CFrame.new(0,1,0) * CFrame.Angles(0,math.pi/2,0)
SetWeld(joint2,1,1, NV,NV, Vector3.new(j2.x,j2.y,j2.z), Vector3.new(j2a.x,math.pi/2,j2a.z))
joint2.C1 = CFrame.new(0,1,0) * CFrame.Angles(0,math.pi/2,0)
 
local j1,j1a = GetWeld(joint1)
local j2,j2a = GetWeld(joint2)
local j3,j3a = GetWeld(joint3)
local j4,j4a = GetWeld(joint4)
local j5,j5a = GetWeld(joint5)
 
local count = 0
local lastpos
 
while Sliding == true do
count = count + 1
Hu.PlatformStand = true
local hitz1, enz1 = RAY(Torsoz.Position+Vector3.new(0,0.03,0), dir *2.5)
local hitz2, enz2 = RAY(Torsoz.Position-Vector3.new(0,0.2,0), dir *2.5)
local ghitz, genz = RAY(Torsoz.Position, Vector3.new(0,-2.6,0))
bv.velocity = dir*spd + Vector3.new(0,GravPoint,0)
 
if count <= 5 then
SetWeld(joint1,count,5, j1,j1a, Vector3.new(0.5,-0.8,-0.15), Vector3.new(0,(math.pi/2)+0.1,-0.4))
SetWeld(joint2,count,5, j2,j2a, Vector3.new(-0.5,-1,0), Vector3.new(0,(math.pi/2)-0.4,0))
SetWeld(joint3,count,5, j3,j3a, Vector3.new(1.5,0.5,0), Vector3.new(-0.7,-0.24,math.pi/5))
SetWeld(joint4,count,5, j4,j4a, Vector3.new(-1.5,0.5,0), Vector3.new(-0.1,0,-math.pi/1.5))
SetWeld(joint5,count,5, j5,j5a, Vector3.new(0,1,0), Vector3.new(-0.5,-0.2,0))
end
 
if (hitz1 ~= nil and hitz1.CanCollide == true) or (hitz2 ~= nil and  hitz2.CanCollide == true) then
bv:remove()
bg:remove()
Sliding = "HitObject"
end
if ghitz ~= nil then
GravPoint = 0
Torsoz.CFrame = CFrame.new(genz, genz+dir) * CFrame.Angles(math.pi/2.2,0.24,0) + Vector3.new(0,0.7,0)
spd = spd - 0.95
else
if GravPoint > -180 then
GravPoint = GravPoint - 5.6
end
spd = spd - 0.36
end
if spd < 7 then
Sliding = false
end
wait(0.02)
end
 
if Sliding == false then
local j1,j1a = GetWeld(joint1)
local j2,j2a = GetWeld(joint2)
local j3,j3a = GetWeld(joint3)
local j4,j4a = GetWeld(joint4)
local j5,j5a = GetWeld(joint5)
for i = 1, 4 do
SetWeld(joint1,i,4, j1,j1a, Vector3.new(0.5,-1,0), Vector3.new(0,math.pi/2,0))
SetWeld(joint2,i,4, j2,j2a, Vector3.new(-0.5,-1,0), Vector3.new(0,math.pi/2,0))
SetWeld(joint3,i,4, j3,j3a, Vector3.new(1.5,0.5,0), NV)
SetWeld(joint4,i,4, j4,j4a, Vector3.new(-1.5,0.5,0), NV)
SetWeld(joint5,i,4, j5,j5a, Vector3.new(0,1,0), NV)
local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-2.6,0))
bg.cframe = CFrame.new(NV, dir) * CFrame.Angles((math.pi/2.2) - ((math.pi/2.2)/4*i),0.24 - (0.24/4*i),0)
bv.velocity = dir*spd + Vector3.new(0,GravPoint,0)
 
if hitz ~= nil then
GravPoint = 0
Torsoz.CFrame = CFrame.new(enz, enz+dir) * CFrame.Angles((math.pi/2.2) - ((math.pi/2.2)/4*i),0.24 - (0.24/4*i),0) + Vector3.new(0,0.7+(1.8/4*i),0)
spd = spd - 0.95
else
if GravPoint > -180 then
GravPoint = GravPoint - 5.6
end
spd = spd - 0.36
end
wait(0.02)
end
local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-2.6,0))
Torsoz.CFrame = CFrame.new(enz, enz+dir) + Vector3.new(0,3,0)
end
bv:remove()
bg:remove()
SlideCooldown = 10
Stand()
end
 
function KD(key)
if pause.Value == false then
if key == string.char(32) then
Space = true
 
local ghitz, genz = RAY(Torsoz.Position, Vector3.new(0,-3.7,0))
local hitz, enz = RAY(Torsoz.Position+Vector3.new(0,1.1,0), Torsoz.CFrame.lookVector*2.3)
local righthitz, rightenz
local lefthitz, leftenz
 
if HWallRunning == false then
righthitz, rightenz = RAY(Torsoz.Position, ((Torsoz.CFrame * CFrame.new(1.5,0,-0.2)).p - Torsoz.CFrame.p).unit*3.9)
lefthitz, leftenz = RAY(Torsoz.Position, ((Torsoz.CFrame * CFrame.new(-1.5,0,-0.2)).p - Torsoz.CFrame.p).unit*3.9)
 
elseif HWallRunning == "Jumping" then
righthitz, rightenz = RAY(Torsoz.Position, ((CFrame.new(Torsoz.Position, Torsoz.Position + HWRDir) * CFrame.new(1.5,0,-0.2)).p - Torsoz.Position).unit*3.9)
lefthitz, leftenz = RAY(Torsoz.Position, ((CFrame.new(Torsoz.Position, Torsoz.Position + HWRDir) * CFrame.new(-1.5,0,-0.2)).p - Torsoz.Position).unit*3.9)
 
end
 
if Action == "Standing" and Shift == true and (hitz == nil or hitz.CanCollide == false) and (righthitz == nil or righthitz.CanCollide == false) and (lefthitz == nil or lefthitz.CanCollide == false) and (ghitz == nil or ghitz.CanCollide == false) and (Torsoz.Velocity.y > 6 and Torsoz.Velocity.y < 50) and DivingCooldown <= 0 then
if stamina >= 10 then
--if Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude > 12 then
Dive()
--end
end
end
 
if hitz == nil and VWallRunning == "Falling" then
VWallRunning = "BackflipFromFall"
end
 
if Shift == true and Torsoz.Velocity.y > -50 and Diving == false and DivingCooldown <= 0 then
local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-3.5,0))
 
if hitz ~= nil then
if Action == "Standing" and VWRCooldown == 0 then
if hitz2 == nil or hitz2.CanCollide == false then
VWR(hitz, enz)
end
end
end
 
if (HWallRunning == false or (HWallRunning == "Jumping" and (HWRLastPart ~= righthitz or HWRLastPart ~= lefthitz))) and HWRCooldown == 0 and VWallRunning == false then
 
if (hitz == nil or HWallRunning == "Jumping") and ((righthitz ~= nil and righthitz.Parent:findFirstChild("Humanoid") == nil and righthitz.Parent.className ~= "Hat") or (lefthitz ~= nil and lefthitz.Parent:findFirstChild("Humanoid") == nil and lefthitz.Parent.className ~= "Hat")) then
if hitz2 == nil or hitz2.CanCollide == false then
local right = (rightenz - Torsoz.Position).magnitude
local left = (leftenz - Torsoz.Position).magnitude
if right < left then
if HWallRunning == "Jumping" and HWRLastPart ~= righthitz then
HWallRunning = false
while Standing == false do
wait(0.01)
end
print("2nd Right Activated!")
HWallRun(righthitz, rightenz, -math.pi/2)
else
if hitz == nil then
print("Right Activated")
HWallRun(righthitz, rightenz, -math.pi/2)
end
end
elseif left < right then
if HWallRunning == "Jumping" and HWRLastPart ~= lefthitz then
HWallRunning = false
while Standing == false do
wait(0.01)
end
print("2nd Left Activated!")
HWallRun(lefthitz, leftenz, math.pi/2)
else
if hitz == nil then
print("Left Activated")
HWallRun(lefthitz, leftenz, math.pi/2)
end
end
end
end
end
end
 
end
 
if HWallRunning == true then
HWallRunning = "Jumping"
Action = "HWRJumping"
end
 
elseif key == string.char(48) then
Shift = true
elseif key == string.char(50) then
if Action == "Standing" then
Sit()
elseif HWallRunning == true then
HWRGravDrop = true
end
elseif key == string.char(52) then
if Shift == true and Action == "Standing" and SlideCooldown == 0 and Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude > 15 and Torsoz.Velocity.y > -40 then
print("Sliding")
Slide()
end
elseif key == "a" then
VWRLeft = true
elseif key == "d" then
VWRRight = true
end
end
end
 
function KU(key)
if key == string.char(32) then
Space = false
elseif key == string.char(48) then
Shift = false
elseif key == string.char(50) then
if Action == "Sitting" then
Stand()
end
elseif key == string.char(52) then
Sliding = false
elseif key == "a" then
VWRLeft = false
elseif key == "d" then
VWRRight = false
end
end
 
mouse.KeyDown:connect(function(key) KD(key) end)
mouse.KeyUp:connect(function(key) KU(key) end)
 
Joint1 = Instance.new("Snap", Torsoz)
GetWeld(Joint1)
Joint2 = Instance.new("Snap", Torsoz)
GetWeld(Joint2)
Joint3 = Instance.new("Snap", Torsoz)
GetWeld(Joint3)
Joint4 = Instance.new("Snap", Torsoz)
GetWeld(Joint4)
Joint5 = Instance.new("Snap", Torsoz)
GetWeld(Joint5)
Stand()
 
local animatebg = Instance.new("BodyGyro")
animatebg.D = 100
local GravAction = "Idle"
local PrevGravAction = GravAction
 
local prevrapos = (RA.CFrame * CFrame.new(0,-1,0)).p
local prevlapos = (LA.CFrame * CFrame.new(0,-1,0)).p
local hue = 0
local recyclecount = 0
local tickoffset = tick()
local fadetab = {}
local fadetab2 = {}
local animatebgcount = 0
 
for i = 1, 13 do
local p = P:Clone()
p.Name = "Part"..i
local mesh = Instance.new("SpecialMesh", p)
mesh.MeshId = "http://www.roblox.com/Asset/?id=9856898"
mesh.TextureId = "http://www.roblox.com/Asset/?id=48358980"
table.insert(fadetab, {p, mesh})
end
for i = 1, 13 do
local p = P:Clone()
p.Name = "Part"..i
local mesh = Instance.new("SpecialMesh", p)
mesh.MeshId = "http://www.roblox.com/Asset/?id=9856898"
mesh.TextureId = "http://www.roblox.com/Asset/?id=48358980"
table.insert(fadetab2, {p, mesh})
end
 
game:service("RunService").Stepped:connect(function()
GravAction = "Idle"
hue = hue + 3
hue = hue % 360
 
------------- anim angle changing --------
if animangle > math.pi then
animplus = false
elseif animangle < -math.pi then
animplus = true  
end
if animplus == true then
animangle = animangle + animspeed
elseif animplus == false then
animangle = animangle - animspeed
end
 
local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-3.9,0))
if Shift == true then
Hu.WalkSpeed = sprint
else
Hu.WalkSpeed = 16
end
if (FOV >= 70 and FOV < 74) and Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude > 25 then
FOV = FOV + 1
elseif (FOV <= 74 and FOV > 70) and Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude < 20 then
FOV = FOV - 1
end
if pause.Value == true then
Hu.WalkSpeed = 0
end
if Sitting == true then
local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-2.2,0))
Hu.PlatformStand = true
if hitz2 == nil then
Stand()
end
end
if Diving == true then
Hu.PlatformStand = true
DivingBV.velocity = Vector3.new(DivingDir.x*(sprint+2),GravPoint,DivingDir.z*(sprint+2))
DivingBG.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+DivingBV.velocity) * CFrame.Angles(-math.pi/2,0,0)
 
if GravPoint > -180 then
GravPoint = GravPoint - 2
end
end
if DivingCooldown > 0 then
DivingCooldown = DivingCooldown - 1
end
if HWallRunning == true then
if HWRGravDrop == false then
GravPoint = GravPoint - 0.4
else
GravPoint = GravPoint - 2
end
elseif HWallRunning == "Jumping" then
GravPoint = GravPoint - 1.7
end
----------------------------- stamina ----------------------------------------
if Vector3.new(Torsoz.Velocity.x, 0, Torsoz.Velocity.z).magnitude > 18 and Action == "Standing" and Shift == true then
if stamina > 0 then
stamina = stamina - 0.5
if stamina < 0 then
Shift = false
stamina = 0
end
else
Shift = false
stamina = 0
end
if Action == "Standing" then
animspeed = 0.85
SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.5,-1,0), Vector3.new(-animangle/4.85,0,0))
SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.5,-1,0), Vector3.new(animangle/4.85,0,0))
SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new(animangle/3.5,0,0))
SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new(-animangle/3.5,0,0))
end
elseif Vector3.new(Torsoz.Velocity.x, 0, Torsoz.Velocity.z).magnitude > 12 and Action ~= "Sliding" then
if stamina < maxstamina then
stamina = stamina + 0.5
if stamina > maxstamina then
stamina = maxstamina
end
else
stamina = maxstamina
end
if Action == "Standing" then
animspeed = 0.65
SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.5,-1,0), Vector3.new(-animangle/7,0,0))
SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.5,-1,0), Vector3.new(animangle/7,0,0))
SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new(animangle/5,0,0))
SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new(-animangle/5,0,0))
end
elseif Vector3.new(Torsoz.Velocity.x, 0, Torsoz.Velocity.z).magnitude < 2 then
animspeed = 0.1
if Action == "Standing" then
SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.5,-1,0), Vector3.new(-animangle/38,0,0))
SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.5,-1,0), Vector3.new(animangle/38,0,0))
SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new(animangle/30,0,0))
SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new(-animangle/30,0,0))
end
if stamina < maxstamina then
if Sitting == false then
stamina = stamina + 0.65
else
stamina = stamina + 1.02
end
if stamina > maxstamina then
stamina = maxstamina
end
else
stamina = maxstamina
end
end
 
if hitz == nil then
if Torsoz.Velocity.y > 1 or (Torsoz.Velocity.y < -1 and Torsoz.Velocity.y > -90) then
if Action == "Standing" then
GravAction = "Rising"
animspeed = 0.1
SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.5,-1,0), Vector3.new(-animangle/38,0,0))
SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.5,-1,0), Vector3.new(animangle/38,0,0))
SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new((math.pi-0.2)+(animangle/30),0,0))
SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new((math.pi-0.2)+(-animangle/30),0,0))
if animatebg.Parent ~= nil then
animatebg.Parent = Torsoz
animatebg.maxTorque = Vector3.new(1/0,10000,1/0)
local lokvec = Torsoz.CFrame.lookVector*100
animatebg.cframe = CFrame.new(NV, Vector3.new(lokvec.x,0,lokvec.z))
animatebg.Parent = nil
end
end
end
end
 
if hitz == nil then
local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-6,0))
if hitz2 == nil then
if Torsoz.Velocity.y < -90 then
if Action == "Standing" then
GravAction = "Falling"
animspeed = 1.1
animatebg.Parent = Torsoz
animatebg.maxTorque = Vector3.new(1/0,10000,1/0)
local lokvec = Torsoz.CFrame.lookVector*100
animatebg.cframe = CFrame.new(NV, Vector3.new(lokvec.x,0,lokvec.z)) * CFrame.Angles(-math.pi/11,animangle/70,0)
SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.45,-0.8,0), Vector3.new((animangle/27)-0.3,0,0.18))
SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.45,-0.8,0), Vector3.new((-animangle/27)-0.3,0,-0.18))
SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.4,0.5,0), Vector3.new((math.pi+0.2)+(animangle/26),0,0.18))
SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.4,0.5,0), Vector3.new((math.pi+0.2)+(-animangle/26),0,-0.18))
end
end
elseif hitz2.CanCollide == true then
if animatebg.Parent ~= nil then
animatebg.Parent = Torsoz
animatebg.maxTorque = Vector3.new(1/0,10000,1/0)
local lokvec = Torsoz.CFrame.lookVector*100
animatebg.cframe = CFrame.new(NV, Vector3.new(lokvec.x,0,lokvec.z))
animatebg.Parent = nil
end
end
end
 
if GravAction == "Idle" and animatebg.Parent ~= nil then
animatebg.Parent = nil
end
 
if math.abs(tickoffset - tick()) > 0.05 then
tickoffset = tick()
local flowcolor = HSV(hue, 0.7,1)
recyclecount = (recyclecount % #fadetab) + 1
if flow.Value > 25 then
local lapos = (LA.CFrame * CFrame.new(0,-1,0)).p
local rapos = (RA.CFrame * CFrame.new(0,-1,0)).p
local p = fadetab[recyclecount]
p[1].Parent = m
p[1].CFrame = CFrame.new((lapos+prevlapos)/2, lapos)
p[2].Scale = Vector3.new(0.5,0.5,(lapos-prevlapos).magnitude*2)
p[2].VertexColor = Vector3.new(flowcolor.r,flowcolor.g,flowcolor.b)
p[1].Transparency = math.abs((flow.Value/120) - 0.8)
p[1].Transparency = p[1].Transparency + (1/#fadetab)
local p = fadetab2[recyclecount]
p[1].Parent = m
p[1].CFrame = CFrame.new((rapos+prevrapos)/2, rapos)
p[2].Scale = Vector3.new(0.5,0.5,(rapos-prevrapos).magnitude*2)
p[2].VertexColor = Vector3.new(flowcolor.r,flowcolor.g,flowcolor.b)
p[1].Transparency = math.abs((flow.Value/120) - 0.8)
p[1].Transparency = p[1].Transparency + (1/#fadetab)
end
 
for i, v in pairs(fadetab) do
if v[1].Transparency < 0.9 then
v[1].Transparency = v[1].Transparency + (1/#fadetab)
fadetab2[i][1].Transparency = fadetab2[i][1].Transparency + (1/#fadetab)
elseif v[1].Transparency ~= 1 then
v[1].Transparency = 1
v[1].Position = Vector3.new(50000,0,0)
fadetab2[i][1].Transparency = 1
fadetab2[i][1].Position = Vector3.new(50000,0,0)
end
end
 
prevrapos = (RA.CFrame * CFrame.new(0,-1,0)).p
prevlapos = (LA.CFrame * CFrame.new(0,-1,0)).p
end
 
if flow.Value > 140 then
if char.Parent ~= nil then
char:remove()
end
end
 
if flowcooldown > 0 then
flowcooldown = flowcooldown - 1
end
if HWRCooldown > 0 then
HWRCooldown = HWRCooldown - 1
end
if VWRCooldown > 0 then
if hitz ~= nil and VWRCooldown > 0 then
VWRCooldown = VWRCooldown - 1
end
end
if SlideCooldown > 0 then
SlideCooldown = SlideCooldown - 1
end
 
if Action == "HWallRunning" or Action == "VWallRunning" then
flow.Value = flow.Value + 0.24
if flow.Value > 100 then
flow.Value = 100
end
flowcooldown = 40
elseif Action == "Diving" then
flowcooldown = 30
elseif Action == "Sliding" then
flowcooldown = 15
elseif Action == "Standing" or Action == "Sitting" then
if flow.Value > 0 and flowcooldown <= 0 then
flow.Value = flow.Value - 0.37
if flow.Value < 0 then
flow.Value = 0
end
end
end
 
cam.FieldOfView = FOV
prevanimbgcount = animatebgcount
sprint = defsprint + ((flow.Value/100)*2.4)
PrevGravAction = GravAction
Calculate()
end)

Features & Information

found this cool animation parkour KEYS - Shift to run (to enable all the features) - Ctrl or 2 to rest (gives stamina faster and don't need running) - Hold 4 to slide while running - Jump twice while running to dive then parkour roll - Jump in a wall and jump when falling (if it not have reached) to stop from falling down (stands you instead of laying you down) - 90 degrees in a wall (right or left) and jump and run (sadly the animation is not fe and only works in r6)

Community Comments (2)

TWgambleTWgambleApr 23, 2025

it work only PC?

gamersam0812gamersam0812Jun 7, 2025

YAY! R6!

More Scripts for Universal Scripts