-- NO-FAIL UNIVERSAL PROPORTIONAL SIZE HUB
local Players = game:GetService("Players")
local CoreGui = game:GetService("CoreGui")
local UserInputService = game:GetService("UserInputService")
local Player = Players.LocalPlayer
-- Clean up existing UI if present
if CoreGui:FindFirstChild("UniversalSizeHubFixed") then CoreGui.UniversalSizeHubFixed:Destroy() end
-- 1. BUILD NATIVE UI
local ScreenGui = Instance.new("ScreenGui", CoreGui:FindFirstChild("RobloxGui") or CoreGui)
ScreenGui.Name = "UniversalSizeHubFixed"
ScreenGui.ResetOnSpawn = false
local MainFrame = Instance.new("Frame", ScreenGui)
MainFrame.Size = UDim2.new(0, 220, 0, 150)
MainFrame.Position = UDim2.new(0.3, 0, 0.3, 0)
MainFrame.BackgroundColor3 = Color3.fromRGB(28, 28, 30)
Instance.new("UICorner", MainFrame).CornerRadius = UDim.new(0, 8)
MainFrame.Active = true
MainFrame.Draggable = true
local Title = Instance.new("TextLabel", MainFrame)
Title.Size = UDim2.new(1, 0, 0, 35)
Title.Text = "Universal Size Hub (Fixed)"
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.BackgroundTransparency = 1
local SizeInput = Instance.new("TextBox", MainFrame)
SizeInput.Size = UDim2.new(0, 196, 0, 36)
SizeInput.Position = UDim2.new(0, 12, 0, 45)
SizeInput.PlaceholderText = "Multiplier (-Inf to Inf)"
SizeInput.BackgroundColor3 = Color3.fromRGB(44, 44, 46)
SizeInput.TextColor3 = Color3.fromRGB(48, 209, 88)
SizeInput.Text = "1"
local ApplyButton = Instance.new("TextButton", MainFrame)
ApplyButton.Size = UDim2.new(0, 196, 0, 36)
ApplyButton.Position = UDim2.new(0, 12, 0, 95)
ApplyButton.Text = "Resize & Connect"
ApplyButton.BackgroundColor3 = Color3.fromRGB(0, 122, 255)
ApplyButton.TextColor3 = Color3.fromRGB(255, 255, 255)
Instance.new("UICorner", ApplyButton).CornerRadius = UDim.new(0, 6)
-- Track baseline joints to keep structural integrity intact
local baselineC0 = {}
local baselineC1 = {}
-- 2. JOINT RE-ALIGNMENT ENGINE
local function applyConnectedSize(multiplier)
local char = Player.Character
if not char then return end
local humanoid = char:FindFirstChildOfClass("Humanoid")
if not humanoid then return end
-- Turn off standard automatic scaling so it doesn't fight our script
humanoid.AutomaticScalingEnabled = false
-- Step A: Scale the actual physical parts
for _, part in ipairs(char:GetChildren()) do
if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
-- Use internal values to check original size if Roblox supports it
local origSizeObj = part:FindFirstChild("OriginalSize")
local baseSize = origSizeObj and origSizeObj.Value or part.Size
part.Size = baseSize * multiplier
end
end
-- Step B: Recalculate and connect all limb joints securely
for _, part in ipairs(char:GetChildren()) do
if part:IsA("BasePart") then
for _, joint in ipairs(part:GetChildren()) do
if joint:IsA("Motor6D") then
-- Cache original bone anchors so we don't permanently break the avatar layout
if not baselineC0[joint] then baselineC0[joint] = joint.C0 end
if not baselineC1[joint] then baselineC1[joint] = joint.C1 end
-- Rescale joint offsets proportionally so parts stay touching
joint.C0 = baselineC0[joint] * CFrame.new(baselineC0[joint].Position * (multiplier - 1))
joint.C1 = baselineC1[joint] * CFrame.new(baselineC1[joint].Position * (multiplier - 1))
end
end
end
end
end
ApplyButton.MouseButton1Click:Connect(function()
local val = tonumber(SizeInput.Text)
if val then
applyConnectedSize(val)
end
end)
Comments
No comments yet
Be the first to share your thoughts!