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
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…
how would you even modify the engine in the first place?
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.
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)
This works perfectly, thank you!
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.