Realism — Make your games feel more immersive!

Disable Updated Roblox Controls inside of Roblox Studio Beta Features

I’m pretty sure you can get a little more performance by packing the radians as degrees and storing them as 16 bit integers as opposed to 32 bit floats, saves 2 bytes

2 Likes

image

Bug: When I sit down, this black box appears (idk if it’s your mouth or something)

Another bug: You can’t interact with things while in first person:

3 Likes

Yup that’s your mouth. Dynamic faces are problematic :face_exhaling:! Hopefully this can be fixed soon.

Another bug: When you stand up from a seat this happens

2 Likes

Hi, it’s been awhile and I’m surprised that this resource has not been updated for a while so do you have plans to continue updating and maintaining this resource? Multiple Roblox updates has affected this resource and there’s glitches and bugs like lag and new bugs that has been started to arise.

Please fix this, thank you @Maximum_ADHD for making this.

5 Likes

Hi. This is happening to me too. I applied this solution but I still not know if it is working at all. Maybe this helps you?

Changes this lines on the client;

for name, factors in pairs(self.RotationFactors) do
    local data = motors and motors[name]

    -- Si no hay datos para el motor, continuar
    if not data or not data.Motor then
        continue
    end

    local motor = data.Motor
    local origin = data.Origin

    -- Asegurarse de que el motor y el origen existen antes de continuar
    if not motor or not motor:IsA("Motor6D") then
        continue
    end

    if origin then
        local part0 = motor.Part0
        local setPart0 = origin.Parent

        if part0 and part0 ~= setPart0 then
            local newOrigin = part0:FindFirstChild(origin.Name)

            if newOrigin and newOrigin:IsA("Attachment") then
                origin = newOrigin
                data.Origin = newOrigin
            end
        end

        origin = origin.CFrame
    elseif data.C0 then
        origin = data.C0
    else
        continue
    end

    local pitch = pitchState.Current or 0
    local yaw = yawState.Current or 0

    if rotator.SnapFirstPerson and name == "Head" then
        if FpsCamera:IsInFirstPerson() then
            pitch = pitchState.Goal
            yaw = yawState.Goal
        end
    end

    local fPitch = pitch * factors.Pitch
    local fYaw = yaw * factors.Yaw

    -- HACK: Make the arms rotate with a tool.
    if name:sub(-4) == " Arm" or name:sub(-8) == "UpperArm" then
        local tool = character:FindFirstChildOfClass("Tool")

        if tool and not CollectionService:HasTag(tool, "NoArmRotation") then
            if name:sub(1, 5) == "Right" and rootPart:GetRootPart() ~= rootPart then
                fPitch = pitch * 1.3
                fYaw = yaw * 1.3
            else
                fYaw = yaw * .8
            end
        end
    end

    local dirty = false

    if fPitch ~= pitchState.Value then
        pitchState.Value = fPitch
        dirty = true
    end

    if fYaw ~= yawState.Value then
        yawState.Value = fYaw
        dirty = true
    end

    if dirty then
        local rot = origin - origin.Position

        local cf = CFrame.Angles(0, fPitch, 0)
            * CFrame.Angles(fYaw, 0, 0)

        motor.C0 = origin * rot:Inverse() * cf * rot
    end
end

There not a real good way to fix the lag. What I did is remove the SetLookAngle event to replicalte it on the server.

1 Like

Where can I find the sword in the video? It’s not the same as the official sword from roblox in the toolbox.

its the one from roblox battle iirc

Hey, know how i can make the footsteps any quieter?

can you please link the model?

Roblox Battle has been uncopylocked for some time, heres the link:
ROBLOX Battle [OPEN] - Roblox

1 Like

Question, will this be on Wally? That would be great

Been wondering this, too.

I also have this problem, can someone help me about this? I’m not sure why this is happening…

this resource is almost half a decade old at this point, but there’s a glaring bug where ur camera clips through if you get too close to a wall :doh:

Leaving this here incase anyone wants a system similar to this, but with just a better view of the arm in first person mode. That was my use case.

local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local camera = workspace.CurrentCamera

local function updateTransparency()
	for _, part in pairs(character:GetChildren()) do
		if part:IsA("BasePart") and (part.Name == "LeftLowerArm" or part.Name == "RightLowerArm") 
									or part.Name == "LeftUpperArm" or part.Name == "RightUpperArm" then
			part.LocalTransparencyModifier = part.Transparency
		end
	end
end

local oldC0Left = nil
local oldC0Right = nil
local oldC0Waist = nil

local function updateTorsoAndArmsPosition()
	-- Check if the camera is in first-person view
	local isFirstPerson = (camera.CFrame.Position - camera.Focus.Position).Magnitude < 1
	
	local leftShoulder = character:FindFirstChild("LeftUpperArm"):FindFirstChild("LeftShoulder")
	local rightShoulder = character:FindFirstChild("RightUpperArm"):FindFirstChild("RightShoulder")
	local torso = character:FindFirstChild("UpperTorso") or character:FindFirstChild("Torso")
	local waistJoint = torso:WaitForChild("Waist")
	
	if isFirstPerson then
		
		if oldC0Waist == nil then
			oldC0Waist = waistJoint.C0
			oldC0Left = leftShoulder.C0
			oldC0Right = rightShoulder.C0
		end
		
		local screenWidth = camera.ViewportSize.X
		local offsetAmount = screenWidth / 1000  -- Adjust this divisor to control the horizontal offset

		-- Calculate vertical rotation (pitch) only for the torso
		local cameraPitch = camera.CFrame:ToEulerAnglesYXZ()
		local torsoPitchRotation = CFrame.Angles(cameraPitch, 0, 0)

		-- Adjust torso position and rotation based on camera pitch
		waistJoint.C0 = CFrame.new(0, 0, 0) * torsoPitchRotation

		-- Offset the arms horizontally, pivoted slightly outward for visibility
		local outwardPivotAngle = math.rad(15)

		-- Left Shoulder
		leftShoulder.C0 = CFrame.new(-offsetAmount, -math.abs(cameraPitch), -1.5 * cameraPitch) * CFrame.Angles(0, outwardPivotAngle, 0)

		-- Right Shoulder
		rightShoulder.C0 = CFrame.new(offsetAmount, -math.abs(cameraPitch), -1.5 * cameraPitch) * CFrame.Angles(0, -outwardPivotAngle, 0)
	else
		if oldC0Left and oldC0Right then
			--print'reset'
			waistJoint.C0 = oldC0Waist;
			leftShoulder.C0 = oldC0Left
			rightShoulder.C0 = oldC0Right
			oldC0Waist = nil
			oldC0Left = nil
			oldC0Right = nil
		end
	end
end

RunService.RenderStepped:Connect(updateTransparency)
RunService.RenderStepped:Connect(updateTorsoAndArmsPosition)

feel free to use in your own projects :^)

2 Likes