Oh my god I feel so dumb now, my silly brain told me to make a whole system to render the lower frames by replicating a fake character over the original and adding the low frame rate on the fake character-
I genuinely need to learn more about Motor6Ds omg, but really good job on this btw!!
And for anyone who wants this to work on R6, you can just do these few changes I did myself and it works perfectly fine.
Replace the entire Character_Joint_References
table with:
local Character_Joint_References = {
-- R15
UpperTorso = 'Waist',
LowerTorso = 'Root',
RightUpperArm = 'RightShoulder',
RightLowerArm = 'RightElbow',
RightHand = 'RightWrist',
Head = 'Neck',
LeftUpperArm = 'LeftShoulder',
LeftLowerArm = 'LeftElbow',
LeftHand = 'LeftWrist',
LeftFoot = 'LeftAnkle',
LeftLowerLeg = 'LeftKnee',
LeftUpperLeg = 'LeftHip',
RightFoot = 'RightAnkle',
RightLowerLeg = 'RightKnee',
RightUpperLeg = 'RightHip',
-- R6
HumanoidRootPart = 'RootJoint',
Torso = {'Left Hip', 'Left Shoulder', 'Neck', 'Right Hip', 'Right Shoulder'}
}
(Or you can just add the R6 part, same thing lol)
And replace the function readTransforms
with:
function readTransforms(Character)
Character_Transform_Cache[Character] = {}
for JointParent,JointName in pairs(Character_Joint_References) do
if typeof(JointName) == 'table' then
for _, v in JointName do
if Character:FindFirstChild(JointParent) and Character[JointParent]:FindFirstChild(v) then
local Joint = Character[JointParent][v]
Character_Transform_Cache[Character][Joint] = Joint.Transform
end
end
else
if Character:FindFirstChild(JointParent) and Character[JointParent]:FindFirstChild(JointName) then
local Joint = Character[JointParent][JointName]
Character_Transform_Cache[Character][Joint] = Joint.Transform
end
end
end
end
The code makes checks if the joints do exist so it was really simple to adapt