Did a roblox update break scaled animations?

My game was fine earlier today, but suddenly the animations stopped scaling correctly. When the player is small, the animation plays too fast. When the player is large, the animation plays too slowly.

Example: https://gyazo.com/f2146aa22d1733d534a31b53ff8e7ac8
(This is with an animation pack, but the issue persists with all animations)

I do have a modified Animate script, but it only plays an animation with weight 0 underneath with animation markers for my footstep script.

The thing is, it can’t be a scripting error since it was working fine earlier today, and I had not updated the game. Additionally, I checked an earlier save of my game (months back) and the issue persists. Before, the animations would ensure the foot had contact with the ground in a natural way, now it does not seem to do so.

Was there a roblox update that broke things? If so, what had changed?

I’m not aware of any updates to scaled animations, however if you want to fix this issue you could compare your own animation script to the default ROBLOX animation script. There’s a few things that stood out to me in the original, there are functions that compensate for the size of a character to change the weight and speed of animations. To replicate these system all we need to do is:

local function rootMotionCompensation(speed)
	local speedScale = speed * 1.25
	local heightScale = 1 + (humanoid.HipHeight-2)*0.4

	return speedScale/heightScale
end

local infinitesimal = 1/10000 --An infinitesimal is a number very close to zero, but not zero or less than zero

local function newRunSpeed(speed)
	local normalizedRunSpeed = 1
	local runSpeed = rootMotionCompensation(speed)

	local weight = infinitesimal
	local timerWarp = runSpeed/normalizedRunSpeed

	if runSpeed < normalizedRunSpeed then
		weight = (runSpeed-0.5)/(normalizedRunSpeed-0.5)
		timerWarp = 1
	else
		weight = 1
	end

	return weight, timerWarp
end

humanoid.Running:Connect(function(speed)
	local weight, timerWarp = newRunSpeed(speed)

	runAnimTrack:AdjustWeight(weight)
	runAnimTrack:AdjustSpeed(timerWarp)
end)

This system is based off of the actual animate script, so I think it should work. If not you may just need to play around with some of the variables.

1 Like

Weird, I compared my animator script to the default one with diffchecker, and (aside from the little bits I added to add footsteps) there was a noticeable difference between them, I guess roblox had updated the script. I am just going to delete the old one and re-add my snippets to detect footsteps to the new one, as it works fine. Thanks for setting me down the right path!