Arms keep falling off

I am trying to make skins for a game I’m working on, but the arms keep falling off if I move them inwards or outwards from their current position. Is it not possible to have the arms in a different position? I am using a mesh for the torso so where the arms should go, means they need to be moved in.

Also with the skin the head I made won’t stay it just falls apart so I’m not sure if I’m doing something wrong. I’m new to making such things like this, I tried to search to see if I could find anything to help me but I don’t understand some of them.

The torso and legs are fine and are working currectly with the script that is in it (I was following a video series to make a game to practise coding).

Sorry if I put this in the wrong area, I wasn’t sure which topic to put this in.

1 Like

Are you doing this via. a script? If so, send the script. Arms are welded to the character but are unanchored, so if they fall off then that indicates the weld was broken.

1 Like

This was the script that was provided in the video I was using

Figure = script.Parent

RunService = game:GetService(“RunService”)

Creator = Figure:FindFirstChild(“Creator”)

Humanoid = Figure:WaitForChild(“Humanoid”)
Head = Figure:WaitForChild(“Head”)
Torso = Figure:WaitForChild(“Torso”)

Neck = Torso:WaitForChild(“Neck”)
LeftShoulder = Torso:WaitForChild(“Left Shoulder”)
RightShoulder = Torso:WaitForChild(“Right Shoulder”)
LeftHip = Torso:WaitForChild(“Left Hip”)
RightHip = Torso:WaitForChild(“Right Hip”)

for i, v in pairs({–[[Neck, ]]LeftShoulder, RightShoulder, LeftHip, RightHip}) do
if v and v.Parent then
v.DesiredAngle = 0
v.CurrentAngle = 0
end
end

Pose = “None”
LastPose = Pose
PoseTime = tick()

ToolAnimTime = 0

function SetPose(pose)
LastPose = Pose
Pose = pose
PoseTime = tick()
end

function OnRunning(Speed)
if Speed > 0 then
SetPose(“Running”)
else
SetPose(“Standing”)
end
end

function OnDied()
SetPose(“Dead”)
end

function OnJumping()
SetPose(“Jumping”)
end

function OnClimbing()
SetPose(“Climbing”)
end

function OnGettingUp()
SetPose(“GettingUp”)
end

function OnFreeFall()
SetPose(“FreeFall”)
end

function OnFallingDown()
SetPose(“FallingDown”)
end

function OnSeated()
SetPose(“Seated”)
end

function OnPlatformStanding()
SetPose(“PlatformStanding”)
end

function OnSwimming(Speed)
return OnRunning(Speed)
end

function MoveJump()
RightShoulder.MaxVelocity = 0.15
LeftShoulder.MaxVelocity = 0.15
RightShoulder.DesiredAngle = 0.5
LeftShoulder.DesiredAngle = -0.5
RightHip.DesiredAngle = -0.5
LeftHip.DesiredAngle = 0.5
end

function MoveFreeFall()
RightShoulder.MaxVelocity = 0.15
LeftShoulder.MaxVelocity = 0.15
RightShoulder.DesiredAngle = 0.5
LeftShoulder.DesiredAngle = -0.5
RightHip.DesiredAngle = -0.5
LeftHip.DesiredAngle = 0.5
end

function MoveSit()
RightShoulder.MaxVelocity = 0.15
LeftShoulder.MaxVelocity = 0.15
RightShoulder.DesiredAngle = (math.pi / 2)
LeftShoulder.DesiredAngle = -(math.pi / 2)
RightHip.DesiredAngle = 1
LeftHip.DesiredAngle = -1
end

function GetTool()
for i, v in pairs(Figure:GetChildren()) do
if v:IsA(“Tool”) then
return v
end
end
end

function GetToolAnim(Tool)
for i, v in pairs(Tool:GetChildren()) do
if v:IsA(“StringValue”) and v.Name == “ToolAnim” then
return v
end
end
return nil
end

function AnimateTool()

if (ToolAnim == "None") then
	return
end

if (ToolAnim == "Slash") then
	RightShoulder.MaxVelocity = 0.5
	RightShoulder.DesiredAngle = 0
	return
end

if (ToolAnim == "Lunge") then
	RightShoulder.MaxVelocity = 0.5
	LeftShoulder.MaxVelocity = 0.5
	RightHip.MaxVelocity = 0.5
	LeftHip.MaxVelocity = 0.5
	RightShoulder.DesiredAngle = (math.pi / 2)
	LeftShoulder.DesiredAngle = 0 
	RightHip.DesiredAngle = (math.pi / 2)
	LeftHip.DesiredAngle = 1
	return
end

end

function Move(Time)
local LimbAmplitude
local LimbFrequency
local NeckAmplitude
local NeckFrequency
local NeckDesiredAngle

if (Pose == "Jumping") then
	MoveJump()
	return
elseif (Pose == "FreeFall") then
	MoveFreeFall()
	return
elseif (Pose == "Seated") then
	MoveSit()
	return
end

local ClimbFudge = 0

if (Pose == "Running") then
	RightShoulder.MaxVelocity = 0.15
	LeftShoulder.MaxVelocity = 0.15
	LimbAmplitude = 1
	LimbFrequency = 9
	NeckAmplitude = 0
	NeckFrequency = 0
	NeckDesiredAngle = 0
	--[[if Creator and Creator.Value and Creator.Value:IsA("Player") and Creator.Value.Character then
		local CreatorCharacter = Creator.Value.Character
		local CreatorHead = CreatorCharacter:FindFirstChild("Head")
		if CreatorHead then
			local TargetPosition = CreatorHead.Position
			local Direction = Torso.CFrame.lookVector
			local HeadPosition = Head.Position
			NeckDesiredAngle = ((((HeadPosition - TargetPosition).Unit):Cross(Direction)).Y / 4)
		end
	end]]
elseif (Pose == "Climbing") then
	RightShoulder.MaxVelocity = 0.5
	LeftShoulder.MaxVelocity = 0.5
	LimbAmplitude = 1
	LimbFrequency = 9
	NeckAmplitude = 0
	NeckFrequency = 0
	NeckDesiredAngle = 0
	ClimbFudge = math.pi
else
	LimbAmplitude = 0.1
	LimbFrequency = 1
	NeckAmplitude = 0.25
	NeckFrequency = 1.25
end

NeckDesiredAngle = ((not NeckDesiredAngle and (NeckAmplitude * math.sin(Time * NeckFrequency))) or NeckDesiredAngle)
local LimbDesiredAngle = (LimbAmplitude * math.sin(Time * LimbFrequency))

--Neck.DesiredAngle = NeckDesiredAngle
RightShoulder.DesiredAngle = (LimbDesiredAngle + ClimbFudge)
LeftShoulder.DesiredAngle = (LimbDesiredAngle - ClimbFudge)
RightHip.DesiredAngle = -LimbDesiredAngle
LeftHip.DesiredAngle = -LimbDesiredAngle

local Tool = GetTool()

if Tool then

	local AnimStringValueObject = GetToolAnim(Tool)

	if AnimStringValueObject then
		ToolAnim = AnimStringValueObject.Value
		if AnimStringValueObject and AnimStringValueObject.Parent then
			AnimStringValueObject:Destroy()
		end
		ToolAnimTime = (Time + 0.3)
	end

	if Time > ToolAnimTime then
		ToolAnimTime = 0
		ToolAnim = "None"
	end

	AnimateTool()
	
else
	ToolAnim = "None"
	ToolAnimTime = 0
end

end

Humanoid.Died:connect(OnDied)
Humanoid.Running:connect(OnRunning)
Humanoid.Jumping:connect(OnJumping)
Humanoid.Climbing:connect(OnClimbing)
Humanoid.GettingUp:connect(OnGettingUp)
Humanoid.FreeFalling:connect(OnFreeFall)
Humanoid.FallingDown:connect(OnFallingDown)
Humanoid.Seated:connect(OnSeated)
Humanoid.PlatformStanding:connect(OnPlatformStanding)
Humanoid.Swimming:connect(OnSwimming)

Humanoid:ChangeState(Enum.HumanoidStateType.None)

RunService.Stepped:connect(function()
local _, Time = wait(0.1)
Move(Time)
end)

Also I don’t know if this is helpful or not but when moving the arms from their current position the weld’s in the torso would dissapear (Left shoulder and Right shoulder). There also isn’t anything in the arms (I don’t know if there is meant to be since first time doing this)

The script you posted is just the old animation script Roblox used in > '06(?)

Are you modifying the CFrame or Position property of the arms? It sounds like you are as you’re saying that the Weld/Motor6D objects disappear?

You need to modify the C0/C1 of the Motor6D/Weld if you want to reposition the arms and maintain the joint object e.g.

LeftShoulder.C0 = LeftShoulder.C0 * CFrame.new(1, 0, 0)

Highly recommend you read this and this, especially this on C0 and this on C1