How to scale a R6 Rig with code

I’ve been searching forever and can’t find a scaling script for R6 rigs.

I always find something close to it, but there’s always some underlining issue. For example hats not working, or the rig being stuck together, or certain part of the rig not scaling correctly and causing parts to be at weird angles.

The closest I got scaled the player, but it messed up on 2 random parts of the rig. If I could just get some help on how to actually scale the player that’d be great. Everything on dev forum that I could find is either half broken or doesn’t work at all. (At least what I could find.) And when I tried it myself it just entirely broke down.

Have you tried this?

It seems to work for that person, perhaps you can expand on the code provided to make it work with the features intended.

Like I’ve said I’ve seen almost every post on R6 Scaling here and none work to what I need. And/or work somewhat and when I try to fix the other half that dosen’t work, it never turns out correct.

Well, the free model by @hunxrepair in the previous post works great and even has accessory scaling:

The script posted in the previous dev forum post is a bit outdated without the accessory scaling here is the newer version:

Newer code
-- Written by hunxrepair
-- 2020/10/09

-- Your avatar size * Percent
-- Change it to 2 to double avatar size, or make it 0.5 to halve avatar size
local Percent = 10


script.Parent.Trigger.Touched:Connect(function(Hit)
	local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
	if Player == nil then return end
	if Player.Character:FindFirstChild("GrowthApplied") then return end
	local GrowthApplied = Instance.new("BoolValue")
	GrowthApplied.Name = "GrowthApplied"
	GrowthApplied.Parent = Player.Character
	
	
	local Humanoid = Player.Character.Humanoid
	if Humanoid.RigType == Enum.HumanoidRigType.R6 then
		local Motors = {}
		table.insert(Motors, Player.Character.HumanoidRootPart.RootJoint)
		for i,Motor in pairs(Player.Character.Torso:GetChildren()) do
			if Motor:IsA("Motor6D") == false then continue end
			table.insert(Motors, Motor)
		end
		for i,v in pairs(Motors) do
			v.C0 = CFrame.new((v.C0.Position * Percent)) * (v.C0 - v.C0.Position)
			v.C1 = CFrame.new((v.C1.Position * Percent)) * (v.C1 - v.C1.Position)
		end
		
		
		for i,Part in pairs(Player.Character:GetChildren()) do
			if Part:IsA("BasePart") == false then continue end
			Part.Size = Part.Size * Percent
		end
		
		
		for i,Accessory in pairs(Player.Character:GetChildren()) do
			if Accessory:IsA("Accessory") == false then continue end
			
			Accessory.Handle.AccessoryWeld.C0 = CFrame.new((Accessory.Handle.AccessoryWeld.C0.Position * Percent)) * (Accessory.Handle.AccessoryWeld.C0 - Accessory.Handle.AccessoryWeld.C0.Position)
			Accessory.Handle.AccessoryWeld.C1 = CFrame.new((Accessory.Handle.AccessoryWeld.C1.Position * Percent)) * (Accessory.Handle.AccessoryWeld.C1 - Accessory.Handle.AccessoryWeld.C1.Position)
			Accessory.Handle.Mesh.Scale *= Percent	
		end
		
	elseif Humanoid.RigType == Enum.HumanoidRigType.R15 then
		local HD = Humanoid:GetAppliedDescription()
		HD.DepthScale *= Percent
		HD.HeadScale *= Percent
		HD.HeightScale *= Percent
		HD.ProportionScale *= Percent
		HD.WidthScale *= Percent
		Humanoid:ApplyDescription(HD)
	end
end)

The only issues that are blatant from what I tested would be the Humanoid movement physics that gets messed up due to the added mass and the floor detection, Consequently, you can even double jump. I have no idea how to fix this at the moment perhaps a mass reducer or custom floor detection but the rest seems to work fine.

16 Likes