Hello!
Recently, since I haven’t been able to use animations for my script, I’ve decided to try CFrame Animation using C0 Lerping.
So far, everything has been working except the Right Shoulder motor.
When the game is in play with the script disabled, it’s completely fine. But when it is enabled, the right arm just teleports to the Left Arm part and becomes unmodifiable. When I try to change the CFrame inputs in the animation part of the script, it completely ignores it.
Here is what it should look like: (game isn’t playing)
But Instead when the script is enabled, it looks like this: (game in play)
And me selecting both right arm and left arm:

My script is here if you need it:
Library = script:WaitForChild('Library')
CFrameData = Library.MarkedCFrames
MotorC0d = {}
function ExecuteForEach(t, func)
for Index, Variation in pairs(t) do
func(Index, Variation)
end
end
ExecuteForEach(CFrameData:GetChildren(), function(Index, Variation)
MotorC0d[string.gsub(Variation.Name, ' ', '')] = Variation.Value
end)
Character = script.Parent
local CFrameAnimation = require(6178888249)
local AnimationLapsed = tick()
function getlap()
return tick()-AnimationLapsed
end
function resetlap()
AnimationLapsed = tick()
end
local speed = 0
local Limbs = {
RA = Character:WaitForChild('Right Arm');
LA = Character:WaitForChild('Left Arm');
HE = Character:WaitForChild('Head');
RL = Character:WaitForChild('Right Leg');
LL = Character:WaitForChild('Left Leg');
TO = Character:WaitForChild('Torso');
HU = Character:WaitForChild('HumanoidRootPart');
}
local CFrameData = {
HE = {
Current = CFrameAnimation.LerpModifier(0,0,0,0,0,0);
Original = MotorC0d['Neck'];
Joint = Limbs.TO['Neck'];
};
RA = {
Current = CFrameAnimation.LerpModifier(0,0,0,0,0,0);
Original = MotorC0d['RightShoulder'];
Joint = Limbs.TO['Right Shoulder'];
};
LA = {
Current = CFrameAnimation.LerpModifier(0,0,0,0,0,0);
Original = MotorC0d['LeftShoulder'];
Joint = Limbs.TO['Right Shoulder'];
};
TO = {
Current = CFrameAnimation.LerpModifier(0,0,0,0,0,0);
Original = MotorC0d['RootJoint'];
Joint = Limbs.HU['RootJoint'];
};
RL = {
Current = CFrameAnimation.LerpModifier(0,0,0,0,0,0);
Original = MotorC0d['RightHip'];
Joint = Limbs.TO['Right Hip'];
};
LL = {
Current = CFrameAnimation.LerpModifier(0,0,0,0,0,0);
Original = MotorC0d['LeftHip'];
Joint = Limbs.TO['Left Hip'];
};
}
Humanoid = Character:WaitForChild('Humanoid')
local MovingEvent
MovingEvent = Humanoid.Running:Connect(function(movement)
speed = movement
end)
function getAnimationState()
return 3
--[[
if Humanoid.FloorMaterial == Enum.Material.Air then
return 1
else
if speed > 0.5 then
return 2
else
return 3
end
end
]]
end
function cframeSetNew()
for _, Limb in pairs(CFrameData) do
Limb.Joint.C0 = Limb.Original * Limb.Current --Limb.Joint.C0:Lerp(Limb.Original * Limb.Current, 0.5)
end
end
function setLimb(limb, cframe)
local ref = CFrameData[limb]
ref.Current = cframe
end
local wav = math.sin
local fix = math.abs
function animateTick()
local CurrentState = getAnimationState()
if CurrentState == 1 then
setLimb('HE', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
setLimb('RA', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
setLimb('LA', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
setLimb('TO', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
setLimb('RL', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
setLimb('LL', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
elseif CurrentState == 2 then
setLimb('HE', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
setLimb('RA', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
setLimb('LA', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
setLimb('TO', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
setLimb('RL', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
setLimb('LL', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
elseif CurrentState == 3 then
setLimb('HE', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,30--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
setLimb('RA', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,getlap()*20--[[ry]] ,0--[[rz]] ))
setLimb('LA', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
setLimb('TO', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,1+wav(getlap())/2--[[z]] ,-30--[[rx]] ,0--[[ry]] ,0--[[rz]] ))
setLimb('RL', CFrameAnimation.LerpModifier(0.3--[[x]] ,1--[[y]] ,0.3--[[z]] ,0--[[rx]] ,-20--[[ry]] ,-20--[[rz]] ))
setLimb('LL', CFrameAnimation.LerpModifier(0--[[x]] ,0--[[y]] ,0--[[z]] ,0--[[rx]] ,20--[[ry]] ,wav(getlap()-20)*20--[[rz]] ))
end
cframeSetNew()
end
while true do
animateTick()
game:GetService('RunService').Heartbeat:Wait()
end
Please do not make fun of my coding techniques or performance if you see any mistakes.
Thank you!