-- libNyx and LiquidGlass shader by MaryBlackfild -- JOIN DISCORD: https://discord.gg/rUEEz4mfXw if SERVER then AddCSLuaFile() return end if _G.gSims_RNDX then return _G.gSims_RNDX end local bit_band = bit.band local surface_SetDrawColor = surface.SetDrawColor local surface_SetMaterial = surface.SetMaterial local surface_DrawTexturedRectUV = surface.DrawTexturedRectUV local surface_DrawTexturedRect = surface.DrawTexturedRect local render_CopyRenderTargetToTexture = render.CopyRenderTargetToTexture local math_min = math.min local math_max = math.max local DisableClipping = DisableClipping local type = type local SHADERS_VERSION = "1762169883" local SHADERS_GMA = [========[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]========] do if _G.gSims_RNDX_ShaderMounted ~= SHADERS_VERSION then local dec = util.Base64Decode(SHADERS_GMA) if dec and #dec > 0 then local path = "rndx_shaders_" .. SHADERS_VERSION .. ".gma" file.Write(path, dec) game.MountGMA("data/" .. path) _G.gSims_RNDX_ShaderMounted = SHADERS_VERSION end end end local function GET_SHADER(name) return SHADERS_VERSION:gsub("%.", "_") .. "_" .. name end local BLUR_RT = GetRenderTargetEx( "RNDX" .. SHADERS_VERSION .. SysTime(), 1024, 1024, RT_SIZE_LITERAL, MATERIAL_RT_DEPTH_SEPARATE, bit.bor(2, 256, 4, 8), 0, IMAGE_FORMAT_BGRA8888 ) local NEW_FLAG do local flags_n = -1 function NEW_FLAG() flags_n = flags_n + 1 return 2 ^ flags_n end end local NO_TL, NO_TR, NO_BL, NO_BR = NEW_FLAG(), NEW_FLAG(), NEW_FLAG(), NEW_FLAG() local SHAPE_CIRCLE, SHAPE_FIGMA, SHAPE_IOS = NEW_FLAG(), NEW_FLAG(), NEW_FLAG() local BLUR = NEW_FLAG() local RNDX = {} local _fb_frame = -1 function RNDX.EnsureFB() local f = FrameNumber() if _fb_frame ~= f then render.UpdateScreenEffectTexture() _fb_frame = f end end local shader_mat = [==[ screenspace_general { $pixshader "" $vertexshader "" $basetexture "" $texture1 "" $texture2 "" $texture3 "" $ignorez 1 $vertexcolor 1 $vertextransform 1 " 1 then local inv = 1 / k TL_, TR_, BL_, BR_ = TL_ * inv, TR_ * inv, BL_ * inv, BR_ * inv end return clamp0(TL_), clamp0(TR_), clamp0(BL_), clamp0(BR_) end end local function SetupDraw() local TL_, TR_, BL_, BR_ = normalize_corner_radii() local matrix = MATRIXES[MAT] MATRIX_SetUnpacked( matrix, BL_, W, OUTLINE_THICKNESS or -1, END_ANGLE, BR_, H, SHADOW_INTENSITY, ROTATION, TR_, SHAPE, BLUR_INTENSITY or 1.0, 0, TL_, TEXTURE and 1 or 0, START_ANGLE, 0 ) MATERIAL_SetMatrix(MAT, "$viewprojmat", matrix) if COL_R then surface_SetDrawColor(COL_R, COL_G, COL_B, COL_A) end surface_SetMaterial(MAT) end local MANUAL_COLOR = NEW_FLAG() local DEFAULT_DRAW_FLAGS = DEFAULT_SHAPE local function draw_rounded(x, y, w, h, col, flags, tl, tr, bl, br, texture, thickness) if col and col.a == 0 then return end RESET_PARAMS() if not flags then flags = DEFAULT_DRAW_FLAGS end local using_blur = bit_band(flags, BLUR) ~= 0 if using_blur then return RNDX.DrawBlur(x, y, w, h, flags, tl, tr, bl, br, thickness) end MAT = ROUNDED_MAT if texture then MAT = ROUNDED_TEXTURE_MAT MATERIAL_SetTexture(MAT, "$basetexture", texture) TEXTURE = texture end W, H = w, h TL, TR, BL, BR = bit_band(flags, NO_TL) == 0 and tl or 0, bit_band(flags, NO_TR) == 0 and tr or 0, bit_band(flags, NO_BL) == 0 and bl or 0, bit_band(flags, NO_BR) == 0 and br or 0 SHAPE = SHAPES[bit_band(flags, SHAPE_CIRCLE + SHAPE_FIGMA + SHAPE_IOS)] or SHAPES[DEFAULT_SHAPE] OUTLINE_THICKNESS = thickness if bit_band(flags, MANUAL_COLOR) ~= 0 then COL_R = nil elseif col then COL_R, COL_G, COL_B, COL_A = col.r, col.g, col.b, col.a else COL_R, COL_G, COL_B, COL_A = 255, 255, 255, 255 end SetupDraw() return surface_DrawTexturedRectUV(x, y, w, h, -0.015625, -0.015625, 1.015625, 1.015625) end function RNDX.Draw(r, x, y, w, h, col, flags) return draw_rounded(x, y, w, h, col, flags, r, r, r, r) end function RNDX.DrawOutlined(r, x, y, w, h, col, thickness, flags) return draw_rounded(x, y, w, h, col, flags, r, r, r, r, nil, thickness or 1) end function RNDX.DrawTexture(r, x, y, w, h, col, texture, flags) return draw_rounded(x, y, w, h, col, flags, r, r, r, r, texture) end function RNDX.DrawMaterial(r, x, y, w, h, col, mat, flags) local tex = mat:GetTexture("$basetexture") if tex then return RNDX.DrawTexture(r, x, y, w, h, col, tex, flags) end end function RNDX.DrawCircle(x, y, r, col, flags) return RNDX.Draw(r / 2, x - r / 2, y - r / 2, r, r, col, (flags or 0) + SHAPE_CIRCLE) end function RNDX.DrawCircleOutlined(x, y, r, col, thickness, flags) return RNDX.DrawOutlined(r / 2, x - r / 2, y - r / 2, r, r, col, thickness, (flags or 0) + SHAPE_CIRCLE) end function RNDX.DrawCircleTexture(x, y, r, col, texture, flags) return RNDX.DrawTexture(r / 2, x - r / 2, y - r / 2, r, r, col, texture, (flags or 0) + SHAPE_CIRCLE) end function RNDX.DrawCircleMaterial(x, y, r, col, mat, flags) local tex = mat:GetTexture("$basetexture") if tex then return RNDX.DrawTexture(r / 2, x - r / 2, y - r / 2, r, r, col, tex, (flags or 0) + SHAPE_CIRCLE) end end local USE_SHADOWS_BLUR = false local function draw_blur() if USE_SHADOWS_BLUR then MAT = SHADOWS_BLUR_MAT else MAT = ROUNDED_BLUR_MAT end COL_R, COL_G, COL_B, COL_A = 255, 255, 255, 255 SetupDraw() render_CopyRenderTargetToTexture(BLUR_RT) MATERIAL_SetFloat(MAT, BLUR_VERTICAL, 0) surface_DrawTexturedRect(X, Y, W, H) render_CopyRenderTargetToTexture(BLUR_RT) MATERIAL_SetFloat(MAT, BLUR_VERTICAL, 1) surface_DrawTexturedRect(X, Y, W, H) end function RNDX.DrawBlur(x, y, w, h, flags, tl, tr, bl, br, thickness) RESET_PARAMS() if not flags then flags = DEFAULT_DRAW_FLAGS end X, Y = x, y W, H = w, h TL, TR, BL, BR = bit_band(flags, NO_TL) == 0 and tl or 0, bit_band(flags, NO_TR) == 0 and tr or 0, bit_band(flags, NO_BL) == 0 and bl or 0, bit_band(flags, NO_BR) == 0 and br or 0 SHAPE = SHAPES[bit_band(flags, SHAPE_CIRCLE + SHAPE_FIGMA + SHAPE_IOS)] or SHAPES[DEFAULT_SHAPE] OUTLINE_THICKNESS = thickness draw_blur() end local function setup_shadows() X = X - SHADOW_SPREAD Y = Y - SHADOW_SPREAD W = W + SHADOW_SPREAD * 2 H = H + SHADOW_SPREAD * 2 TL = TL + SHADOW_SPREAD * 2 TR = TR + SHADOW_SPREAD * 2 BL = BL + SHADOW_SPREAD * 2 BR = BR + SHADOW_SPREAD * 2 end local function draw_shadows(r, g, b, a) if USING_BLUR then USE_SHADOWS_BLUR = true draw_blur() USE_SHADOWS_BLUR = false end MAT = SHADOWS_MAT if r == false then COL_R = nil else COL_R, COL_G, COL_B, COL_A = r, g, b, a end SetupDraw() surface_DrawTexturedRectUV(X, Y, W, H, -0.015625, -0.015625, 1.015625, 1.015625) end function RNDX.DrawShadowsEx(x, y, w, h, col, flags, tl, tr, bl, br, spread, intensity, thickness) if col and col.a == 0 then return end local OLD = DisableClipping(true) RESET_PARAMS() if not flags then flags = DEFAULT_DRAW_FLAGS end X, Y = x, y W, H = w, h SHADOW_SPREAD = spread or 30 SHADOW_INTENSITY = intensity or SHADOW_SPREAD * 1.2 TL, TR, BL, BR = bit_band(flags, NO_TL) == 0 and tl or 0, bit_band(flags, NO_TR) == 0 and tr or 0, bit_band(flags, NO_BL) == 0 and bl or 0, bit_band(flags, NO_BR) == 0 and br or 0 SHAPE = SHAPES[bit_band(flags, SHAPE_CIRCLE + SHAPE_FIGMA + SHAPE_IOS)] or SHAPES[DEFAULT_SHAPE] OUTLINE_THICKNESS = thickness setup_shadows() USING_BLUR = bit_band(flags, BLUR) ~= 0 if bit_band(flags, MANUAL_COLOR) ~= 0 then draw_shadows(false, nil, nil, nil) elseif col then draw_shadows(col.r, col.g, col.b, col.a) else draw_shadows(0, 0, 0, 255) end DisableClipping(OLD) end function RNDX.DrawShadows(r, x, y, w, h, col, spread, intensity, flags) return RNDX.DrawShadowsEx(x, y, w, h, col, flags, r, r, r, r, spread, intensity) end function RNDX.DrawShadowsOutlined(r, x, y, w, h, col, thickness, spread, intensity, flags) return RNDX.DrawShadowsEx(x, y, w, h, col, flags, r, r, r, r, spread, intensity, thickness or 1) end local BASE_FUNCS do BASE_FUNCS = { Rad = function(self, rad) TL, TR, BL, BR = rad, rad, rad, rad return self end, Radii = function(self, tl, tr, bl, br) TL, TR, BL, BR = tl or 0, tr or 0, bl or 0, br or 0 return self end, Texture = function(self, texture) TEXTURE = texture return self end, Material = function(self, mat) local tex = mat:GetTexture("$basetexture") if tex then TEXTURE = tex end return self end, Outline = function(self, thickness) OUTLINE_THICKNESS = thickness return self end, Shape = function(self, shape) SHAPE = SHAPES[shape] or 2.2 return self end, Color = function(self, cr, g, b, a) if type(cr) == "number" then COL_R, COL_G, COL_B, COL_A = cr, g or 255, b or 255, a or 255 else COL_R, COL_G, COL_B, COL_A = cr.r, cr.g, cr.b, cr.a end return self end, Blur = function(self, intensity) intensity = intensity or 1.0 intensity = math_max(intensity, 0) USING_BLUR, BLUR_INTENSITY = true, intensity return self end, Rotation = function(self, ang) ROTATION = math.rad(ang or 0) return self end, StartAngle = function(self, a) START_ANGLE = a or 0 return self end, EndAngle = function(self, a) END_ANGLE = a or 360 return self end, Shadow = function(self, spread, intensity) SHADOW_ENABLED, SHADOW_SPREAD, SHADOW_INTENSITY = true, spread or 30, intensity or (spread or 30) * 1.2 return self end, Clip = function(self, pnl) CLIP_PANEL = pnl return self end, Flags = function(self, flags) flags = flags or 0 if bit_band(flags, NO_TL) ~= 0 then TL = 0 end if bit_band(flags, NO_TR) ~= 0 then TR = 0 end if bit_band(flags, NO_BL) ~= 0 then BL = 0 end if bit_band(flags, NO_BR) ~= 0 then BR = 0 end local shape_flag = bit_band(flags, SHAPE_CIRCLE + SHAPE_FIGMA + SHAPE_IOS) if shape_flag ~= 0 then SHAPE = SHAPES[shape_flag] or SHAPES[DEFAULT_SHAPE] end if bit_band(flags, BLUR) ~= 0 then BASE_FUNCS.Blur(self) end if bit_band(flags, MANUAL_COLOR) ~= 0 then COL_R = nil end return self end } end local RECT = { Rad = BASE_FUNCS.Rad, Radii = BASE_FUNCS.Radii, Texture = BASE_FUNCS.Texture, Material = BASE_FUNCS.Material, Outline = BASE_FUNCS.Outline, Shape = BASE_FUNCS.Shape, Color = BASE_FUNCS.Color, Blur = BASE_FUNCS.Blur, Rotation = BASE_FUNCS.Rotation, StartAngle = BASE_FUNCS.StartAngle, EndAngle = BASE_FUNCS.EndAngle, Clip = BASE_FUNCS.Clip, Shadow = BASE_FUNCS.Shadow, Flags = BASE_FUNCS.Flags, Draw = function(self) if START_ANGLE == END_ANGLE then return end local OLD if SHADOW_ENABLED or CLIP_PANEL then OLD = DisableClipping(true) end if CLIP_PANEL then local sx, sy = CLIP_PANEL:LocalToScreen(0, 0) local sw, sh = CLIP_PANEL:GetSize() render.SetScissorRect(sx, sy, sx + sw, sy + sh, true) end if SHADOW_ENABLED then setup_shadows() draw_shadows(COL_R, COL_G, COL_B, COL_A) elseif USING_BLUR then draw_blur() else if TEXTURE then MAT = ROUNDED_TEXTURE_MAT MATERIAL_SetTexture(MAT, "$basetexture", TEXTURE) else MAT = ROUNDED_MAT end SetupDraw() surface_DrawTexturedRectUV(X, Y, W, H, -0.015625, -0.015625, 1.015625, 1.015625) end if CLIP_PANEL then render.SetScissorRect(0, 0, 0, 0, false) end if SHADOW_ENABLED or CLIP_PANEL then DisableClipping(OLD) end end, GetMaterial = function(self) if SHADOW_ENABLED or USING_BLUR then error("You can't get the material of a shadowed or blurred rectangle!") end if TEXTURE then MAT = ROUNDED_TEXTURE_MAT MATERIAL_SetTexture(MAT, "$basetexture", TEXTURE) else MAT = ROUNDED_MAT end SetupDraw() return MAT end } local CIRCLE = { Texture = BASE_FUNCS.Texture, Material = BASE_FUNCS.Material, Outline = BASE_FUNCS.Outline, Color = BASE_FUNCS.Color, Blur = BASE_FUNCS.Blur, Rotation = BASE_FUNCS.Rotation, StartAngle = BASE_FUNCS.StartAngle, EndAngle = BASE_FUNCS.EndAngle, Clip = BASE_FUNCS.Clip, Shadow = BASE_FUNCS.Shadow, Flags = BASE_FUNCS.Flags, Draw = RECT.Draw, GetMaterial = RECT.GetMaterial } local L_STRENGTH, L_SPEED, L_SAT = 0.012, 1.0, 1.06 local L_TINTR, L_TINTG, L_TINTB, L_TINTS = 1.0, 1.0, 1.0, 0.06 local L_SHIM, L_GRAIN, L_ALPHA = 0.9, 0.02, 0.95 local L_BLURALL, L_BLURRAD, L_SMOOTHK = 0.0, 0.0, 2.0 local LRECT = { Rad = BASE_FUNCS.Rad, Radii = BASE_FUNCS.Radii, Outline = BASE_FUNCS.Outline, Rotation = BASE_FUNCS.Rotation, StartAngle = BASE_FUNCS.StartAngle, EndAngle = BASE_FUNCS.EndAngle, Clip = BASE_FUNCS.Clip, Shadow = BASE_FUNCS.Shadow, Flags = BASE_FUNCS.Flags, Color = BASE_FUNCS.Color, Strength = function(self, v) L_STRENGTH = math_max(v or 0, 0) return self end, Speed = function(self, v) L_SPEED = v or 1.0 return self end, Saturation = function(self, v) L_SAT = v or 1.0 return self end, Tint = function(self, r, g, b) if IsColor and IsColor(r) then L_TINTR, L_TINTG, L_TINTB = r.r / 255, r.g / 255, r.b / 255 else L_TINTR, L_TINTG, L_TINTB = (r or 255) / 255, (g or 255) / 255, (b or 255) / 255 end return self end, TintStrength = function(self, v) L_TINTS = math_max(v or 0, 0) return self end, Shimmer = function(self, v) L_SHIM = math_max(v or 0, 0) return self end, Grain = function(self, v) L_GRAIN = math_max(v or 0, 0) return self end, Alpha = function(self, v) L_ALPHA = math_max(v or 0, 0) return self end, GlassBlur = function(self, strength, radius) L_BLURALL = math_max(strength or 0, 0) L_BLURRAD = math_max(radius or 0, 0) return self end, EdgeSmooth = function(self, pixels) L_SMOOTHK = math_max(pixels or 0, 0) return self end, Draw = function(self) if START_ANGLE == END_ANGLE then return end local OLD if SHADOW_ENABLED or CLIP_PANEL then OLD = DisableClipping(true) end if CLIP_PANEL then local sx, sy = CLIP_PANEL:LocalToScreen(0, 0) local sw, sh = CLIP_PANEL:GetSize() render.SetScissorRect(sx, sy, sx + sw, sy + sh, true) end MAT = LIQUID_MAT MATERIAL_SetFloat(MAT, LIQ_TIME, RealTime() * L_SPEED) MATERIAL_SetFloat(MAT, LIQ_STR, L_STRENGTH) MATERIAL_SetFloat(MAT, LIQ_ALPHA, L_ALPHA) MATERIAL_SetFloat(MAT, LIQ_SHIM, L_SHIM) MATERIAL_SetFloat(MAT, LIQ_SAT, L_SAT) MATERIAL_SetFloat(MAT, LIQ_TINTS, L_TINTS) MATERIAL_SetFloat(MAT, LIQ_GRAIN, L_GRAIN) MATERIAL_SetFloat(MAT, LIQ_TR, L_TINTR) MATERIAL_SetFloat(MAT, LIQ_TG, L_TINTG) MATERIAL_SetFloat(MAT, LIQ_TB, L_TINTB) MATERIAL_SetFloat(MAT, LIQ_BLUR_ALL, L_BLURALL) MATERIAL_SetFloat(MAT, LIQ_BLUR_RAD, L_BLURRAD) MATERIAL_SetFloat(MAT, LIQ_SMOOTHK, L_SMOOTHK) SetupDraw() surface_DrawTexturedRectUV(X, Y, W, H, -0.015625, -0.015625, 1.015625, 1.015625) if CLIP_PANEL then render.SetScissorRect(0, 0, 0, 0, false) end if SHADOW_ENABLED or CLIP_PANEL then DisableClipping(OLD) end end } local TYPES = { Rect = function(x, y, w, h) RESET_PARAMS() MAT = ROUNDED_MAT X, Y, W, H = x, y, w, h return RECT end, Circle = function(x, y, r) RESET_PARAMS() MAT = ROUNDED_MAT SHAPE = SHAPES[SHAPE_CIRCLE] X, Y, W, H = x - r / 2, y - r / 2, r, r r = r / 2 TL, TR, BL, BR = r, r, r, r return CIRCLE end, Liquid = function(x, y, w, h) RESET_PARAMS() MAT = LIQUID_MAT X, Y, W, H = x, y, w, h return LRECT end } setmetatable(RNDX, { __call = function() return TYPES end }) RNDX.NO_TL = NO_TL RNDX.NO_TR = NO_TR RNDX.NO_BL = NO_BL RNDX.NO_BR = NO_BR RNDX.SHAPE_CIRCLE = SHAPE_CIRCLE RNDX.SHAPE_FIGMA = SHAPE_FIGMA RNDX.SHAPE_IOS = SHAPE_IOS RNDX.BLUR = BLUR RNDX.MANUAL_COLOR = MANUAL_COLOR function RNDX.SetFlag(flags, flag, bool) flag = RNDX[flag] or flag if tobool(bool) then return bit.bor(flags, flag) else return bit.band(flags, bit.bnot(flag)) end end function RNDX.SetDefaultShape(shape) DEFAULT_SHAPE = shape or SHAPE_FIGMA DEFAULT_DRAW_FLAGS = DEFAULT_SHAPE end _G.gSims_RNDX = RNDX return RNDX -- libNyx and LiquidGlass shader by MaryBlackfild -- JOIN DISCORD: https://discord.gg/rUEEz4mfXw