Run it
Copy the script and paste it into your executor.
()
:()[].Parent=.Workspace.Terrain
c = .Workspace.Terrain:():()
c.Parent = .Workspace
c:(.Players.LocalPlayer.Character.HumanoidRootPart.Position)
.Workspace.Terrain:():()
c.Name = .Players.LocalPlayer.Name
.Players.LocalPlayer.Character = c
.Workspace.CurrentCamera.CameraSubject = c:()
Figure = .Players.LocalPlayer.Character
Torso = Figure:()
RightShoulder = Torso:()
LeftShoulder = Torso:()
RightHip = Torso:()
LeftHip = Torso:()
Neck = Torso:()
Humanoid = Figure:()
pose =
currentAnim =
currentAnimInstance =
currentAnimTrack =
currentAnimKeyframeHandler =
currentAnimSpeed =
animTable = {}
animNames = {
idle = {
{ id = , weight = },
{ id = , weight = }
},
walk = {
{ id = , weight = }
},
run = {
{ id = , weight = }
},
jump = {
{ id = , weight = }
},
fall = {
{ id = , weight = }
},
climb = {
{ id = , weight = }
},
sit = {
{ id = , weight = }
},
toolnone = {
{ id = , weight = }
},
toolslash = {
{ id = , weight = }
},
toollunge = {
{ id = , weight = }
},
wave = {
{ id = , weight = }
},
point = {
{ id = , weight = }
},
dance1 = {
{ id = , weight = },
{ id = , weight = },
{ id = , weight = }
},
dance2 = {
{ id = , weight = },
{ id = , weight = },
{ id = , weight = }
},
dance3 = {
{ id = , weight = },
{ id = , weight = },
{ id = , weight = }
},
laugh = {
{ id = , weight = }
},
cheer = {
{ id = , weight = }
},
}
dances = {, , }
emoteNames = { wave = , point = , dance1 = , dance2 = , dance3 = , laugh = , cheer = }
(name, fileList)
(animTable[name] ~= )
_, connection (animTable[name].connections)
connection:()
animTable[name] = {}
animTable[name].count =
animTable[name].totalWeight =
animTable[name].connections = {}
config = .Players.LocalPlayer.Character.Animate:(name)
(config ~= )
.(animTable[name].connections, config.ChildAdded:((child) (name, fileList) ))
.(animTable[name].connections, config.ChildRemoved:((child) (name, fileList) ))
idx =
_, childPart (config:())
(childPart:())
.(animTable[name].connections, childPart.Changed:((property) (name, fileList) ))
animTable[name][idx] = {}
animTable[name][idx].anim = childPart
weightObject = childPart:()
(weightObject == )
animTable[name][idx].weight =
animTable[name][idx].weight = weightObject.Value
animTable[name].count = animTable[name].count +
animTable[name].totalWeight = animTable[name].totalWeight + animTable[name][idx].weight
idx = idx +
(animTable[name].count <= )
idx, anim (fileList)
animTable[name][idx] = {}
animTable[name][idx].anim = .()
animTable[name][idx].anim.Name = name
animTable[name][idx].anim.AnimationId = anim.id
animTable[name][idx].weight = anim.weight
animTable[name].count = animTable[name].count +
animTable[name].totalWeight = animTable[name].totalWeight + anim.weight
(child)
fileList = animNames[child.Name]
(fileList ~= )
(child.Name, fileList)
.Players.LocalPlayer.Character.Animate.ChildAdded:(scriptChildModified)
.Players.LocalPlayer.Character.Animate.ChildRemoved:(scriptChildModified)
name, fileList (animNames)
(name, fileList)
toolAnim =
toolAnimTime =
jumpAnimTime =
jumpAnimDuration =
toolTransitionTime =
fallTransitionTime =
jumpMaxLimbVelocity =
()
oldAnim = currentAnim
(emoteNames[oldAnim] ~= emoteNames[oldAnim] == )
oldAnim =
currentAnim =
currentAnimInstance =
(currentAnimKeyframeHandler ~= )
currentAnimKeyframeHandler:()
(currentAnimTrack ~= )
currentAnimTrack:()
currentAnimTrack:()
currentAnimTrack =
oldAnim
(speed)
speed ~= currentAnimSpeed
currentAnimSpeed = speed
currentAnimTrack:(currentAnimSpeed)
(frameName)
(frameName == )
repeatAnim = currentAnim
(emoteNames[repeatAnim] ~= emoteNames[repeatAnim] == )
repeatAnim =
animSpeed = currentAnimSpeed
(repeatAnim, , Humanoid)
(animSpeed)
(animName, transitionTime, humanoid)
roll = .(, animTable[animName].totalWeight)
origRoll = roll
idx =
(roll > animTable[animName][idx].weight)
roll = roll - animTable[animName][idx].weight
idx = idx +
anim = animTable[animName][idx].anim
(anim ~= currentAnimInstance)
(currentAnimTrack ~= )
currentAnimTrack:(transitionTime)
currentAnimTrack:()
currentAnimSpeed =
currentAnimTrack = humanoid:(anim)
currentAnimTrack.Priority = .AnimationPriority.Core
currentAnimTrack:(transitionTime)
currentAnim = animName
currentAnimInstance = anim
(currentAnimKeyframeHandler ~= )
currentAnimKeyframeHandler:()
currentAnimKeyframeHandler = currentAnimTrack.KeyframeReached:(keyFrameReachedFunc)
toolAnimName =
toolAnimTrack =
toolAnimInstance =
currentToolAnimKeyframeHandler =
(frameName)
(frameName == )
(toolAnimName, , Humanoid)
(animName, transitionTime, humanoid, priority)
roll = .(, animTable[animName].totalWeight)
origRoll = roll
idx =
(roll > animTable[animName][idx].weight)
roll = roll - animTable[animName][idx].weight
idx = idx +
anim = animTable[animName][idx].anim
(toolAnimInstance ~= anim)
(toolAnimTrack ~= )
toolAnimTrack:()
toolAnimTrack:()
transitionTime =
toolAnimTrack = humanoid:(anim)
priority
toolAnimTrack.Priority = priority
toolAnimTrack:(transitionTime)
toolAnimName = animName
toolAnimInstance = anim
currentToolAnimKeyframeHandler = toolAnimTrack.KeyframeReached:(toolKeyFrameReachedFunc)
()
oldAnim = toolAnimName
(currentToolAnimKeyframeHandler ~= )
currentToolAnimKeyframeHandler:()
toolAnimName =
toolAnimInstance =
(toolAnimTrack ~= )
toolAnimTrack:()
toolAnimTrack:()
toolAnimTrack =
oldAnim
(speed)
speed >
(, , Humanoid)
currentAnimInstance currentAnimInstance.AnimationId ==
(speed / )
pose =
emoteNames[currentAnim] ==
(, , Humanoid)
pose =
()
pose =
()
(, , Humanoid)
jumpAnimTime = jumpAnimDuration
pose =
(speed)
(, , Humanoid)
(speed / )
pose =
()
pose =
()
(jumpAnimTime <= )
(, fallTransitionTime, Humanoid)
pose =
()
pose =
()
pose =
()
pose =
(speed)
speed >
pose =
pose =
()
_, kid (Figure:())
kid.className == kid
(tool)
_, c (tool:())
c.Name == c.className ==
c
()
(toolAnim == )
(, toolTransitionTime, Humanoid, .AnimationPriority.Idle)
(toolAnim == )
(, , Humanoid, .AnimationPriority.Action)
(toolAnim == )
(, , Humanoid, .AnimationPriority.Action)
()
RightShoulder.MaxVelocity =
LeftShoulder.MaxVelocity =
RightShoulder:( /)
LeftShoulder:(- /)
RightHip:( /)
LeftHip:(- /)
lastTick =
(time)
amplitude =
frequency =
deltaTime = time - lastTick
lastTick = time
climbFudge =
setAngles =
(jumpAnimTime > )
jumpAnimTime = jumpAnimTime - deltaTime
(pose == jumpAnimTime <= )
(, fallTransitionTime, Humanoid)
(pose == )
(, , Humanoid)
(pose == )
(, , Humanoid)
(pose == pose == pose == pose == pose == )
()
amplitude =
frequency =
setAngles =
(setAngles)
desiredAngle = amplitude * .(time * frequency)
RightShoulder:(desiredAngle + climbFudge)
LeftShoulder:(desiredAngle - climbFudge)
RightHip:(-desiredAngle)
LeftHip:(-desiredAngle)
tool = ()
tool tool:()
animStringValueObject = (tool)
animStringValueObject
toolAnim = animStringValueObject.Value
animStringValueObject.Parent =
toolAnimTime = time +
time > toolAnimTime
toolAnimTime =
toolAnim =
()
()
toolAnim =
toolAnimInstance =
toolAnimTime =
Humanoid.Died:(onDied)
Humanoid.Running:(onRunning)
Humanoid.Jumping:(onJumping)
Humanoid.Climbing:(onClimbing)
Humanoid.GettingUp:(onGettingUp)
Humanoid.FreeFalling:(onFreeFall)
Humanoid.FallingDown:(onFallingDown)
Humanoid.Seated:(onSeated)
Humanoid.PlatformStanding:(onPlatformStanding)
Humanoid.Swimming:(onSwimming)
:().LocalPlayer.Chatted:((msg)
emote =
msg ==
emote = dances[.(, #dances)]
(.(msg, , ) == )
emote = .(msg, )
(.(msg, , ) == )
emote = .(msg, )
(pose == emoteNames[emote] ~= )
(emote, , Humanoid)
)
(, , Humanoid)
pose =
Figure.Parent ~=
_, time = ()
(time)
Humanoid.Health ==
()
()
Figure:()
()
()
.CurrentCamera:()
()
.CurrentCamera.CameraSubject = Figure.Humanoid
.CurrentCamera.CameraType =
Figure.CameraMinZoomDistance =
Figure.CameraMaxZoomDistance =
()R6 very easy

Universal