RetrofiyNightly Lua
RetrofiyNightly Lua
██████╗░███████╗████████╗██████╗░░█████╗░███████╗██╗██╗░░░██╗
██╔══██╗██╔════╝╚══██╔══╝██╔══██╗██╔══██╗██╔════╝██║╚██╗░██╔╝
██████╔╝█████╗░░░░░██║░░░██████╔╝██║░░██║█████╗░░██║░╚████╔╝░
██╔══██╗██╔══╝░░░░░██║░░░██╔══██╗██║░░██║██╔══╝░░██║░░╚██╔╝░░
██║░░██║███████╗░░░██║░░░██║░░██║╚█████╔╝██║░░░░░██║░░░██║░░░
╚═╝░░╚═╝╚══════╝░░░╚═╝░░░╚═╝░░╚═╝░╚════╝░╚═╝░░░░░╚═╝░░░╚═╝░░░
2016 client simulator
--[[
Keys:
[R] - Recommended, you should keep it on for accuracy sake and has no
big/known issues
[B] - Buggy, isn't fully implemented and/or may not be accurate
[L] - Low compatibility, works perfectly fine on some games
[O] - Optional, improvement or a personal preference
p
if RetrofiyLoaded then
print("Retrofiy is already loaded!")
return
end
local RetrofiyConfig = {
RetroLighting = true, -- [R] -- Force disables lighting properties that
weren't in 2016, uses compatibility Techology and deletes effects not seen in 2016
RetroCoreGui = true, -- [B] -- Replaces the Core Gui with a 2016 Core Gui
(Playerlist, topbar, etc)
RetroWorkspace = true, -- [R] -- Uses old materials, disables terrain
decoration, only allows brick colors and returns 2016 studs
RetroCharacters = true, -- [B] -- Displays health bars above the heads of
characters & returns old oof sound
RetroChat = true, -- [R] -- If default chat is enabled it will convert it to
the 2016 chat
BCOnly = false -- [O] -- Makes all premium players appear as BC players
instead of it being User ID linked
}
-- This part of the code was just straight up taken from the 2016 client, it
doesn't fully work though for some reason and will be optimised and fixed soon :)
renderSteppedConnection = [Link]:connect(function()
if not u1 then
u1 = tick()
u2 = u1
return
end
Message:Destroy()
if Creator then
Creator = [Link]
else
Creator = "temporary"
end
[Link] = MarketplaceService:GetProductInfo([Link]).Name
[Link] = "By " .. Creator
if Error then
local Response = [Link]("BindableFunction")
[Link] = function(answer)
if answer == "Yes" then
setclipboard("[Link]
end
Response:Destroy()
end
StarterGui:SetCore("SendNotification", {
Title = "Retrofiy Error!",
Text = "Retrofiy couldn't check if you have the most up-to-date
assets installed, do you want a download link set to ur clipboard?",
Duration = [Link],
Button1 = "Yes",
Button2 = "No",
Callback = Response
})
end
end
makefolder("Retrofiy")
makefolder("Retrofiy\\Patches")
DownloadFiles("Retrofiy")
local OldNewIndex
OldNewIndex = hookmetamethod(game, "__newindex", newcclosure(function(self,
property, value)
if self == UserInputService and property == "MouseIconEnabled" then
VirtualMouseIconEnabled = value
return
end
local OldIndex
OldIndex = hookmetamethod(game, "__index", newcclosure(function(self, property)
if self == UserInputService and property == "MouseIconEnabled" then
return VirtualMouseIconEnabled
end
[Link]:Connect(function()
[Link] = [Link](Mouse.X - 32, Mouse.Y)
end)
local IconReplacement = {
[""] = DefaultMouse
}
Mouse:GetPropertyChangedSignal("Icon"):Connect(function()
--local Icon = IconReplacement[[Link]]
--local NewIcon = (Icon and readfile(Icon)) or
game:HttpGet("[Link]
Image/Png") -- placeholder
--DefaultMouse = NewIcon
--[Link] = NewIcon
end)
[Link]:Connect(function()
[Link] = DefaultMouse
end)
end
end
[Link]:Connect(ApplyMouseHover)
[Link]:Connect(function()
[Link] = [Link]
end)
if [Link] then
local RestrictedLighting = {
["EnvironmentDiffuseScale"] = 0,
["EnvironmentSpecularScale"] = 0,
["ExposureCompensation"] = 0
}
local RestrictedEffects = {
"DepthOfFieldEffect",
"Atmosphere"
}
[Link]:Connect(RemoveEffect)
if Property then
Lighting[property] = Property
end
end)
end
local OriginalChat
if [Link] then
local RetroGui = [Link]("ScreenGui")
[Link] = true
[Link] = CoreGui
local Memberships = {
["33"] = "icon_BC-[Link]",
["67"] = "icon_TBC-[Link]",
["0"] = "icon_OBC-[Link]"
}
local SpecialPlayers = {
[2601528367] = "icon_DEV-[Link]",
[3897409161] = "icon_DEV-[Link]"
}
[Link] = false
[Link] = false
[Link] = Visibility
ChosenPlayerlistVisibility = Visibility
end
end
local ChatTextures = {
[true] = "[Link]",
[false] = "[Link]"
}
local BackpackTextures = {
[true] = "Backpack_Down.png",
[false] = "[Link]"
}
local CoreChatBools = {
["rbxasset://textures/ui/TopBar/[Link]"] = ChatTextures[true],
["rbxasset://textures/ui/TopBar/[Link]"] = ChatTextures[false]
}
ChatButton.MouseButton1Down:Connect(function()
if [Link] and [Link]:FindFirstChild("Chat")
then
[Link] = not
[Link]
end
end)
BackpackButton.MouseButton1Down:Connect(function()
ImprovedKeyPress({0xDF, 0xC0})
end)
NameContainer.MouseButton1Down:Connect(TogglePlayerlist)
[Link]:Connect(function(character)
AttachHumanoidToHealthBar(character:WaitForChild("Humanoid"))
end)
[Link]:Connect(function(input)
if [Link] == [Link] then
TogglePlayerlist()
end
end)
local TeamsOrderd = {}
local NeutralTeamExists = false
local Number = 0
return Count
end
if neutralteam then
[Link]("BoolValue", Button) -- A little bit stinky
end
end
CheckTeams()
player:GetPropertyChangedSignal("Team"):Connect(function()
CheckTeams()
[Link]([Link](function()
local SpecialPlayer = SpecialPlayers[[Link]]
[Link]:Connect(AddPlayerToPlayerlist)
[Link]:Connect(function(player)
if PlayerlistContainer:FindFirstChild([Link]) then
PlayerlistContainer[[Link]]:Destroy()
end
end)
[Link]:Connect(function()
[Link] =
GetAsset("Retrofiy/Assets/Textures/" ..
BackpackTextures[[Link]])
end)
local function ConvertScrollingFrame(scrollingframe) -- Maybe change the
thickness of the scrollbar to?
if scrollingframe:IsA("ScrollingFrame") then
scrollingframe.ScrollBarImageColor3 = [Link](56, 56, 56)
[Link] = 0
[Link]:Connect(function()
scrollingframe.ScrollBarImageColor3 = [Link](56,
56, 56)
[Link] = 0
end)
end
end
[Link]:Connect(ConvertScrollingFrame)
local MessageReplacement = {
["You have been kicked from the game"] = "You have lost the connection
to the game",
["Player service requests player disconnect"] = "This game has shut
down"
}
[Link]:Connect(function(message)
if not RemovedGuis then
RemovedGuis = true
[Link]:Connect(DestroyGui)
GuiService:ClearError()
local HealthBarNamePosition = {
[true] = [Link](0, 7, 0, 0),
[false] = [Link](0, 7, 0, 3)
}
local Hints = {}
local function ConvertHint(object)
if object:IsA("Hint") then
[Link]:Wait()
[Link](Hints, FakeHint)
[Link] = game:GetService("BrowserService")
FakeHint:GetPropertyChangedSignal("Text"):Connect(function()
[Link] = [Link]
[Link] = [Link]
end)
[Link]:Connect(function()
[Link](Hints, [Link](Hints, FakeHint))
Hint:Destroy()
object:Destroy()
end)
object:GetPropertyChangedSignal("Text"):Connect(function()
[Link] = [Link]
[Link] = [Link]
end)
object:GetPropertyChangedSignal("Parent"):Connect(function()
if not object:IsDescendantOf(workspace) then
Hint:Destroy()
[Link](Hints, [Link](Hints, FakeHint))
end
end)
end
end
local OldNameCall
OldNameCall = hookmetamethod(game, "__namecall",
newcclosure(function(self, ...)
local Method = getnamecallmethod()
local Args = {...}
if checkcaller() then
if tostring(Args[1]) == "Hint" and Method ==
"FindFirstChildWhichIsA" then
return Hints[1]
end
end
[Link]:Connect(ConvertHint)
[Link]:Connect(function()
local PlayerlistVisibility =
StarterGui:GetCoreGuiEnabled([Link])
local HealthVisibility =
StarterGui:GetCoreGuiEnabled([Link])
[Link] =
[Link]:GetTopbarTransparency()
[Link] =
StarterGui:GetCoreGuiEnabled([Link])
[Link] =
StarterGui:GetCoreGuiEnabled([Link])
[Link] = HealthVisibility
[Link] = HealthVisibility or PlayerlistVisibility
[Link] = HealthBarNamePosition[HealthVisibility]
end)
end
if [Link] then
local Surface = {"BackSurface", "BottomSurface", "FrontSurface",
"LeftSurface", "RightSurface", "TopSurface"}
local _Faces = {"Back", "Bottom", "Front", "Left", "Right", "Top"}
Players[[Link]].CharacterAppearanceLoaded:Wait()
end
end
if [Link] then
[Link]:WaitForChild("Humanoid", 2)
end
end
basepart:GetPropertyChangedSignal("Color"):Connect(function()
Studs.Color3 = [Link] -- omg lua
Studs.Color3 = [Link](Studs.Color3.R * 2,
Studs.Color3.G * 2, Studs.Color3.B * 2)
end)
basepart:GetPropertyChangedSignal("Transparency"):Connect(function()
[Link] = [Link]
end)
end
end
end
[Link]:Connect(ConvertBasePart)
sethiddenproperty(workspace:FindFirstChildOfClass("Terrain"), "Decoration",
false)
MaterialService.Use2022Materials = false
MaterialService:GetPropertyChangedSignal("Use2022Materials"):Connect(function()
MaterialService.Use2022Materials = false
end)
end
if [Link] then
local Humanoids = {}
local WomanLegs = {
[746826007] = 81628361, -- Uses Roblox assets, need to try use a
downloaded mesh instead
[746825633] = 81628308
}
local Conversion = {
["Humanoid"] = function(humanoid)
if [Link] ==
[Link] then
[Link] =
[Link]
end
if MeshId then
[Link] = MeshId
end
end
}
if Convert then
Convert(object)
end
end
[Link]:Connect(ConvertCharacter)
[Link]:Connect(function(object)
if [Link](Humanoids, object) then
[Link](Humanoids, [Link](Humanoids, object))
end
end)
[Link]:GetPropertyChangedSignal("CameraSubject"):Connect(function(
)
if [Link](Humanoids, [Link]) then
[Link](Humanoids, [Link](Humanoids,
[Link]))
else
ConvertCharacter(PreviousCameraSubject)
end
PreviousCameraSubject = [Link]
end)
[Link]([Link](function()
while true do
while #Humanoids > 0 do
for _, humanoids in pairs(Humanoids) do -- Does not work if
player has infinite health!
[Link] += 0.001
[Link]:Wait()
[Link] -= 0.001
end
end
[Link]:Wait()
end
end))
end
if [Link] then
if [Link] and [Link]:FindFirstChild("Chat") then --
Could be optimised/Rewritten (Might be better to just straight up use the 2016 chat
code)
OriginalChat = [Link]
[Link]:Connect(function(
)
[Link] = [Link](1, 0, 0, 40)
[Link] =
[Link](0, 7, 0, 6)
repeat
[Link] = 0.1
[Link]:GetPropertyChangedSignal("BackgroundTra
nsparency"):Wait()
until
not
[Link]:IsFocused()
[Link] = [Link](1, 0, 0, 32)
[Link] =
[Link](0, 7, 0, 2)
end)
[Link]:Connect(function(object)
if object:FindFirstChildOfClass("TextLabel") then
local Message = object:FindFirstChildOfClass("TextLabel")
Scroller:GetPropertyChangedSignal("ScrollBarThickness"):Connect(UpdateBarThickness)
-- Might not effect chat
UpdateBarThickness()
end
end
if isfile(Patch) then
loadstring(readfile(Patch))()
end
LoadingScreen:Destroy()