I have been looking at this foot planting script by AxisAngle and I was wondering how he got the joints of the legs to rotate on more than just one axis using the motor6Ds in the torso of the character. My question is how do I calculate the C0 and C1 of the joints to get it to rotate on the axis I want it to? If that makes any sense? I can't really wrap my head around the math behind the script and I was wondering if anyone could help me. Here is his script.

--Script by TreyReynolds

wait(1)
User = game.Players.LocalPlayer
Humanoid = User.Character.Humanoid
Torso = User.Character.Torso
L_Hip = Torso["Left Hip"]
R_Hip = Torso["Right Hip"]

function ArcTan(x, y)
	r = math.atan(y / x)
if x < 0 then
	r = r + math.pi
end
return r
end

vel = Vector3.new()
while true do
	wait()
	if Torso.Velocity.magnitude > 1 then
		m = (vel - Torso.Velocity).magnitude / Humanoid.WalkSpeed
		vel = (Torso.Velocity * m + vel * 2) / (m + 2)
		v = Torso.CFrame:pointToObjectSpace(vel + Torso.Position)
		L_a = ArcTan(v.x, -v.z)
		R_a = 3.1416 - ArcTan(v.x, v.z)
		L_Hip.C1 = CFrame.new(0, 1, 0)*CFrame.Angles(0, R_a, 0)
		R_Hip.C1 = CFrame.new(0, 1, 0)*CFrame.Angles(0, L_a, 0)
		L_Hip.C0 = CFrame.new(-0.5, -1, 0)*CFrame.Angles(0, R_a, 0)
		R_Hip.C0 = CFrame.new(0.5, -1, 0)*CFrame.Angles(0, L_a, 0)
		L_Hip.MaxVelocity = Torso.Velocity.magnitude / 100
		R_Hip.MaxVelocity = Torso.Velocity.magnitude / 100
	else
		L_Hip.C1 = CFrame.new(0, 1, 0)*CFrame.Angles(0, -1.57, 0)
		R_Hip.C1 = CFrame.new(0, 1, 0)*CFrame.Angles(0, 1.57, 0)
		L_Hip.C0 = CFrame.new(-0.5, -1, 0)*CFrame.Angles(0, -1.57, 0)
		R_Hip.C0 = CFrame.new(0.5, -1, 0)*CFrame.Angles(0, 1.57, 0)
	end
end