Run it
Copy the script and paste it into your executor.
Players = :()
RunService = :()
UserInputService = :()
Workspace = :()
TweenService = :()
player = Players.LocalPlayer
player:().Icon =
character = player.Character player.CharacterAdded:()
humanoid = character:()
rootPart = character:()
camera = Workspace.CurrentCamera
humanoid.WalkSpeed =
.fopFrameworkRunning
(player.Name.. )
.fopFrameworkRunning =
player.CharacterRemoving:(()
.fopFrameworkRunning =
)
viewmodel = .()
viewmodel.Name =
viewmodel.Parent = camera
vHumanoid = .()
vHumanoid.Parent = viewmodel
vHumanoid.DisplayDistanceType = .HumanoidDisplayDistanceType.None
(name)
arm = .()
arm.Name = name
arm.Size = .(, , )
arm.CanCollide =
arm.CastShadow =
arm.Massless =
arm.Parent = viewmodel
arm
lArm = ()
rArm = ()
()
shirt = character:()
shirt
vShirt = viewmodel:() .(, viewmodel)
vShirt.ShirtTemplate = shirt.ShirtTemplate
charLeft = character:() character:()
charRight = character:() character:()
charLeft lArm.Color = charLeft.Color
charRight rArm.Color = charRight.Color
screenGui = .()
screenGui.Name =
screenGui.ResetOnSpawn =
screenGui.Parent = player.PlayerGui
frame = .()
frame.Size = .(, , , )
frame.Position = .(, , , -)
frame.BackgroundColor3 = .(, , )
frame.BackgroundTransparency =
frame.BorderSizePixel =
frame.Parent = screenGui
corner = .()
corner.CornerRadius = .(, )
corner.Parent = frame
label = .()
label.Size = .(, , , )
label.BackgroundTransparency =
label.TextColor3 = .(, , )
label.TextSize =
label.Font = .Font.GothamBold
label.Parent = frame
()
character.ChildAdded:(syncAppearance)
Workspace.Gravity =
player.CameraMaxZoomDistance =
humanoid.JumpPower =
Config = {
BaseSpeed = ,
CrouchSpeed = ,
SprintSpeed = ,
JUMP_BOOST = ,
BaseFOV = ,
SprintFOV = ,
MaxFOV = ,
MouseTiltSens = ,
BobIntensity = ,
StrafeTilt = ,
JumpBuildMax = ,
JumpBuildRate = ,
JumpBuildDecay = ,
JumpBuildBoost = ,
}
armState = {
lArmPos = .(-, , ),
rArmPos = .( , , ),
lArmAngX = ,
rArmAngX = ,
lArmAngY = ,
rArmAngY = ,
lArmAngZ = ,
rArmAngZ = ,
}
State = {
Crouching = ,
Sprinting = ,
IsTrimping = ,
IsThirdPerson = ,
CanSwitch = ,
OnGround = ,
WasOnGround = ,
}
vmBobTime =
bobTime =
swayAmount = .(, )
bobOffset = .identity
currentTilt =
currentFOV = Config.BaseFOV
currentStrafeTilt =
builtSpeed =
rayParams = RaycastParams.()
rayParams.FilterDescendantsInstances = {character}
currentShiftLockAngle =
()
State.CanSwitch
State.CanSwitch =
State.IsThirdPerson =
player.CameraMaxZoomDistance =
player.CameraMinZoomDistance =
.()
State.CanSwitch =
()
State.CanSwitch
State.CanSwitch =
State.IsThirdPerson =
.(()
start = player.CameraMinZoomDistance
steps =
i = , steps
alpha = i / steps
current = start * ( - alpha)
player.CameraMaxZoomDistance = .(current, )
player.CameraMinZoomDistance = .(current, )
.()
player.CameraMaxZoomDistance =
player.CameraMinZoomDistance =
.()
State.CanSwitch =
)
()
State.IsThirdPerson
()
()
()
moveDir = .(, , )
camCF = camera.CFrame
forward = .(camCF.LookVector.X, , camCF.LookVector.Z).Unit
right = .(camCF.RightVector.X, , camCF.RightVector.Z).Unit
UserInputService:(.KeyCode.W) moveDir += forward
UserInputService:(.KeyCode.S) moveDir -= forward
UserInputService:(.KeyCode.A) moveDir -= right
UserInputService:(.KeyCode.D) moveDir += right
thumbstick = UserInputService:()
#thumbstick >
leftStick = UserInputService:(thumbstick[])
_, input (leftStick)
input.KeyCode == .KeyCode.Thumbstick1
stickDir = .(input.Position.X, , -input.Position.Y)
stickDir.Magnitude >
fullDir = (forward * -stickDir.Z + right * stickDir.X)
fullDir.Magnitude >
moveDir += fullDir.Unit
moveDir.Magnitude > moveDir = moveDir.Unit
moveDir
RunService.Heartbeat:((dt)
rootPart humanoid
currentVel = rootPart.AssemblyLinearVelocity
flatVel = .(currentVel.X, , currentVel.Z)
verticalY = currentVel.Y
moveDir = ()
onGround = humanoid.FloorMaterial ~= .Material.Air
State.OnGround = onGround
justLanded = onGround State.WasOnGround
State.WasOnGround = onGround
onGround justLanded
builtSpeed = .(builtSpeed - Config.JumpBuildDecay * dt, )
baseMax = State.Crouching (Config.CrouchSpeed * )
State.Sprinting (Config.SprintSpeed * )
(Config.BaseSpeed * )
maxS = .(baseMax + builtSpeed, Config.JumpBuildMax)
accelBase = State.Crouching Config.CrouchSpeed
State.Sprinting Config.SprintSpeed
Config.BaseSpeed
accel = accelBase *
moveDir.Magnitude >
flatVel += moveDir * accel * dt *
frictionMult = ( onGround)
State.Sprinting
flatVel *= frictionMult
flatVel.Magnitude > maxS
flatVel = flatVel.Unit * maxS
(normal)
flatVel.Magnitude <
normal.Y < normal.Y >
launch = flatVel.Magnitude * ( - normal.Y) *
verticalY < launch
verticalY = launch
humanoid:(.HumanoidStateType.Freefall)
State.IsTrimping =
.(normal.Y) <
sideDir = .(normal.X, , normal.Z)
dot = flatVel.Unit:(-sideDir)
dot >
sideBoost = flatVel.Magnitude * dot *
verticalY < sideBoost
verticalY = sideBoost
flatVel = flatVel + sideDir * flatVel.Magnitude *
humanoid:(.HumanoidStateType.Freefall)
State.IsTrimping =
forwardRayDir = (flatVel.Magnitude > flatVel.Unit rootPart.CFrame.LookVector) * + .(, -, )
forwardRay = Workspace:(rootPart.Position, forwardRayDir, rayParams)
forwardRay (forwardRay.Normal)
sideOffsets = {
.( rootPart.CFrame.RightVector.X, , rootPart.CFrame.RightVector.Z) * ,
.(-rootPart.CFrame.RightVector.X, , -rootPart.CFrame.RightVector.Z) * ,
}
_, offset (sideOffsets)
sideRay = Workspace:(rootPart.Position, offset + .(, -, ), rayParams)
sideRay (sideRay.Normal)
State.IsTrimping verticalY >
Workspace.Gravity =
State.IsTrimping =
Workspace.Gravity = .(Workspace.Gravity + ( - Workspace.Gravity) * * dt, )
flatVel.Magnitude > maxS
flatVel = flatVel.Unit * maxS
rootPart.AssemblyLinearVelocity = .(flatVel.X, verticalY, flatVel.Z)
)
humanoid.Jumping:(()
vel = rootPart.AssemblyLinearVelocity
flatSpeed = .(vel.X, , vel.Z).Magnitude
builtSpeed = .(builtSpeed + Config.JumpBuildRate, Config.JumpBuildMax)
.()
boost = Config.JUMP_BOOST + (builtSpeed / Config.JumpBuildMax) * (Config.JumpBuildBoost - Config.JUMP_BOOST)
rootPart.AssemblyLinearVelocity = .(vel.X * boost, rootPart.AssemblyLinearVelocity.Y, vel.Z * boost)
)
()
lArm lArm.Parent lArm = ()
rArm rArm.Parent rArm = ()
RunService.RenderStepped:((dt)
rootPart humanoid
velocity = rootPart.AssemblyLinearVelocity
velY = velocity.Y
speed = .(velocity.X, , velocity.Z).Magnitude
isMoving = speed >
isFalling = humanoid.FloorMaterial == .Material.Air
mouseDelta = UserInputService:()
swayAmount = swayAmount:(mouseDelta, )
swayCF = .(
.(swayAmount.Y * ),
.(swayAmount.X * ),
.(swayAmount.X * )
)
label.Text = .(speed) ..
strafeInput =
UserInputService:(.KeyCode.A) strafeInput -=
UserInputService:(.KeyCode.D) strafeInput +=
thumbstick = UserInputService:()
#thumbstick >
leftStick = UserInputService:(thumbstick[])
_, input (leftStick)
input.KeyCode == .KeyCode.Thumbstick1
.(input.Position.X) >
strafeInput = input.Position.X
targetStrafeTilt = .(strafeInput * Config.StrafeTilt * (isMoving ))
currentStrafeTilt = currentStrafeTilt + (targetStrafeTilt - currentStrafeTilt) * * dt
speedRatio = .(speed / Config.JumpBuildMax, , )
targetFOV
State.Sprinting isMoving
targetFOV = Config.SprintFOV + (Config.MaxFOV - Config.SprintFOV) * speedRatio
State.Crouching
targetFOV = Config.BaseFOV -
targetFOV = Config.BaseFOV + (Config.SprintFOV - Config.BaseFOV) * speedRatio
currentFOV = currentFOV + (targetFOV - currentFOV) * * dt
vmBobTime += dt * (isMoving (speed * ) )
pump = isMoving .(vmBobTime) *
verticalBob = isMoving (.(vmBobTime) * ) (.(vmBobTime * ) * )
horizontalSway = isMoving (.(vmBobTime * ) * )
lArm.Transparency = State.IsThirdPerson
rArm.Transparency = State.IsThirdPerson
State.IsThirdPerson
targetAngle = .(velocity.X, velocity.Z)
speed >
currentShiftLockAngle = currentShiftLockAngle + (targetAngle - currentShiftLockAngle) * * dt
camCF = camera.CFrame
flatLook = .(camCF.LookVector.X, , camCF.LookVector.Z).Unit
rootPart.CFrame = rootPart.CFrame:(.(rootPart.Position) * .(, .(-flatLook.X, -flatLook.Z), ), * dt)
State.IsThirdPerson
camera.FieldOfView = currentFOV
vmRoot = camera.CFrame * swayCF * .(horizontalSway, - + verticalBob, -)
()
isOnGround = humanoid.FloorMaterial ~= .Material.Air
velY > isOnGround
jumpBlend = .((velY - ) / , , )
{
lArmPos = .(-, * jumpBlend, - * jumpBlend),
rArmPos = .( , * jumpBlend, - * jumpBlend),
lArmAngX = - * jumpBlend, rArmAngX = - * jumpBlend,
lArmAngY = , rArmAngY = ,
lArmAngZ = * jumpBlend, rArmAngZ = - * jumpBlend,
}
velY < - isOnGround
fallBlend = .((-velY - ) / , , )
{
lArmPos = .(-, * fallBlend, * fallBlend),
rArmPos = .( , * fallBlend, * fallBlend),
lArmAngX = + * fallBlend, rArmAngX = + * fallBlend,
lArmAngY = , rArmAngY = ,
lArmAngZ = * fallBlend, rArmAngZ = - * fallBlend,
}
isMoving
runBlend = .((speed - ) / , , )
swing = .(vmBobTime) * * runBlend
{
lArmPos = .(-, verticalBob, pump * * runBlend),
rArmPos = .( , verticalBob, -pump * * runBlend),
lArmAngX = , rArmAngX = ,
lArmAngY = swing, rArmAngY = -swing,
lArmAngZ = * runBlend, rArmAngZ = - * runBlend,
}
breatheZ = .(vmBobTime * ) *
breatheY = .(vmBobTime * ) *
{
lArmPos = .(- + horizontalSway, breatheY, ),
rArmPos = .( - horizontalSway, breatheY, ),
lArmAngX = , rArmAngX = ,
lArmAngY = , rArmAngY = ,
lArmAngZ = breatheZ + , rArmAngZ = -breatheZ - ,
}
targets = ()
lerpSpeed = * dt
armState.lArmPos = armState.lArmPos:(targets.lArmPos, lerpSpeed)
armState.rArmPos = armState.rArmPos:(targets.rArmPos, lerpSpeed)
armState.lArmAngX = armState.lArmAngX + (targets.lArmAngX - armState.lArmAngX) * lerpSpeed
armState.rArmAngX = armState.rArmAngX + (targets.rArmAngX - armState.rArmAngX) * lerpSpeed
armState.lArmAngY = armState.lArmAngY + (targets.lArmAngY - armState.lArmAngY) * lerpSpeed
armState.rArmAngY = armState.rArmAngY + (targets.rArmAngY - armState.rArmAngY) * lerpSpeed
armState.lArmAngZ = armState.lArmAngZ + (targets.lArmAngZ - armState.lArmAngZ) * lerpSpeed
armState.rArmAngZ = armState.rArmAngZ + (targets.rArmAngZ - armState.rArmAngZ) * lerpSpeed
lArm.CFrame = vmRoot
* .(armState.lArmPos)
* .(.(armState.lArmAngX), .(armState.lArmAngY), .(armState.lArmAngZ))
rArm.CFrame = vmRoot
* .(armState.rArmPos)
* .(.(armState.rArmAngX), .(armState.rArmAngY), .(armState.rArmAngZ))
targetTilt = .(-mouseDelta.X * Config.MouseTiltSens, -, )
currentTilt = currentTilt + (.(targetTilt) - currentTilt) * * dt
bTime = () *
breathing = .(.(bTime * ) * , .(bTime) * , )
isMoving isFalling
bobTime += dt * (speed * )
bobOffset = .(.(bobTime / ) * , .(bobTime) * , )
bobOffset = bobOffset:(.identity, )
State.IsThirdPerson
camera.CFrame = camera.CFrame * .(breathing) * bobOffset * .(, , currentTilt + currentStrafeTilt)
camera.CFrame = camera.CFrame * .(, , currentTilt + currentStrafeTilt)
crouchGoal = State.Crouching -
humanoid.CameraOffset = humanoid.CameraOffset:(.(, crouchGoal, ), * dt)
)
UserInputService.InputBegan:((i, gp)
gp
i.KeyCode == .KeyCode.C i.KeyCode == .KeyCode.ButtonB
State.Crouching =
State.Sprinting =
i.KeyCode == .KeyCode.LeftShift i.KeyCode == .KeyCode.ButtonL3
State.Crouching
State.Sprinting =
i.KeyCode == .KeyCode.Z i.KeyCode == .KeyCode.ButtonR3
()
)
UserInputService.InputEnded:((i, gp)
gp
i.KeyCode == .KeyCode.C i.KeyCode == .KeyCode.ButtonB
State.Crouching =
i.KeyCode == .KeyCode.LeftShift i.KeyCode == .KeyCode.ButtonL3
State.Sprinting =
)
isMobile = UserInputService.TouchEnabled UserInputService.KeyboardEnabled
isMobile
sprintGui = .()
sprintGui.Name =
sprintGui.ResetOnSpawn =
sprintGui.IgnoreGuiInset =
sprintGui.Parent = player.PlayerGui
sprintBtn = .()
sprintBtn.Size = .(, , , )
sprintBtn.Position = .(, , , )
sprintBtn.AnchorPoint = .(, )
sprintBtn.BackgroundColor3 = .(, , )
sprintBtn.BackgroundTransparency =
sprintBtn.BorderSizePixel =
sprintBtn.Text =
sprintBtn.TextColor3 = .(, , )
sprintBtn.TextScaled =
sprintBtn.Font = .Font.GothamBold
sprintBtn.Parent = sprintGui
btnCorner = .()
btnCorner.CornerRadius = .(, )
btnCorner.Parent = sprintBtn
btnStroke = .()
btnStroke.Color = .(, , )
btnStroke.Thickness =
btnStroke.Transparency =
btnStroke.Parent = sprintBtn
(val)
State.Crouching
State.Sprinting = val
sprintBtn.BackgroundTransparency = val
sprintBtn.TextColor3 = val
.(, , )
.(, , )
sprintBtn.InputBegan:((input)
input.UserInputType == .UserInputType.Touch
()
)
sprintBtn.InputEnded:((input)
input.UserInputType == .UserInputType.Touch
()
)
()
armState.lArmPos = .(-, , )
armState.rArmPos = .( , , )
armState.lArmAngX =
armState.rArmAngX =
armState.lArmAngY =
armState.rArmAngY =
armState.lArmAngZ =
armState.rArmAngZ =
lArm lArm.Parent lArm:()
rArm rArm.Parent rArm:()
lArm = ()
rArm = ()
()
UserInputService.InputBegan:((i, gp)
gp
i.KeyCode == .KeyCode.Minus
()
)
isMobile
perspectiveGui = .()
perspectiveGui.Name =
perspectiveGui.ResetOnSpawn =
perspectiveGui.IgnoreGuiInset =
perspectiveGui.Parent = player.PlayerGui
perspectiveBtn = .()
perspectiveBtn.Size = .(, , , )
perspectiveBtn.Position = .(, , , )
perspectiveBtn.AnchorPoint = .(, )
perspectiveBtn.BackgroundColor3 = .(, , )
perspectiveBtn.BackgroundTransparency =
perspectiveBtn.BorderSizePixel =
perspectiveBtn.Text =
perspectiveBtn.TextColor3 = .(, , )
perspectiveBtn.TextScaled =
perspectiveBtn.Font = .Font.GothamBold
perspectiveBtn.Parent = perspectiveGui
perspCorner = .()
perspCorner.CornerRadius = .(, )
perspCorner.Parent = perspectiveBtn
perspStroke = .()
perspStroke.Color = .(, , )
perspStroke.Thickness =
perspStroke.Transparency =
perspStroke.Parent = perspectiveBtn
perspectiveBtn.MouseButton1Click:(()
()
.()
perspectiveBtn.Text = State.IsThirdPerson
)
resetGui = .()
resetGui.Name =
resetGui.ResetOnSpawn =
resetGui.IgnoreGuiInset =
resetGui.Parent = player.PlayerGui
resetBtn = .()
resetBtn.Size = .(, , , )
resetBtn.Position = .(, , , )
resetBtn.AnchorPoint = .(, )
resetBtn.BackgroundColor3 = .(, , )
resetBtn.BackgroundTransparency =
resetBtn.BorderSizePixel =
resetBtn.Text =
resetBtn.TextColor3 = .(, , )
resetBtn.TextScaled =
resetBtn.Font = .Font.GothamBold
resetBtn.Parent = resetGui
resetCorner = .()
resetCorner.CornerRadius = .(, )
resetCorner.Parent = resetBtn
resetStroke = .()
resetStroke.Color = .(, , )
resetStroke.Thickness =
resetStroke.Transparency =
resetStroke.Parent = resetBtn
dragging =
dragStartPos = .()
btnStartPos = .()
wasDrag =
DRAG_THRESHOLD =
resetBtn.InputBegan:((input)
input.UserInputType == .UserInputType.Touch
dragging =
wasDrag =
dragStartPos = .(input.Position.X, input.Position.Y)
absPos = resetBtn.AbsolutePosition
absSize = resetBtn.AbsoluteSize
btnStartPos = .(
absPos.X + absSize.X * ,
absPos.Y + absSize.Y *
)
)
UserInputService.TouchMoved:((input)
dragging
delta = .(input.Position.X, input.Position.Y) - dragStartPos
delta.Magnitude > DRAG_THRESHOLD
wasDrag =
wasDrag
vp = camera.ViewportSize
newX = (btnStartPos.X + delta.X) / vp.X
newY = (btnStartPos.Y + delta.Y) / vp.Y
newX = .(newX, , )
newY = .(newY, , )
resetBtn.Position = .(newX, , newY, )
)
UserInputService.TouchEnded:((input)
dragging
dragging =
wasDrag
resetBtn.BackgroundTransparency =
()
.()
resetBtn.BackgroundTransparency =
)
isMobile
.()
:():(, {
Title = ,
Text = ,
Duration = ,
})
This script involves trimping very easily when executing i allow you to copy the script and yes you can change the settings if you want. Trimping is very easy just run up a part thats like a ramp doesnt have to be one but like a upside down right angle rotate to the right a bit. Bhopping - Jumping to get faster No Delay When Moving - When Moving There Is No Delay Making it more easier Some Games May Work - Many Games have their own framework or character movement which wont allow this script to work. I spent the last 3 months working on this. As of right i know how scripting works. Thanks to Lazumn(burstoutmee) for giving us this script many things have been taken off. and rewritten by me. More better scripts comes in the future! Im not sure about sprinting like the sprint buttons and to hold shift to sprint.

Universal