2008 to 2014 mouse aspects
Key RequiredUniversal

2008 to 2014 mouse aspects

Universal ScriptMOCCOHACMOCCOHAC 287 views 3.9K executesUpdated Jul 2, 2026
Unrated
00
Lua Script•115 lines (3961 chars)
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local CoreGui = game:GetService("CoreGui")
local GuiService = game:GetService("GuiService")

local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui", 5)

-- Clean up any existing custom cursors to avoid bugs
if CoreGui:FindFirstChild("Cursor") then 
	CoreGui.Cursor:Destroy() 
end

-- check for Roblox Esc Menu
local isEscMenuOpen = false

-- Load cursor asset
local success, assets = pcall(function()
	return game:GetObjects("rbxassetid://17895536995")
end)

if success and assets and assets[1] then
	local eazywin = assets[1]:Clone()
	
	-- load on top of everything
	if eazywin:FindFirstChild("LocalScript") then
		eazywin.LocalScript:Destroy()
	end
	
	eazywin.DisplayOrder = 1999999999
	eazywin.IgnoreGuiInset = true
	eazywin.Y.Value = 6
	eazywin.Parent = CoreGui

	local imageLabel = eazywin:FindFirstChild("ImageLabel")
	local actionLabel = imageLabel and imageLabel:FindFirstChild("action")
	
	-- Listen to core Esc Menu states to handle automatic hiding
	GuiService.MenuOpened:Connect(function()
		isEscMenuOpen = true
	end)

	GuiService.MenuClosed:Connect(function()
		isEscMenuOpen = false
	end)
	
	-- check if the cursor is hovering over a clickable UI
	local function isHoveringClickableUI(mousePos)
		if not PlayerGui then return false end
		local guiObjects = PlayerGui:GetGuiObjectsAtPosition(mousePos.X, mousePos.Y)
		for _, obj in ipairs(guiObjects) do
			if obj:IsA("GuiButton") or obj:IsA("TextButton") or obj:IsA("ImageButton") then
				return true
			end
		end
		return false
	end
	
	-- Frame-by-frame execution loop
	RunService.RenderStepped:Connect(function(step)
		if not eazywin or not eazywin.Parent then return end
		
		local mouse = LocalPlayer:GetMouse()
		local mousePos = Vector2.new(mouse.X, mouse.Y)
		
		-- Hovering over a ClickDetector part
		local isHoveringWorldClickable = false
		if mouse.Target and mouse.Target:FindFirstChildOfClass("ClickDetector") then
			isHoveringWorldClickable = true
		end
		
		-- Hovering over a Clickable UI Button
		local isHoveringUIButton = isHoveringClickableUI(mousePos)
		
		-- for esc menu only
		if isEscMenuOpen then
			-- if esc menu is open then show only default Roblox mouse alone, since idk how to make the custom cursor take over there
			UserInputService.MouseIconEnabled = true
			if imageLabel then imageLabel.Visible = false end
			if actionLabel then actionLabel.Visible = false end
			
		elseif isHoveringWorldClickable then
			-- Context A: if hovering a ClickDetector part then default Roblox cursor takes over to show the windows hand style
			UserInputService.MouseIconEnabled = true
			if imageLabel then imageLabel.Visible = false end
			
		elseif isHoveringUIButton then
			-- if hovering an interactable UI Button then custom cursor stays visible, show the question mark
			UserInputService.MouseIconEnabled = false
			if imageLabel then imageLabel.Visible = true end
			if actionLabel then actionLabel.Visible = true end
			
		else
			-- Context C: if hovering default space then custom cursor stays visible, hide the question mark
			UserInputService.MouseIconEnabled = false
			if imageLabel then imageLabel.Visible = true end
			if actionLabel then actionLabel.Visible = false end
		end
		
		-- perfectly position the custom cursor (moved down 26 pixels to be aligned)
		if imageLabel and imageLabel.Visible then
			local targetX = mouse.X - eazywin.X.Value
			local targetY = mouse.Y - eazywin.Y.Value + 26
			
			local tweenInfo = TweenInfo.new(step, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut)
			local goalProperties = {Position = UDim2.new(0, targetX, 0, targetY)}
			
			TweenService:Create(imageLabel, tweenInfo, goalProperties):Play()
		end
	end)
else
	warn("Failed to fetch custom cursor asset.")
end

Features & Information

works for every mouse image except for when you open the roblox esc menu, the rest works perfectly, it only changes the mouse image and does not add the old click to move
#old roblox#legacy#cl*ic#nostalgia#mouse cursor

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts