Run it
Copy the script and paste it into your executor.
-- example ussage:
local BetterDrawing = loadstring(game:HttpGet("https://raw.githubusercontent.com/dementiaenjoyer/Better-Drawing/refs/heads/main/Main.lua"))();
local Players = game:GetService("Players");
local Workspace = game:GetService("Workspace");
local Camera = Workspace.CurrentCamera;
local LocalPlayer = Players.LocalPlayer;
local Round = math.round;
local function Update()
for _, Player in Players:GetChildren()
Character = Player.Character;
Root = Character Character:();
( Root) (Player == LocalPlayer)
;
ScreenPosition, OnScreen = Camera:(Root.Position - .(, , ));
Distance = ScreenPosition.Z;
( OnScreen)
;
Scale = ( * Camera.ViewportSize.Y) / (( * Distance * .(.(Camera.FieldOfView) / )) * );
Width, Height = ( * Scale), ( * Scale);
Size = .(Width, Height);
Position = .((ScreenPosition.X - (Width / )), (ScreenPosition.Y - (Height / )));
Outline = .();
Outline.Visible = ;
Box = .();
Box.Visible = ;
Box.Color = .(, , );
Box.Thickness = ;
Box.Size = Size;
Box.Position = Position;
Outline.Color = .(, , );
Outline.Thickness = ;
Outline.Position = Box.Position;
Outline.Size = Box.Size;
BetterDrawing:(Update);Loads code from the internet. It downloads more code when it runs (loadstring + HttpGet), which can change after it was posted. From: raw.githubusercontent.com.
What is Better-Drawing? Better-Drawing is a custom wrapper for Roblox's Drawing API that makes it way easier to work with visuals like ESPs, boxes, text, and more. The main benefit is that it automatically handles cleanup so you don’t have to manually remove elements or clear them every frame. Once you're done using a drawing (like when a player disappears), it gets deleted automatically. That means cleaner code and fewer performance issues. Credits to dementia enjoyer check out his GitHub here: https://github.com/dementiaenjoyer/Better-Drawing