-- [[ AXIS-SWAPPED POSER FOR REANIMATIONS ]] -- local Player = game:GetService("Players").LocalPlayer local Mouse = Player:GetMouse() -- Gizmos local SelectionBox = Instance.new("SelectionBox", game:GetService("CoreGui")) SelectionBox.Color3 = Color3.fromRGB(0, 255, 255) local arcHandles = Instance.new("ArcHandles", game:GetService("CoreGui")) local moveHandles = Instance.new("Handles", game:GetService("CoreGui")) arcHandles.Visible, moveHandles.Visible = false, false local currentJoint = nil local mode = "Rotate" -- Mobile Sink local function setControls(enabled) local module = Player.PlayerScripts:FindFirstChild("PlayerModule") if module then local controls = require(module):GetControls() if enabled then controls:Enable() else controls:Disable() end end end -- Joint Finder local function getJoint(name) if not Player.Character then return nil end for _, v in pairs(Player.Character:GetDescendants()) do if v:IsA("Motor6D") and (v.Part1 and v.Part1.Name:lower():find(name:lower())) then return v end end return nil end -- UI Setup local sg = Instance.new("ScreenGui", game:GetService("CoreGui")) local main = Instance.new("Frame", sg) main.Size = UDim2.new(0, 200, 0, 360) main.Position = UDim2.new(0.75, 0, 0.2, 0) main.BackgroundColor3 = Color3.fromRGB(25, 25, 25) main.Active, main.Draggable = true, true local function createLimb(name, size, pos, color) local btn = Instance.new("TextButton", main) btn.Size = size; btn.Position = pos; btn.BackgroundColor3 = color; btn.Text = "" btn.BorderSizePixel = 0 btn.MouseButton1Click:Connect(function() local joint = getJoint(name) if joint then currentJoint = joint SelectionBox.Adornee = joint.Part1 arcHandles.Adornee = joint.Part1 moveHandles.Adornee = joint.Part1 arcHandles.Visible = (mode == "Rotate") moveHandles.Visible = (mode == "Move") end end) end -- Dummy Layout createLimb("Head", UDim2.new(0, 45, 0, 45), UDim2.new(0.38, 0, 0.05, 0), Color3.fromRGB(255, 235, 50)) createLimb("Torso", UDim2.new(0, 80, 0, 100), UDim2.new(0.3, 0, 0.2, 0), Color3.fromRGB(0, 120, 200)) createLimb("Left Arm", UDim2.new(0, 40, 0, 100), UDim2.new(0.08, 0, 0.2, 0), Color3.fromRGB(255, 235, 50)) createLimb("Right Arm", UDim2.new(0, 40, 0, 100), UDim2.new(0.72, 0, 0.2, 0), Color3.fromRGB(255, 235, 50)) createLimb("Left Leg", UDim2.new(0, 38, 0, 105), UDim2.new(0.3, 0, 0.5, 0), Color3.fromRGB(150, 200, 50)) createLimb("Right Leg", UDim2.new(0, 38, 0, 105), UDim2.new(0.51, 0, 0.5, 0), Color3.fromRGB(150, 200, 50)) -- [[ THE SWAPPED AXIS MATH ]] -- moveHandles.MouseButton1Down:Connect(function() setControls(false) end) moveHandles.MouseButton1Up:Connect(function() setControls(true) end) arcHandles.MouseButton1Down:Connect(function() setControls(false) end) arcHandles.MouseButton1Up:Connect(function() setControls(true) end) -- SWAPPED MOVE: X and Z are flipped to fix reanimation offsets moveHandles.MouseDrag:Connect(function(face, distance) if currentJoint then local normal = Vector3.FromNormalId(face) -- Manual Swap Logic: local swappedNormal = Vector3.new(normal.Z, normal.Y, normal.X) currentJoint.C0 *= CFrame.new(swappedNormal * (distance / 20)) end end) -- SWAPPED ROTATE: X and Z rings are flipped arcHandles.MouseDrag:Connect(function(axis, angle) if currentJoint then local axisVec = Vector3.FromAxis(axis) -- Manual Swap Logic: local swappedAxis = Vector3.new(axisVec.Z, axisVec.Y, axisVec.X) currentJoint.C0 *= CFrame.fromAxisAngle(swappedAxis, angle) end end) -- Mode Button local modeBtn = Instance.new("TextButton", main) modeBtn.Size = UDim2.new(1, 0, 0, 40); modeBtn.Position = UDim2.new(0, 0, 0.88, 0) modeBtn.Text = "MODE: ROTATE" modeBtn.MouseButton1Click:Connect(function() mode = (mode == "Rotate") and "Move" or "Rotate" modeBtn.Text = "MODE: " .. mode:upper() if currentJoint then arcHandles.Visible = (mode == "Rotate") moveHandles.Visible = (mode == "Move") end end)