I can't even wrap my head around it because i'm not sure where to start the math.
An explanation will be enough, no need to show anything.
This is my starting code(if you're curious, nothing right now though), what i'm trying to do is a path of exile/diablo style inventory.
--Services local RunService = game:GetService("RunService") --Variables local player = game.Players.LocalPlayer local mouse = player:GetMouse() --Inv local slots = script.Parent.Slots local getSlots = slots:GetChildren() local mouseSizeX = 1 local mouseSizeY = 1 local columns = 12 local rows = 5 local pickup = script.Parent.Parent.Pickup local pickupX = pickup.SizeX.Value local pickupY = pickup.SizeY.Value local modifiers = pickup.Modifiers local items = script.Parent.Items local characterUI = script.Parent.Character mouse.Move:Connect(function() for i = 1, #getSlots do if getSlots[i].ClassName ~= "UIGridLayout" then getSlots[i].MouseEnter:Connect(function() if pickupX > 1 or pickupY > 1 then mouseSizeX = pickupX mouseSizeY = pickupY elseif pickupX == 1 and pickupY == 1 then mouseSizeX = 1 mouseSizeY = 1 end getSlots[i].ImageColor3 = Color3.fromRGB(225,225,225) if getSlots[i].ImageColor3 == Color3.fromRGB(225,225,225) then --34Y difference in each slot --34.5X to 34.6X difference in each slot print(getSlots[i].AbsolutePosition) end end) getSlots[i].MouseLeave:Connect(function() getSlots[i].ImageColor3 = Color3.fromRGB(255,255,255) end) end end end)