How to bring back old glitches?

I am trying to remake an old game from 2020, it was very known for glitches but roblox has patched stuff such as corner clipping and I was wondering how I can use scripts to bring it back. I know retrostudio has done it but I don’t know how. Any help would be appreciated!

use character controllers and code them back in

2 Likes

If you’re willing to recreate physics on Roblox lua or use character controllers (which are still on the works?), i guess it could be possible if you dedicate the time for it.
Sadly there’s no way to revert specific bug patches without relying on engine modifications, which counts as ToS infringement…

1 Like

how would you even modify the engine in the first place?

1 Like

Reverse Engineering exists, or one would just straight up modify the client during runtime (which exploits commonly use)
I doubt it would be possible as well, since there’s an anti-tampering system now.

1 Like

is it PlayerModule? if so im pretty sure i can find that rbxm file in an old 2020 roblox version i have lying around from my old pc

Hiya I work on a game called ‘FE2 Classic’ and we have a script to unpatch corner clipping.
In StarterCharacterScripts.

local RS = game:GetService("RunService")

local char = game:GetService("Players").LocalPlayer.Character
local rootPart = char:WaitForChild("Torso")

function clip()
	local SelectedClipPart

	local rayParams = RaycastParams.new()
	rayParams.FilterDescendantsInstances = char:GetDescendants()
	rayParams.FilterType = Enum.RaycastFilterType.Exclude
	rayParams.RespectCanCollide = true

	local result = workspace:Raycast(rootPart.Position, rootPart.CFrame.LookVector * -2, rayParams)

	if result then
		SelectedClipPart = result.Instance
	end

	if SelectedClipPart then
		-- get what corner of the part the player is touching.		
		local CornerPartsFolder = Instance.new("Folder", workspace)
		CornerPartsFolder.Name = "TEMP_CC_CornerParts"

		local function createCorner(pos)
			local CornerPart = Instance.new("Part", CornerPartsFolder)
			CornerPart.Anchored = true
			CornerPart.CanCollide = false
			CornerPart.Transparency = 1
			CornerPart.Color = Color3.new(1,0,0)
			CornerPart.CFrame = pos 
			CornerPart.Size = Vector3.new(.1, SelectedClipPart.Size.Y, .1)
			CornerPart.Touched:Connect(function() end)
			return CornerPart
		end

		local Corners = {
			createCorner( 
				SelectedClipPart.CFrame * CFrame.new(
					SelectedClipPart.Size.X/-2 - 0.05,
					0,
					SelectedClipPart.Size.Z/2 + 0.05
				)
			),

			createCorner(
				SelectedClipPart.CFrame * CFrame.new(
					SelectedClipPart.Size.X/2 + 0.05,
					0,
					SelectedClipPart.Size.Z/2 + 0.05 
				)* CFrame.Angles(0, 0, math.rad(180)) 

			),

			createCorner(
				SelectedClipPart.CFrame * CFrame.new(
					SelectedClipPart.Size.X/2 + 0.05,
					0,
					SelectedClipPart.Size.Z/-2 - 0.05
				)* CFrame.Angles(0, math.rad(180), 0) 
			),

			createCorner(
				SelectedClipPart.CFrame * CFrame.new(
					SelectedClipPart.Size.X/-2 - 0.05,
					0,
					SelectedClipPart.Size.Z/-2 - 0.05
				)* CFrame.Angles(math.rad(180), 0, 0) 	
			)
		}

		local SelectedCorner

		for _, part in pairs(rootPart:GetTouchingParts()) do
			for _, corner in pairs(Corners) do
				if part == corner then
					SelectedCorner = part
					break
				end
			end
		end

		if SelectedCorner then
			-- find which side of the corner the player is closer to 
			local LV = createCorner(SelectedCorner.CFrame - SelectedCorner.CFrame.LookVector * 0.3)
			local RV = createCorner(SelectedCorner.CFrame - SelectedCorner.CFrame.RightVector * 0.3)

			local function roundTransformation(partSize)
				if partSize > 5 then
					--[[ parts that are longer than 5 studs are given the 'glitch wrap behaviour', 
					meaning players will only be transformed 3/4 through the wall instead of all the way.
					]]
					return math.max(partSize*0.75, 5)
				else
					return partSize + 1
				end
			end

			if (LV.Position - rootPart.Position).Magnitude <= (RV.Position - rootPart.Position).Magnitude then
				rootPart.CFrame = rootPart.CFrame + SelectedCorner.CFrame.LookVector 
					* roundTransformation(SelectedClipPart.Size.Z)
			else
				rootPart.CFrame = rootPart.CFrame + SelectedCorner.CFrame.RightVector  
					* roundTransformation(SelectedClipPart.Size.X)
			end
		end
		CornerPartsFolder:Destroy()
	end 
end

local PrevAngle = rootPart.CFrame.LookVector

local Cooldown = false

RS.Stepped:Connect(function()
	if rootPart.CFrame.LookVector:Dot(PrevAngle) < -0.5 and Cooldown == false then
		Cooldown = true
		clip()
		wait(1)
		Cooldown = false
	end
	PrevAngle = rootPart.CFrame.LookVector
end)
1 Like

This works perfectly, thank you!

1 Like

Bought VIP on the game you work on as a thanks!

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.