Little test script I was playing with. It only handles rotations to C1s. That CFrame.new constructor that uses the whole matrix was the only way I was able to get it to convert the C1 rotations to C0 without messing up the position of parts on the second Dummy. Something to explore further I guess. There’s prob a more elegant way to do that. I was testing with R15s, but should work with any Motor6D rig.
Anyway, maybe this helps, maybe not. Was educational for me! I wouldn’t mark this one either (even if it turns out to be useful). With luck, someone who has experience with these things will show up and share some insights.
Best of luck with the custom animator moving forward! Look forward to seeing the progress.
-- Set variables for Dummies
local Dummy_orig = workspace.Dummy0 -- model with changes to C1
local Dummy_new = workspace.Dummy1 -- update this one to same thing but with changes to C0
------------------------------------------
-- This part grabs all the motors in the Dummy_orig and moves the
-- C1 CFrames for each motor around a bit (to have something to test against)
local motors = {}
-- get a list of the motors in the Dummy_orig
for _,child in pairs(Dummy_orig:GetDescendants()) do
if child:IsA("Motor6D") then
table.insert(motors, child)
end
end
-- and jumble the model up a bit
for i = 0, 10 do
wait(.1)
for _,motor in pairs(motors) do
motor.C1 = motor.C1 * CFrame.Angles(math.rad(2),math.rad(0),math.rad(1))
end
end
------------------------------------------
------------------------------------------
-- This last part makes Dummy_new match final pose of Dummy_orig
-- by changing only C0s
-- Assumes dummys are built the same (although it should error if not)
for _,child in pairs(Dummy_orig:GetDescendants()) do
if child:IsA("Motor6D") then
-- Get all the position and rotation components for old C1:inv
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = child.C1:Inverse():GetComponents()
-- Find the matching motor in the new Dummy
local copyToMotor = Dummy_new:FindFirstChild(child.Name, true)
assert(copyToMotor, child.Name.." could not be found")
-- Create new C0 for Dummy_new using just rotation parts of old C1:inv
x,y,z = copyToMotor.C0.Position.X, copyToMotor.C0.Position.Y, copyToMotor.C0.Position.Z -- not translating C0
copyToMotor.C0 = CFrame.new(x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22)
end
end