Rogorilla Revived
Key RequiredUniversal

Rogorilla Revived

Universal Scriptrowenandersenrowenandersen 13.1K views 178 executesUpdated Sep 8, 2025
Unrated
00
Lua Script•1156 lines (45272 chars)
--[[

              ████      ████                
            ████████████████████            
          ████████████████████████          
        ████████████████████████████        
        ████████████████████████████        
      ████████████████████████████████      
      ██▒▒▒▒▒▒▒▒██████████████▒▒▒▒████      
      ██▒▒▒▒▒▒▒▒▒▒▒▒██████▒▒▒▒▒▒▒▒▒▒██      
    ▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒    
    ▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒    
    ████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██    
    ████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██    
    ██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████    
    ██████████▒▒▒▒▒▒▒▒▒▒░░░░░░▒▒████████    
      ████████▒▒▒▒░░░░░░░░░░▒▒▒▒████████    
      ██████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒████████      
          ██████████▒▒▒▒▒▒██████████        
        ████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒████████      
        ██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████      
      ████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████████    
    ██████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████  
  ██████████  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒  ████████  
  ████████  ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██  ██████████
██████████  ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██  ██████████
██████████   ███▒▒▒▒▒▒▒▒▒▒▒▒███   ██████████
▒▒▒▒████▒▒    ████████████████    ▒▒██████▒▒
▒▒▒▒▒▒▒▒▒▒                        ▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒                          ▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒                            ▒▒▒▒▒▒▒▒
]]--
 
options.Hands = false          -- If you want hands in R6 (You need hats)
 options.RightHand = "Racing Helmet Flames"
 options.LeftHand = "Racing Helmet USA"



--=========[Variables]==========--
local Players = game:GetService("Players");     
local Lighting = game:GetService("Lighting");
local ReplicatedStorage = game:GetService("ReplicatedStorage");
local ScriptContext = game:GetService("ScriptContext");
local VRService = game:GetService("VRService");
local VirtualUser = game:GetService("VirtualUser");
local RunService = game:GetService("RunService");
local HttpService = game:GetService("HttpService");
local HapticService = game:GetService("HapticService");
local UserInputService = game:GetService("UserInputService");
local CurrentCamera = workspace.CurrentCamera
local sethiddenprop = (sethiddenproperty or set_hidden_property or sethiddenprop or set_hidden_prop);
local setsimulationrad = setsimulationradius or set_simulation_radius or function(Radius) sethiddenprop(PlayerInstance, "SimulationRadius", Radius) end

local LocalPlayer = Players.LocalPlayer;
local Mouse = LocalPlayer:GetMouse()
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait();
local hum = Character:FindFirstChildOfClass("Humanoid");
local root = hum.RootPart;
local startCF = root.CFrame

local VRReady = UserInputService.VREnabled;
local R15 = hum.RigType == Enum.HumanoidRigType.R15 and true or false

local oldCF = Character.HumanoidRootPart.CFrame

for i,v in pairs(Character:GetChildren()) do
    for _, connection in pairs(getconnections(v.ChildAdded)) do
        connection:Disable()
    end
end

--[Tools Fix]
for i,tool in pairs(LocalPlayer.Backpack:GetChildren()) do
    if tool:IsA("Tool") then tool.Parent = Character end
end

--[Anti Kick]
local OldNamecall
OldNamecall = hookmetamethod(game, "__namecall", function(Self, ...)
    local args = {...} 
    if getnamecallmethod() == 'Kick' then 
        return false
    end
    return OldNamecall(Self, unpack(args))
end)

--[Net]
settings().Physics.AllowSleep = false 
settings().Physics.PhysicsEnvironmentalThrottle = Enum.EnviromentalPhysicsThrottle.Disabled

--[Execute when rejoin]
LocalPlayer.OnTeleport:Connect(function(State)
    if State == Enum.TeleportState.InProgress and syn then
        syn.queue_on_teleport([[
            repeat wait() until game:IsLoaded() and game.Players.LocalPlayer.Character
            Wait(1)
            options = {}

            options.HeadScale = 2          -- Headscale of camera (Does not change actual head size)
            options.FakeHandsTransparency = 1  -- Transparency of Arm Hitboxes
            options.Bubblechat = true      -- Force Bubblechat

            options.PointerRange = 10      -- Range you can click buttons with your arm
    
            options.TurnDelay = 0.05       -- Delay in sec. for how fast you can turn left and right
            options.TurnAngle = 15         -- Change in angle left/right (degrees)

            options.ChatEnabled = true     -- See chat on your left hand in-game
            options.ChatLocalRange = 70   -- Local chat range
 
            options.Hands = false          -- If you want hands in R6 (You need hats)
            options.RightHand = "Racing Helmet Flames"
            options.LeftHand = "Racing Helmet USA"
            
            loadstring(game:HttpGet("https://raw.githubusercontent.com/saucekid/sauceVR/main/extra/ROrilla.lua"))()
        ]])
    end
end)

--=========[Functions]==========--
function getModule(module)
    assert(type(module) == "string", "string only")
    local path = "https://raw.githubusercontent.com/saucekid/sauceVR/main/modules/"
    local module = loadstring(game:HttpGetAsync(path.. module.. ".lua"))()
    return module
end

local Utils = getModule("Utils")

local function Motor6D(part0, part1, c0, c1, name)
    part1.Transparency = 1;
    part1.Massless = true
    local motor = Instance.new("Motor6D", part1); motor.Name = name; motor.Part0 = part0; motor.Part1 = part1; motor.C0 = c0; motor.C1 = c1;
    return motor, motor.C0
end

local function Lerp(a, b, t)
    return a + (b - a) * t
end

local function solveIK(originCF, targetPos, l1, l2)	
	local localized = originCF:pointToObjectSpace(targetPos)
	local localizedUnit = localized.unit
	local l3 = localized.magnitude
	local axis = Vector3.new(0, 0, -1):Cross(localizedUnit)
	local angle = math.acos(-localizedUnit.Z)
	local planeCF = originCF * CFrame.fromAxisAngle(axis, angle)
	if l3 < math.max(l2, l1) - math.min(l2, l1) then
		return planeCF * CFrame.new(0, 0,  math.max(l2, l1) - math.min(l2, l1) - l3), -math.pi/2, math.pi
	elseif l3 > l1 + l2 then
		return planeCF, math.pi/2, 0
	else
		local a1 = -math.acos((-(l2 * l2) + (l1 * l1) + (l3 * l3)) / (2 * l1 * l3))
		local a2 = math.acos(((l2  * l2) - (l1 * l1) + (l3 * l3)) / (2 * l2 * l3))
		return planeCF, a1 + math.pi/2, a2 - a1
	end
end

local function GetMotorForLimb(Limb)
	for _, Motor in next, Character:GetDescendants() do
		if Motor:IsA("Motor6D") and Motor.Part1 == Limb then
			return Motor
		end
	end
end

local function cframeAlign(a, b, pos)
    local Motor = GetMotorForLimb(a); if Motor then Motor:Destroy() end
    RunService.Stepped:Connect(function()
        a.CFrame = pos and b.CFrame * pos or b.CFrame
    end)
end

local function align(a, b, pos, rot, options)
    if typeof(options) ~= 'table' then
        options = {type = "None", resp = 200, length = 5, reactiontorque = false, reactionforce = false}
    end
    local a1
    local att0, att1 do
        att0 = a:IsA("Accessory") and Instance.new("Attachment", a.Handle) or Instance.new("Attachment", a)
        att1 = Instance.new("Attachment", b); 
        att1.Position = pos or Vector3.new(0,0,0); att1.Orientation = rot or Vector3.new(0,0,0);
    end
    
    local Handle = a:IsA("Accessory") and a.Handle or a;
    Handle.Massless = true;
    Handle.CanCollide = false;
    
    if a:IsA("Accessory") then Handle.AccessoryWeld:Destroy()  Handle:FindFirstChildOfClass("SpecialMesh"):Destroy()end
    local Motor = GetMotorForLimb(a); if Motor then Motor:Destroy() end
    
    if options.type == "rope" then 
        att0.Position = rot
        al = Instance.new("RopeConstraint", Handle);
        al.Attachment0 = att0; al.Attachment1 = att1;
        al.Length = options.length or 0.5
    elseif options.type == "ball" then
        att0.Position = rot
        al = Instance.new("BallSocketConstraint", Handle)
        al.Attachment0 = att0
        al.Attachment1 = att1
        al.Restitution = 1
        al.LimitsEnabled = true
        al.MaxFrictionTorque = 10
        al.TwistLimitsEnabled = true
        al.UpperAngle = 50
        al.TwistLowerAngle = 10
        al.TwistUpperAngle = -100
    elseif type == "hinge" then
        att0.Position = rot
        al = Instance.new("HingeConstraint", Handle)
        al.Attachment0 = att0
        al.Attachment1 = att1
    else
        al = Instance.new("AlignPosition", Handle);
        al.Attachment0 = att0; al.Attachment1 = att1;
        al.RigidityEnabled = true;
        al.ReactionForceEnabled = options.reactionforce or false;
        al.ApplyAtCenterOfMass = true;
        al.MaxForce = 10000000;
        al.MaxVelocity = math.huge/9e110;
        al.Responsiveness = options.resp or 200;
        local ao = Instance.new("AlignOrientation", Handle);    
        ao.Attachment0 = att0; ao.Attachment1 = att1;
        ao.RigidityEnabled = true;
        ao.ReactionTorqueEnabled = options.reactiontorque or true;
        ao.PrimaryAxisOnly = false;
        ao.MaxTorque = 10000000;
        ao.MaxAngularVelocity = math.huge/9e110;
        ao.Responsiveness = 200;
    end
    return att1, a1
end

function alignHand(hand, pospart, rotpart, pos, rot)
    local Motor = GetMotorForLimb(hand); if Motor then Motor:Destroy() end
    
    local handatt = Instance.new("Attachment", hand)
    local posatt = Instance.new("Attachment", pospart)
    posatt.Position = pos or Vector3.new(0,0,0)
    local rotatt = Instance.new("Attachment", rotpart)
    rotatt.Orientation = rot or Vector3.new(0,0,0)
    
    local al = Instance.new("AlignPosition", hand);
    al.RigidityEnabled = true;
    al.ReactionForceEnabled = false;
    al.ApplyAtCenterOfMass = true;
    al.MaxForce = 10000000;
    al.MaxVelocity = math.huge/9e110;
    al.Responsiveness = resp or 200;
    local ao = Instance.new("AlignOrientation", hand);    
    ao.RigidityEnabled = true;
    ao.ReactionTorqueEnabled = false;
    ao.PrimaryAxisOnly = false;
    ao.MaxTorque = 10000000;
    ao.MaxAngularVelocity = math.huge/9e110;
    ao.Responsiveness = 200;
    
    al.Attachment0 = handatt
    al.Attachment1 = posatt
    
    ao.Attachment0 = handatt
    ao.Attachment1 = rotatt
end

local function holdPart(v, grabAtt, drop)
    if v:IsA("BasePart") and v.Anchored == false then
        for _, x in next, v:GetChildren() do
            if x:IsA("BodyAngularVelocity") or x:IsA("BodyForce") or x:IsA("BodyGyro") or x:IsA("BodyPosition") or x:IsA("BodyThrust") or x:IsA("BodyVelocity") or x:IsA("RocketPropulsion") or x:IsA("Attachment")  or x:IsA("AlignPosition") or x:IsA("NoCollisionConstraint") then
                x:Destroy()
            end
        end
        if drop then return end
        Utils:NoCollide(grabAtt.Parent, v, v)
        grabAtt.WorldPosition = v.Position
        local att0 = Instance.new("Attachment", v)
        local AlignPosition = Instance.new("AlignPosition", v)
        AlignPosition.ReactionForceEnabled = true
        AlignPosition.MaxForce = 9999999999999999
        AlignPosition.MaxVelocity = math.huge
        AlignPosition.Responsiveness = 200
        AlignPosition.RigidityEnabled = true
        AlignPosition.Attachment0 = att0 
        AlignPosition.Attachment1 = grabAtt
    end
end

--=========[VR stuff]==========--
local vrparts, rhand, lhand, header, ToolTrack, HeadTrack, ratt, latt do
    vrparts = Instance.new("Folder", workspace); vrparts.Name = "VRParts"
    rhand = Instance.new("Part", vrparts); rhand.Anchored = true; rhand.CanCollide = false; rhand.Transparency = 1;
    ratt = Instance.new("Attachment", rhand);
    lhand = Instance.new("Part", vrparts); lhand.Anchored = true; lhand.CanCollide = false; lhand.Transparency = 1;
    latt = Instance.new("Attachment", lhand);
    header = Instance.new("Part", vrparts); header.Anchored = true; header.CanCollide = false; header.Transparency = 1;
    ToolTrack = Instance.new("Part", vrparts); ToolTrack.Anchored = true; ToolTrack.CanCollide = false; ToolTrack.Transparency = 1;
    HeadTrack = Instance.new("Part", vrparts); HeadTrack.Anchored = true; HeadTrack.CanCollide = false; HeadTrack.Transparency = 1;
    
    if VRReady then
        VRService.UserCFrameChanged:Connect(function()
            local LeftHandCFrame = VRService:GetUserCFrame(Enum.UserCFrame.LeftHand)
            local RightHandCFrame = VRService:GetUserCFrame(Enum.UserCFrame.RightHand)
            local HeadCFrame = VRService:GetUserCFrame(Enum.UserCFrame.Head)
            rhand.CFrame = (CurrentCamera.CFrame*CFrame.new(RightHandCFrame.p*options.HeadScale))*CFrame.fromEulerAnglesXYZ(RightHandCFrame:ToEulerAnglesXYZ())*CFrame.Angles(math.rad(90), math.rad(90), math.rad(0))
            lhand.CFrame = (CurrentCamera.CFrame*CFrame.new(LeftHandCFrame.p*options.HeadScale))*CFrame.fromEulerAnglesXYZ(LeftHandCFrame:ToEulerAnglesXYZ())*CFrame.Angles(math.rad(90), math.rad(90), math.rad(0))
            header.CFrame = (CurrentCamera.CFrame*CFrame.new(HeadCFrame.p*options.HeadScale)) *CFrame.fromEulerAnglesXYZ(HeadCFrame:ToEulerAnglesXYZ())
            ToolTrack.CFrame = (CurrentCamera.CFrame*CFrame.new(RightHandCFrame.p*options.HeadScale))*CFrame.fromEulerAnglesXYZ(RightHandCFrame:ToEulerAnglesXYZ())*CFrame.Angles(math.rad(0), math.rad(0), math.rad(0)) * CFrame.new(0,1,0)
        end)
    else
        RunService.RenderStepped:Connect(function()
            header.CFrame = CurrentCamera.CFrame
        end)
    end
end
    
--=========[Setting-Up]==========--
if options.BubbleChat then
    Players.PlayerAdded:connect(function(User)
        User.Chatted:connect(function(Chat)
            game:GetService("Chat"):Chat(User.Character.Head,Chat,Enum.ChatColor.White)
        end)
    end)

    for i,v in pairs(Players:GetPlayers()) do
        v.Chatted:connect(function(Chat)
            game:GetService("Chat"):Chat(v.Character.Head,Chat,Enum.ChatColor.White)
        end)
    end
end

--[Camera]
if VRReady then
    VRService:RecenterUserHeadCFrame();
    CurrentCamera.CameraType = "Scriptable";
    CurrentCamera.HeadScale = options.HeadScale;
    CurrentCamera.HeadLocked = true
    game:GetService("StarterGui"):SetCore("VRLaserPointerMode", 0);
    game:GetService("StarterGui"):SetCore("VREnableControllerModels", false);
end

hum.PlatformStand =true
wait()

--[Replicating]
local torso = R15 and Character["UpperTorso"] or Character["Torso"]
local rightarm = R15 and Character["RightHand"] or Character["Right Arm"]
local leftarm = R15 and Character["LeftHand"] or Character["Left Arm"]
local rightleg = R15 and Character["RightUpperLeg"] or Character:FindFirstChild("Right Leg")
local leftleg = R15 and Character["LeftUpperLeg"] or Character:FindFirstChild("Left Leg")
local motor = Character:FindFirstChild("LowerTorso") and Character.UpperTorso:FindFirstChild("LowerTorso") or GetMotorForLimb(root) if motor then motor:Destroy() end

local RUA, RLA, LUA, LLA, RH, LH = Instance.new("Part", Character), Instance.new("Part", Character), Instance.new("Part", Character), Instance.new("Part", Character), Instance.new("Part", Character), Instance.new("Part", Character) do
    RUA.Name = "RUA [Fake]"; RUA.Size = Vector3.new(1, 2, 1); RUA.CanCollide = false;
    RLA.Name = "RLA [Fake]"; RLA.Size = Vector3.new(1, 2, 1); RLA.CanCollide = false;
    LUA.Name = "LUA [Fake]"; LUA.Size = Vector3.new(1, 2, 1); LUA.CanCollide = false;
    LLA.Name = "LLA [Fake]"; LLA.Size = Vector3.new(1, 2, 1); RUA.CanCollide = false; 
    RH.Name = "RH [Fake]"; RH.Size = Vector3.new(.7,.7,.7); RH.CanCollide = false;
    LH.Name = "LH [Fake]"; LH.Size = Vector3.new(.7,.7,.7); LH.CanCollide = false; 
end

local rightShoulder, RSHOULDER_C0_CACHE = Motor6D(torso, RUA, CFrame.new(1.5,1,0), CFrame.new(0,1,0), "RS");
local rightElbow, RELBOW_C0_CACHE = Motor6D(RUA, RLA, CFrame.new(0,-1,0), CFrame.new(0,1,0), "RE");
local rightWrist = Motor6D(RLA, RH, CFrame.new(0,-0.5,0), CFrame.new(0,0.5,0), "RW");
local leftShoulder, LSHOULDER_C0_CACHE = Motor6D(torso, LUA, CFrame.new(-1.5,1,0), CFrame.new(0,1,0), "LS");
local leftElbow, LELBOW_C0_CACHE = Motor6D(LUA, LLA, CFrame.new(0,-1,0), CFrame.new(0,1,0), "LE");
local leftWrist = Motor6D(LLA, LH, CFrame.new(0,-0.5,0), CFrame.new(0,0.5,0), "LW");

local RUPPER_LENGTH			= math.abs(rightShoulder.C1.Y) + math.abs(rightElbow.C0.Y)
local RLOWER_LENGTH			= math.abs(rightElbow.C1.Y) + math.abs(rightWrist.C0.Y) + math.abs(rightWrist.C1.Y)
local LUPPER_LENGTH			= math.abs(leftShoulder.C1.Y) + math.abs(leftElbow.C0.Y)
local LLOWER_LENGTH			= math.abs(leftElbow.C1.Y) + math.abs(leftWrist.C0.Y) + math.abs(leftWrist.C1.Y)

local fakerightarm, fakeleftarm, RHA, LHA, RgrabWeld, LgrabWeld, RgrabAtt, LgrabAtt do
    fakeleftarm, fakerightarm = Instance.new("Part", Character), Instance.new("Part", Character)
    fakeleftarm.CFrame = lhand.CFrame
    fakeleftarm.Name = "Fake Left"
    fakeleftarm.Size = Vector3.new(1,1,.5)
    fakeleftarm.Transparency = options.FakeHandsTransparency
    fakerightarm.CFrame = rhand.CFrame
    fakerightarm.Name = "Fake Right"
    fakerightarm.Size = Vector3.new(1,1,.5)
    fakerightarm.Transparency = options.FakeHandsTransparency
    
    local nocol = Utils:NoCollide(fakeleftarm, fakerightarm)
    
    local Rap = Instance.new("AlignPosition", fakerightarm);
    Rap.RigidityEnabled = false; Rap.ReactionForceEnabled = true; Rap.ApplyAtCenterOfMass = false; Rap.MaxForce = 10000000; Rap.MaxVelocity = math.huge/9e110; Rap.Responsiveness = 75;
    local Rao = Instance.new("AlignOrientation", fakerightarm);
    Rao.RigidityEnabled = false; Rao.ReactionTorqueEnabled = false; Rao.PrimaryAxisOnly = false; Rao.MaxTorque = 10000000; Rao.MaxAngularVelocity = math.huge/9e110; Rao.Responsiveness = 75;
    local Lap = Instance.new("AlignPosition", fakeleftarm);
    Lap.RigidityEnabled = false; Lap.ReactionForceEnabled = true; Lap.ApplyAtCenterOfMass = false; Lap.MaxForce = 10000000; Lap.MaxVelocity = math.huge/9e110; Lap.Responsiveness = 75;
    local Lao = Instance.new("AlignOrientation", fakeleftarm); 
    Lao.RigidityEnabled = false; Lao.ReactionTorqueEnabled = false; Lao.PrimaryAxisOnly = false; Lao.MaxTorque = 10000000; Lao.MaxAngularVelocity = math.huge/9e110; Lao.Responsiveness = 75;
    
    local Ratt = Instance.new("Attachment", fakerightarm)
    RHA = Instance.new("Attachment", root)
    local Latt = Instance.new("Attachment", fakeleftarm)
    LHA = Instance.new("Attachment", root)
    
    Rap.Attachment0 = Ratt; Rap.Attachment1 = RHA
    Rao.Attachment0 = Ratt; Rao.Attachment1 = RHA
    Lap.Attachment0 = Latt; Lap.Attachment1 = LHA
    Lao.Attachment0 = Latt; Lao.Attachment1 = LHA
    
    RgrabWeld = Instance.new("WeldConstraint", fakerightarm); RgrabWeld.Part0 = fakerightarm
    LgrabWeld = Instance.new("WeldConstraint", fakeleftarm); LgrabWeld.Part0 = fakeleftarm 
    
    RgrabAtt = Instance.new("Attachment", fakerightarm)
    LgrabAtt = Instance.new("Attachment", fakeleftarm)
    
    fakerightarm.Touched:Connect(function(part)
        if part.CanCollide == true and not part:IsDescendantOf(Character) and part.Parent ~= vrparts then
            HapticService:SetMotor(Enum.UserInputType.Gamepad1, Enum.VibrationMotor.RightHand, (fakerightarm.Velocity - part.Velocity).Magnitude / 10)
		    wait()
		    HapticService:SetMotor(Enum.UserInputType.Gamepad1, Enum.VibrationMotor.RightHand, 0)
        end
    end)
    fakeleftarm.Touched:Connect(function(part)
        if part.CanCollide == true and not part:IsDescendantOf(Character) and part.Parent ~= vrparts then
            HapticService:SetMotor(Enum.UserInputType.Gamepad1, Enum.VibrationMotor.LeftHand, (fakeleftarm.Velocity - part.Velocity).Magnitude / 10)
		    wait()
		    HapticService:SetMotor(Enum.UserInputType.Gamepad1, Enum.VibrationMotor.LeftHand, 0)
        end
    end)
end


for _,part in pairs(Character:GetDescendants()) do
    if part:IsA("BasePart") then
        if part ~= root and part ~= fakeleftarm and part ~= fakerightarm then
            local bv = Instance.new("BodyVelocity")
            bv.Velocity = Vector3.new(0,0,0)
            bv.MaxForce = Vector3.new(math.huge,math.huge,math.huge)
            bv.P = 9000
            bv.Parent = part
            RunService.Heartbeat:connect(function()
                part.AssemblyLinearVelocity = Vector3.new(70,0,0)
            end)
            for i,v in pairs(Character:GetChildren()) do
                if v:IsA("BasePart") then
                    Utils:NoCollide(part, v)
                end
            end
            if part.Name:find("Arm") or part.Name:find("Leg") or part.Name:find("tHand") or part.Name:find("Foot") then
                part.Transparency = 0
                RunService.Stepped:connect(function()
                    part.CanCollide = false
                end)
            elseif part == RH or part == LH or part == RLA or part == LLA or part == RUA or part == LUA  then
                part.Transparency = 1
            elseif part.Parent:IsA("Accessory") then
                if part.Parent.Name == options.RightHand or part.Parent.Name == options.LeftHand then --or table.find(armParts, part.Parent) ~= nil  then
                    part.Transparency = 0
                else
                    part.Transparency = 1
                end
            elseif part.Parent:IsA("Tool") then
                part.Parent.Parent = LocalPlayer.Backpack
            else
                part.Transparency = 0.6
            end
        elseif part == fakeleftarm or part == fakerightarm then
            part.Transparency = options.FakeHandsTransparency
            part.CustomPhysicalProperties = PhysicalProperties.new(10, 1000, -100, 100,100)
            part.Massless = false
        else
            part.CustomPhysicalProperties = PhysicalProperties.new(20, 100, 0, 100,100)
            game:GetService("RunService").Stepped:connect(function()
                part.CanCollide = true
            end)
        end
        if part == torso or part.Name == "Head" then
            game:GetService("RunService").Stepped:connect(function()
                part.CanCollide = false
            end)
        end
        if part.Name == "LowerTorso" or part.Name:find("Foot") then
            part:Destroy()
        end
    end
end

CurrentCamera.CFrame = CFrame.new((root.Position - VRService:GetUserCFrame(Enum.UserCFrame.Head).Position * options.HeadScale))

wait(.1)

align(torso, header, Vector3.new(0,-.8,0))
if R15 then
    align(Character["RightUpperLeg"],RUA, Vector3.new(0,.5,0), Vector3.new(0,0,0))
    align(Character["RightLowerLeg"],RUA, Vector3.new(0,-.5,0), Vector3.new(0,0,0))
    align(Character["RightUpperArm"],RLA, Vector3.new(0,.5,0), Vector3.new(0,0,0))
    align(Character["RightLowerArm"],RLA, Vector3.new(0,-.5,0), Vector3.new(0,0,0))
    align(Character["LeftUpperLeg"],LUA, Vector3.new(0,.5,0), Vector3.new(0,0,0))
    align(Character["LeftLowerLeg"],LUA, Vector3.new(0,-.5,0), Vector3.new(0,0,0))
    align(Character["LeftUpperArm"],LLA, Vector3.new(0,.5,0), Vector3.new(0,0,0))
    align(Character["LeftLowerArm"],LLA, Vector3.new(0,-.5,0), Vector3.new(0,0,0))
    alignHand(Character["RightHand"], RH, fakerightarm, Vector3.new(0,-.2,0), Vector3.new(0,-90,0))
    alignHand(Character["LeftHand"], LH, fakeleftarm, Vector3.new(0,-.2,0), Vector3.new(0,-90,0))
else
    align(rightleg,RUA, Vector3.new(0,0,0), Vector3.new(0,0,0))
    align(rightarm,RLA, Vector3.new(0,0,0), Vector3.new(0,-90,0))
    align(leftleg,LUA, Vector3.new(0,0,0), Vector3.new(0,0,0))
    align(leftarm,LLA, Vector3.new(0,0,0), Vector3.new(0,-90,0))
end
if options.Hands then
    align(Character[options.RightHand], RH)
    align(Character[options.LeftHand], LH)
end

fakeleftarm.CFrame = root.CFrame
fakerightarm.CFrame = root.CFrame

local bg = Instance.new("BodyGyro", root); bg.MaxTorque = Vector3.new(17000,17000,17000); bg.P = 17000

local Twist = 0
local Height = .5
local SelectionBox = Instance.new("SelectionBox", workspace)
local SelectedPart

local LgrabPart
local RgrabPart

local Lholding
local Rholding
RunService.Heartbeat:Connect(function()
	local RshoulderCFrame = torso.CFrame * RSHOULDER_C0_CACHE
	local RplaneCF, RshoulderAngle, RelbowAngle = solveIK(RshoulderCFrame, fakerightarm.Position, RUPPER_LENGTH, RLOWER_LENGTH)
	local LshoulderCFrame = torso.CFrame * LSHOULDER_C0_CACHE
	local LplaneCF, LshoulderAngle, LelbowAngle = solveIK(LshoulderCFrame, fakeleftarm.Position, LUPPER_LENGTH, LLOWER_LENGTH)
	rightShoulder.C0 = torso.CFrame:toObjectSpace(RplaneCF) * CFrame.Angles(RshoulderAngle, 0, 0)
	rightElbow.C0 = RELBOW_C0_CACHE * CFrame.Angles(RelbowAngle, 0, 0)
	leftShoulder.C0 = torso.CFrame:toObjectSpace(LplaneCF) * CFrame.Angles(LshoulderAngle, 0, 0)
	leftElbow.C0 = LELBOW_C0_CACHE * CFrame.Angles(LelbowAngle, 0, 0)
end)

RunService.Stepped:Connect(function()
	rightShoulder.Transform = CFrame.new()
	rightElbow.Transform = CFrame.new()
	rightWrist.Transform = CFrame.new()
	leftShoulder.Transform = CFrame.new()
	leftElbow.Transform = CFrame.new()
	leftWrist.Transform = CFrame.new()
end)

RunService.RenderStepped:Connect(function()
    RHA.WorldCFrame = rhand.CFrame
    LHA.WorldCFrame = lhand.CFrame
    hum.PlatformStand = true
    workspace.Gravity = 75
    if root.Position.Y <= -100 then
        root.CFrame = oldCF
    end
    if VRReady then
        local HeadCF = VRService:GetUserCFrame(Enum.UserCFrame.Head);
	    u1 = CFrame.new((root.Position - HeadCF.Position * options.HeadScale) + Vector3.new(0,1.5,0)) * CFrame.Angles(0, math.rad(Twist), 0);
	    CurrentCamera.CFrame = (u1 * CFrame.new(0, 0, 0) * CFrame.fromEulerAnglesXYZ(CFrame.new(HeadCF.p * options.HeadScale):ToEulerAnglesXYZ())) --+ Vector3.new(0,Height,0)
	    
        for _,hat in pairs(Character:GetChildren()) do
            if hat:IsA("Accessory") and hat:FindFirstChild("Handle") then hat.Handle.Transparency = 1 end
        end
        
        local selectRay = Ray.new(rhand.Position, -rhand.CFrame.upVector.Unit * options.PointerRange)
        local hit, position, normal	= Workspace:FindPartOnRayWithIgnoreList(selectRay, {vrparts, Character})
        if hit and (hit:FindFirstChild("TouchInterest") or hit:FindFirstChildOfClass("ClickDetector")) then
            SelectionBox.Adornee = hit
            SelectedPart = hit
        else
            SelectionBox.Adornee = nil
        end
        
        local RgrabRay = Ray.new(rhand.Position, -rhand.CFrame.upVector.Unit * 1.3)
        local Rpart, Rposition, Rnormal	= Workspace:FindPartOnRayWithIgnoreList(RgrabRay, {vrparts, Character})
        local LgrabRay = Ray.new(lhand.Position, -lhand.CFrame.upVector.Unit * 1.3)
        local Lpart, Rposition, Rnormal	= Workspace:FindPartOnRayWithIgnoreList(LgrabRay, {vrparts, Character})
        if Rpart then RgrabPart = Rpart else RgrabPart = nil end
        if Lpart then LgrabPart = Lpart else LgrabPart = nil end
    else
        CurrentCamera.CameraType = "Scriptable"
    end
end)

--[Teleporting]
root:GetPropertyChangedSignal("Position"):Connect(function(pos)
    root.Velocity = Vector3.new(0,0,0)
    fakeleftarm.Velocity = Vector3.new(0,0,0)
    fakerightarm.Velocity = Vector3.new(0,0,0)
    root.Anchored = true
    RgrabWeld.Part1 = nil
    LgrabWeld.Part1 = nil
    torso.CFrame = root.CFrame
    fakeleftarm.CFrame = root.CFrame
    fakerightarm.CFrame = root.CFrame
    wait(2)
    root.Anchored = false
    for i = 1,4 do
        root.Velocity = Vector3.new(0,0,0)
        fakeleftarm.Velocity = Vector3.new(0,0,0)
        fakerightarm.Velocity = Vector3.new(0,0,0)
    end
end)

--[Dying]
hum.Died:Connect(function()
    if #Players:GetPlayers() <= 1 then
        Players.LocalPlayer:Kick("\nRejoining...")
        wait()
        game:GetService('TeleportService'):Teleport(game.PlaceId, LocalPlayer)
	else
		game:GetService('TeleportService'):TeleportToPlaceInstance(game.PlaceId, game.JobId, LocalPlayer)
    end
end)
    
--[Tools]
local toolrot = Vector3.new(0,0,0)
function doTool(tool)
    if tool:IsA("Tool") and tool:FindFirstChild("Handle") and not tool:FindFirstChild("Done") then
        local realhandle = tool:FindFirstChild("Handle")
        realhandle.Massless = true
        RunService.Heartbeat:Connect(function()
            realhandle.Velocity = Vector3.new(45,0,0)
        end)
        local tag = Instance.new("StringValue", tool); tag.Name = "Done"
        if R15 then
            realhandle.Name = "RealHandle"
            local bv = Instance.new("BodyVelocity", realhandle)
            bv.Velocity = Vector3.new(0,0,0); bv.MaxForce = Vector3.new(math.huge,math.huge,math.huge); bv.P = 9000; bv.Name = "Jitterless"
            local fakehandle = realhandle:Clone(); fakehandle.Parent = tool; fakehandle.Name = "Handle"
            fakehandle.Transparency = 1
            RunService.Stepped:Connect(function()
                realhandle.CanCollide = false
                realhandle.CFrame = fakehandle.CFrame
            end)
        else
            local fakehandle = realhandle:Clone(); fakehandle.Parent = tool; fakehandle.Name = "FakeHandle"; fakehandle.Transparency = 1; fakehandle.CanCollide = false
            local fakegrip = Instance.new("Weld", rhand); fakegrip.C0 = CFrame.new(0, -1, 0, 1, 0, -0, 0, 0, 1, 0, -1, -0); fakegrip.C1 = tool.Grip; fakegrip.Part1 = fakehandle; fakegrip.Part0 = ToolTrack
            local toolAtt = align(realhandle, ToolTrack, Vector3.new(), Vector3.new(), {reactiontorque = false, resp = 70})
            toolAtt.WorldCFrame = fakehandle.CFrame
            RunService.Stepped:Connect(function()
                realhandle.CanCollide = false
            end)
        end
        wait()
        tool.Parent = LocalPlayer.Backpack
    end
end

if not R15 and rightarm:FindFirstChild("RightGrip") then rightarm.RightGrip:Destroy() end
for i,tool in pairs(Character:GetChildren()) do
    task.spawn(doTool, tool)
end
Character.ChildAdded:Connect(doTool)
    
--=========[Keyboard]==========--
local Keyboard = game:GetObjects("rbxassetid://7333397685")[1]; Keyboard.Parent = workspace
local Preview = Keyboard.Preview.Display.Input
local KeyboardActive = false
local Caps = false

for _,key in pairs(Keyboard:GetChildren()) do
    if key.Name == "Board" then continue end
    local display = key:FindFirstChild("Display");
    if display and display:FindFirstChild("Key") then
        display.Key.TextScaled = true
    end
    key.Touched:Connect(function(part)
        if KeyboardActive then
            if part == leftarm or part == rightarm then
                if key.Name:find("Key") then
                    if Caps then
                        if display:FindFirstChild("Cap") then
                            Preview.Text = Preview.Text.. display.Cap.Text
                        else
                            Preview.Text = Preview.Text.. display.Key.Text:upper()
                        end
                    else
                        Preview.Text = Preview.Text.. display.Key.Text:lower()
                    end
                elseif key.Name == "Space" then
                    Preview.Text = Preview.Text.. " "
                elseif key.Name == "Enter" then
                    if Preview.Text ~= "" then
                        Players:Chat(Preview.Text)
                        ReplicatedStorage:WaitForChild("DefaultChatSystemChatEvents"):WaitForChild("SayMessageRequest"):FireServer(Preview.Text,"All")
                        Preview.Text = ""
                    end
                elseif key.Name == "Backspace" then
                    Preview.Text = Preview.Text:sub(1, #Preview.Text-1)
                elseif key.Name == "Clear" then
                    Preview.Text = ""
                elseif key.Name == "Caps" then
                    Caps = not Caps
                    key.Material = Caps and "Neon" or "SmoothPlastic"
                    for i,v in pairs(Keyboard:GetChildren()) do
                        if v.Name:find("Key") then
                            v.Display.Key.Text = Caps and v.Display.Key.Text:upper() or v.Display.Key.Text:lower()
                        end
                    end
                elseif key.Name == "Exit" then
                    KeyboardActive = false
                end
            end
        end
    end)
end

function handleKeyboard()
    if (root.Position - Keyboard.PrimaryPart.Position).Magnitude > 20 then
        KeyboardActive = false
    end
    if KeyboardActive then
        Keyboard.Parent = workspace
        --Keyboard:SetPrimaryPartCFrame(Keyboard.PrimaryPart.CFrame:lerp(Keyboard.PrimaryPart.CFrame * (header.CFrame - header.Position), .01))
        Keyboard:SetPrimaryPartCFrame(Keyboard.PrimaryPart.CFrame:lerp(CFrame.lookAt(Keyboard.PrimaryPart.Position, header.Position) * CFrame.Angles(0,math.rad(180),0), .01))
    else
        Keyboard.Parent = ReplicatedStorage
    end
end
RunService.RenderStepped:Connect(handleKeyboard)

--=========[Controls]==========--
local turnDB = false
local keyboardDB = false
UserInputService.InputChanged:connect(function(key)
    if key.KeyCode == Enum.KeyCode.Thumbstick2 then
        if key.Position.Y > 0.8 then
            Height = Height + .1
        elseif key.Position.Y < -0.8 then
            Height = Height - .1
        end
        if key.Position.X > 0.8 and not turnDB then
            turnDB = true
            Twist = Twist - options.TurnAngle
            wait(options.TurnDelay)
            turnDB = false
        elseif key.Position.X < -0.8 and not turnDB then
            turnDB = true
            Twist = Twist + options.TurnAngle
            wait(options.TurnDelay)
            turnDB = false
        end
    end
end)

UserInputService.InputChanged:connect(function(key)
    if key.KeyCode == Enum.KeyCode.Thumbstick1 then
    end
end)

UserInputService.InputChanged:connect(function(key)
    if key.KeyCode == Enum.KeyCode.ButtonL2 then
        if key.Position.Z > 0.8 and not keyboardDB then
            keyboardDB = true
            Keyboard:SetPrimaryPartCFrame((header.CFrame + Vector3.new(0,1,0)) * CFrame.new(0,0,-8))
            KeyboardActive = not KeyboardActive
            wait(.5)
            keyboardDB = false
        end
    end
end)

UserInputService.InputChanged:connect(function(key)
    if key.KeyCode == Enum.KeyCode.ButtonR2 then
        if not R15 then
            for i,tool in pairs(Character:GetChildren()) do
                if tool:IsA("Tool") then tool:Activate() end
            end
        end
        if SelectedPart then
            if key.Position.Z > 0.8 then
                if SelectedPart:FindFirstChild("TouchInterest") then
                    firetouchinterest(rightarm, SelectedPart, 0)
                elseif SelectedPart:FindFirstChildOfClass("ClickDetector") then
                    fireclickdetector(SelectedPart:FindFirstChildOfClass("ClickDetector"))
                end
            else
                if SelectedPart:FindFirstChild("TouchInterest") then
                    firetouchinterest(rightarm, SelectedPart, 1)
                end
            end
        end
    end 
end)

UserInputService.InputBegan:connect(function(key)
    if key.KeyCode == Enum.KeyCode.ButtonR1 then
        if RgrabPart  then
            if not RgrabPart.Parent:IsA("Accessory") and not RgrabPart.Parent:FindFirstChildOfClass("Humanoid") and (RgrabPart:IsGrounded() or RgrabPart.Anchored) then
                RgrabWeld.Part1 = RgrabPart
                root.Velocity = Vector3.new(0,0,0)
                fakerightarm.Velocity = Vector3.new(0,0,0)
                fakeleftarm.Velocity = Vector3.new(0,0,0)
                root.Massless = true
                fakerightarm.Massless =  true
                fakerightarm.CanCollide = false
            else
                Rholding = RgrabPart
                holdPart(RgrabPart, RgrabAtt)
            end
        end
    elseif key.KeyCode == Enum.KeyCode.ButtonL1 then
        if LgrabPart then
            if not LgrabPart.Parent:IsA("Accessory") and not LgrabPart.Parent:FindFirstChildOfClass("Humanoid") and (LgrabPart:IsGrounded() or LgrabPart.Anchored) then
                LgrabWeld.Part1 = LgrabPart
                root.Velocity = Vector3.new(0,0,0)
                fakerightarm.Velocity = Vector3.new(0,0,0)
                fakeleftarm.Velocity = Vector3.new(0,0,0)
                root.Massless = false
                fakeleftarm.Massless =  true
                fakeleftarm.CanCollide = false
            else
                Lholding = LgrabPart
                holdPart(LgrabPart, LgrabAtt)
            end
        end
    end 
end)

UserInputService.InputEnded:connect(function(key)
    if key.KeyCode == Enum.KeyCode.ButtonR1 then
        RgrabWeld.Part1 = nil
        fakerightarm.Massless =  false
        fakerightarm.CanCollide = true
        if Rholding then
            holdPart(Rholding, nil, true)
        end
    elseif key.KeyCode == Enum.KeyCode.ButtonL1 then
        LgrabWeld.Part1 = nil
        fakeleftarm.Massless =  false
        fakeleftarm.CanCollide = true
        if Lholding then
            holdPart(Lholding, nil, true)
        end
    end 
end)

--=========[Cool Things]==========--
ViewHUDFunc = function()
	local ViewportRange = ViewportRange or 32
	local UserInputService = game:GetService("UserInputService")
	local RunService = game:GetService("RunService")
	local VRService = game:GetService("VRService")
	local Players = game:GetService("Players")
	 local Client = Players.LocalPlayer
	  local Mouse = Client:GetMouse()
	local Camera = workspace.CurrentCamera
	 local CameraPort = Camera.CFrame
	local ViewHUD = script:FindFirstChild("ViewHUD") or game:GetObjects("rbxassetid://4480405425")[1]
	 local Viewport = ViewHUD.Viewport
	  local Viewcam = Instance.new("Camera")
	 local ViewPart = ViewHUD.Part
	ViewHUD.Parent = game:GetService("CoreGui")
	Viewcam.Parent = Viewport
	Viewcam.CameraType = Enum.CameraType.Scriptable
	Viewport.CurrentCamera = Viewcam
	Viewport.BackgroundTransparency = 1
	
	--[[Code]]--
	
	local function Clone(Character)
		local Arc = Character.Archivable
		local Clone;
		
		Character.Archivable = true
		Clone = Character:Clone()
		Character.Archivable = Arc
		
		return Clone
	end
	
	local function GetPart(Name, Parent, Descendants)
		for i = 1, #Descendants do
			local Part = Descendants[i]
			
			if Part.Name == Name and Part.Parent.Name == Parent then
				return Part
			end
		end
	end
	
	local function OnPlayerAdded(Player)
		if not ViewHUD or not ViewHUD.Parent then return end
		
		local function CharacterAdded(Character)
			if not ViewHUD or not ViewHUD.Parent then return end
			
			Character:WaitForChild("Head")
			Character:WaitForChild("Humanoid")
			
			wait(3)
			
			local FakeChar = Clone(Character)
			local TrueRoot = Character:FindFirstChild("HumanoidRootPart") or Character:FindFirstChild("Head")
			local Root = FakeChar:FindFirstChild("HumanoidRootPart") or FakeChar:FindFirstChild("Head")
			local RenderConnection;
			
			local Descendants = FakeChar:GetDescendants()
			local RealDescendants = Character:GetDescendants()
			local Correspondents = {};
			
			FakeChar.Humanoid.DisplayDistanceType = "None"
			
			for i = 1, #Descendants do
				local Part = Descendants[i]
				local Real = Part:IsA("BasePart") and GetPart(Part.Name, Part.Parent.Name, RealDescendants)
				if Part:IsA("BasePart") and Real then
					Part.Anchored = true
					Part:BreakJoints()
					if not string.find(Part.Name, "Fake") and Part.Name ~= "HumanoidRootPart" then
						Part.Transparency = 0
					else 
					    Part.Transparency = 1
					end
					table.insert(Correspondents, {Part, Real})
				end
			end
			
			RenderConnection = RunService.RenderStepped:Connect(function()
				if not Character or not Character.Parent then
					RenderConnection:Disconnect()
					FakeChar:Destroy()
					return
				end
				if (TrueRoot and (TrueRoot.Position - Camera.CFrame.p).Magnitude <= ViewportRange) or Player == Client or not TrueRoot then
					for i = 1, #Correspondents do
						local Part, Real = unpack(Correspondents[i])
						
						if Part and Real and Part.Parent and Real.Parent then
							Part.CFrame = Real.CFrame - Vector3.new(0,1,0)
						elseif Part.Parent and not Real.Parent then
							Part:Destroy()
						end
					end
				end
			end)
			FakeChar.Parent = Viewcam
		end
		Player.CharacterAdded:Connect(CharacterAdded)
		if Player.Character then
			spawn(function()
				CharacterAdded(Player.Character)
			end)
		end
	end
	
	local PlayerAdded = Players.PlayerAdded:Connect(OnPlayerAdded)
	
	for _, Player in pairs(Players:GetPlayers()) do
		OnPlayerAdded(Player)
	end
	
	ViewPart.Size = Vector3.new()
	
	if VRReady then
		Viewport.Position = UDim2.new(.62, 0, .89, 0)
		Viewport.Size = UDim2.new(.3, 0, .3, 0)
		Viewport.AnchorPoint = Vector2.new(.5, 1)
	else
		Viewport.Size = UDim2.new(0.3, 0, 0.3, 0)
	end
	
	local RenderStepped = RunService.RenderStepped:Connect(function()
		local Render = Camera.CFrame
		local Scale = Camera.ViewportSize
		if VRReady then
			Render = Render * VRService:GetUserCFrame(Enum.UserCFrame.Head)
		end
		CameraPort = CFrame.new(Render.p + Vector3.new(5, 2, 0), Render.p)
		Viewport.Camera.CFrame = CameraPort
		ViewPart.CFrame = Render * CFrame.new(0, 0, -16)
		ViewHUD.Size = UDim2.new(0, Scale.X - 6, 0, Scale.Y - 6)
	end)
		
	--
	
	local CharacterAdded
	
	CharacterAdded = Client.CharacterAdded:Connect(function()
		RenderStepped:Disconnect()
		CharacterAdded:Disconnect()
		PlayerAdded:Disconnect()
		
		ViewHUD:Destroy()
		ViewHUD = nil
	end)
	
	wait(9e9)
end;


ChatHUDFunc = function()
	--[[
		Variables
	--]]
 
	local UserInputService = game:GetService("UserInputService")
	local RunService = game:GetService("RunService")
 
	local VRService = game:GetService("VRService")
 
	local Players = game:GetService("Players")
	 local Client = Players.LocalPlayer
 
	local ChatHUD = game:GetObjects("rbxassetid://4476067885")[1]
	 local GlobalFrame = ChatHUD.GlobalFrame
	  local Template = GlobalFrame.Template
	 local LocalFrame = ChatHUD.LocalFrame
	 local Global = ChatHUD.Global
	 local Local = ChatHUD.Local
 
	local Camera = workspace.CurrentCamera
 
	Template.Parent = nil
	ChatHUD.Parent = game:GetService("CoreGui")
 
	--[[
		Code
	--]]
 
	local Highlight = Global.Frame.BackgroundColor3
	local Deselected = Local.Frame.BackgroundColor3
 
	local OpenGlobalTab = function()
		Global.Frame.BackgroundColor3 = Highlight
		Local.Frame.BackgroundColor3 = Deselected
 
		Global.Font = Enum.Font.SourceSansBold
		Local.Font = Enum.Font.SourceSans
 
		GlobalFrame.Visible = true
		LocalFrame.Visible = false
	end
 
	local OpenLocalTab = function()
		Global.Frame.BackgroundColor3 = Deselected
		Local.Frame.BackgroundColor3 = Highlight
 
		Global.Font = Enum.Font.SourceSans
		Local.Font = Enum.Font.SourceSansBold
 
		GlobalFrame.Visible = false
		LocalFrame.Visible = true
	end
 
	Global.MouseButton1Down:Connect(OpenGlobalTab)
	Local.MouseButton1Down:Connect(OpenLocalTab)
	Global.MouseButton1Click:Connect(OpenGlobalTab)
	Local.MouseButton1Click:Connect(OpenLocalTab)
 
	OpenLocalTab()
 
	--
 
	local function GetPlayerDistance(Sender)
		if Sender.Character and Sender.Character:FindFirstChild("Head") then
			return math.floor((Sender.Character.Head.Position - Camera:GetRenderCFrame().p).Magnitude + 0.5)
		end
	end
 
	local function NewGlobal(Message, Sender, Color)
		local Frame = Template:Clone()
 
		Frame.Text = ("[%s]: %s"):format(Sender.Name, Message)
		Frame.User.Text = ("[%s]:"):format(Sender.Name)
		Frame.User.TextColor3 = Color
		Frame.BackgroundColor3 = Color
		Frame.Parent = GlobalFrame
 
		delay(60, function()
			Frame:Destroy()
		end)
	end
 
	local function NewLocal(Message, Sender, Color, Dist)
		local Frame = Template:Clone()
 
		Frame.Text = ("(%s) [%s]: %s"):format(tostring(Dist), Sender.Name, Message)
		Frame.User.Text = ("(%s) [%s]:"):format(tostring(Dist), Sender.Name)
		Frame.User.TextColor3 = Color
		Frame.BackgroundColor3 = Color
		Frame.Parent = LocalFrame
 
		delay(60, function()
			Frame:Destroy()
		end)
	end
 
	local function OnNewChat(Message, Sender, Color)
		if not ChatHUD or not ChatHUD.Parent then return end
 
		NewGlobal(Message, Sender, Color)
 
		local Distance = GetPlayerDistance(Sender)
 
		if Distance and Distance <= options.ChatLocalRange then
			NewLocal(Message, Sender, Color, Distance)
		end
	end
 
	local function OnPlayerAdded(Player)
		if not ChatHUD or not ChatHUD.Parent then return end
 
		local Color = BrickColor.Random().Color
 
		Player.Chatted:Connect(function(Message)
			OnNewChat(Message, Player, Color)
		end)
	end
 
	Players.PlayerAdded:Connect(OnPlayerAdded)
 
	for _, Player in pairs(Players:GetPlayers()) do
		OnPlayerAdded(Player)
	end
 
	--
 
	local ChatPart = ChatHUD.Part
 
	ChatHUD.Adornee = ChatPart
 
	if VRReady then
		ChatHUD.Parent = game:GetService("CoreGui")
		ChatHUD.Enabled = true
		ChatHUD.AlwaysOnTop = true
 
		local OnInput = UserInputService.InputBegan:Connect(function(Input, Processed)
			if not Processed then
				if Input.KeyCode == Enum.KeyCode.ButtonB then
					ChatHUD.Enabled = not ChatHUD.Enabled
				end
			end
		end)
 
		local RenderStepped = RunService.RenderStepped:Connect(function()
 
			ChatPart.CFrame = lhand.CFrame * CFrame.Angles(math.rad(-90),math.rad(0), math.rad(0))
		end)
 
		local CharacterAdded
 
		CharacterAdded = Client.CharacterAdded:Connect(function()
			OnInput:Disconnect()
			RenderStepped:Disconnect()
			CharacterAdded:Disconnect()
 
			ChatHUD:Destroy()
			ChatHUD = nil
		end)
	end
 
	wait(9e9)
end;

task.spawn(ChatHUDFunc)
task.spawn(ViewHUDFunc)

Features & Information

be a gorilla in roblox, vr only

Community Comments (1)

defus1onndefus1onnSep 8, 2025

No work.

More Scripts for Universal Scripts