How to override roblox "tool holding animation"?

Hello, I am not sure if this is the correct topic but here we go:

I am making a sword and I want the player to hold the sword with their arm down, but when I have tried it looks like this:
sword out

Instead, I want it to look like this:

sword out like this

Anyone know how to do this?

1 Like

Please read the following article:

  1. Start Playing (so your character loads)
  2. Copy the Animate script inside your character model (which is inside workspace)
  3. Stop the simulation and then paste it into StarterCharacterScripts
  4. Open the script where it says toolnone
  5. Set the ID to nil
  6. (If this does not work then you need a script to delete the previous animation script)
    6.a Rename the copy to something else
    6.b. Put at the top
local old = script.Parent:FindFirstChild("OLDANIMATIONSCRIPTNAME")
if old then old:Destroy() end 
4 Likes

There are many ways you can do this. The least hacky way is this:

for _, Animation in pairs(Humanoid:GetPlayingAnimationTracks()) do
	if string.find(string.lower(Animation.Name), string.lower("Tool")) then
		Animation:Stop()
	end
end

I found a solution via messing around with animation priorities. thanks though

1 Like

Alternatively you can modify the existing “Animate” script which is automatically parented to every player’s character. To do this you would take a copy of the script and remove the relevant tool animation parts, specifically the following.

toolnone = {
	{ id = "http://www.roblox.com/asset/?id=182393478", weight = 10 } 
},
toolslash = {
	{ id = "http://www.roblox.com/asset/?id=129967390", weight = 10 } 
	--				{ id = "slash.xml", weight = 10 } 
},
toollunge = {
	{ id = "http://www.roblox.com/asset/?id=129967478", weight = 10 } 
}

Then place this new version of the script in a suitable directory (I’ll use the “ReplicatedStorage” folder for this example). Now all we need is a script which replaces the old script with this newer rendition, that can be achieved relatively easily with the following server script.

local Players = game:GetService("Players")
local Replicated = game:GetService("ReplicatedStorage")
local NewAnimate = Replicated.Animate

Players.PlayerAdded:Connect(function(Player)
	Player.CharacterAdded:Connect(function(Character)
		local OldAnimate = Character:WaitForChild("Animate")
		OldAnimate:Destroy()
		
		NewAnimate:Clone().Parent = Character
	end)
end)

Here’s a copy of the model file for reproduction purposes.

repro.rbxm (7.5 KB)