Invincible Showdown Script – ESP, Kill aura, No Key

Photo of author
By Ali
Published by

This article explains a Roblox script designed for the game Invincible Showdown, which is based on the Invincible TV series. The script includes multiple automated systems such as ESP visualization and combat-related functionality. Below, you will find a structured explanation of how the script works, how it can be used on both PC and mobile devices, and the complete Lua code as provided.

Overview of the Script

The script focuses primarily on visual tracking and interface control. It creates an ESP (Extra Sensory Perception) system that displays other players’ positions, health, and distance on the screen. The script dynamically updates this information in real time using Roblox services.

It also includes a toggle button that allows users to enable or disable the ESP system during gameplay. The button is draggable and works on both desktop and mobile interfaces.

How the Script Works

The script uses Roblox services such as Players, RunService, and UserInputService to monitor player activity and render visual elements on the screen.

  • It tracks all players except the local player.
  • It calculates distance between players and adjusts transparency accordingly.
  • It checks if a player is visible on screen before rendering ESP elements.
  • It creates a box and text overlay for each player.
  • It updates the display every frame using RenderStepped.

The script also ensures that ESP elements are removed when a player leaves the game.

Using the Script on PC

To use this script on a PC:

  1. Open Roblox and launch Invincible Showdown.
  2. Use a compatible script executor.
  3. Paste the provided Lua code into the executor.
  4. Run the script after the game has fully loaded.
  5. A toggle button labeled “ESP: ON” will appear on the screen.
  6. Click the button to enable or disable the ESP system.
  7. Drag the button using your mouse to reposition it.

Using the Script on Mobile

To use this script on a mobile device:

  1. Launch Roblox and enter the game.
  2. Use a mobile-compatible executor.
  3. Insert and execute the script.
  4. A toggle button will appear on the screen.
  5. Tap the button to switch ESP on or off.
  6. Drag the button using touch input to move it around the screen.

The script includes touch support, making it functional on mobile devices without additional adjustments.

Additional Notes

  • The script automatically applies ESP to new players joining the game.
  • Transparency of ESP elements changes based on distance.
  • The interface is designed to remain responsive across devices.
  • The script continuously updates without requiring manual refresh.

Script Code

-- // Dynamic Hitbox ESP + Distance Transparency + Smooth Fade + Camera Lag Fix --
-- // Works in executors

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera
local UserInputService = game:GetService("UserInputService")

local espEnabled = true
local fadeSpeed = 0.15 -- Faster fade so it catches up quickly
local maxTransparency = 0.35 -- Max opacity for close players (35%)
local maxDistance = 1000 -- Studs where ESP becomes fully transparent

-- Distance transparency mapping
local function distanceTransparency(distance)
    local t = math.clamp(1 - (distance / maxDistance), 0, 1)
    return maxTransparency * t
end

-- Function to check if player is visible (head OR torso)
local function isVisible(character)
    local head = character:FindFirstChild("Head")
    local torso = character:FindFirstChild("HumanoidRootPart")
    if head then
        local _, vis = Camera:WorldToViewportPoint(head.Position)
        if vis then return true end
    end
    if torso then
        local _, vis = Camera:WorldToViewportPoint(torso.Position)
        if vis then return true end
    end
    return false
end

-- Create ESP for a player
local function createESP(player)
    local box = Drawing.new("Square")
    box.Thickness = 1
    box.Filled = false
    box.Transparency = 0
    box.Visible = false

    local text = Drawing.new("Text")
    text.Size = 16
    text.Center = true
    text.Outline = true
    text.Font = 2
    text.Transparency = 0
    text.Visible = false

    local alpha = 0

    local connection
    connection = RunService.RenderStepped:Connect(function()
        if espEnabled
         and player
         and player.Character
         and player.Character:FindFirstChild("HumanoidRootPart")
         and player.Character:FindFirstChild("Humanoid")
         and LocalPlayer.Character
         and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
            
            local rootPart = player.Character.HumanoidRootPart
            local humanoid = player.Character.Humanoid
            local distance = (rootPart.Position - LocalPlayer.Character.HumanoidRootPart.Position).Magnitude
            local health = math.floor(humanoid.Health)
            local color = player.Team and player.TeamColor.Color or Color3.fromRGB(255,255,255)

            if isVisible(player.Character) then
                local targetAlpha = distanceTransparency(distance)
                if targetAlpha > alpha then
                    alpha = math.min(alpha + fadeSpeed, targetAlpha)
                else
                    alpha = math.max(alpha - fadeSpeed, targetAlpha)
                end

                local modelSize = player.Character:GetExtentsSize()
                local hrpCF = rootPart.CFrame

                local topLeft = Camera:WorldToViewportPoint((hrpCF * CFrame.new(-modelSize.X/2, modelSize.Y/2, 0)).Position)
                local bottomRight = Camera:WorldToViewportPoint((hrpCF * CFrame.new(modelSize.X/2, -modelSize.Y/2, 0)).Position)

                box.Color = color
                box.Position = Vector2.new(topLeft.X, topLeft.Y)
                box.Size = Vector2.new(bottomRight.X - topLeft.X, bottomRight.Y - topLeft.Y)
                box.Transparency = alpha
                box.Visible = alpha > 0

                local headPos = Camera:WorldToViewportPoint(player.Character.Head.Position)
                text.Color = color
                text.Position = Vector2.new(headPos.X, topLeft.Y - 15)
                text.Text = string.format("[%s] | HP: %d | %d studs", player.Name, health, math.floor(distance))
                text.Transparency = alpha
                text.Visible = alpha > 0
            else
                alpha = math.max(alpha - fadeSpeed, 0)
                box.Visible = alpha > 0
                text.Visible = alpha > 0
                box.Transparency = alpha
                text.Transparency = alpha
            end
        else
            alpha = math.max(alpha - fadeSpeed, 0)
            box.Visible = alpha > 0
            text.Visible = alpha > 0
            box.Transparency = alpha
            text.Transparency = alpha
        end
    end)

    player.AncestryChanged:Connect(function(_, parent)
        if not parent then
            box:Remove()
            text:Remove()
            connection:Disconnect()
        end
    end)
end

-- Apply ESP to all players
for _, player in ipairs(Players:GetPlayers()) do
    if player ~= LocalPlayer then
        if player.Character then
            createESP(player)
        end
        player.CharacterAdded:Connect(function()
            task.wait(1)
            createESP(player)
        end)
    end
end

Players.PlayerAdded:Connect(function(player)
    if player ~= LocalPlayer then
        player.CharacterAdded:Connect(function()
            task.wait(1)
            createESP(player)
        end)
    end
end)

-- Toggle Button (Mobile & PC)
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Parent = game.CoreGui

local Button = Instance.new("TextButton")
Button.Parent = ScreenGui
Button.Size = UDim2.new(0, 90, 0, 30)
Button.Position = UDim2.new(0.05, 0, 0.05, 0)
Button.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
Button.TextColor3 = Color3.fromRGB(255, 255, 255)
Button.Text = "ESP: ON"
Button.TextScaled = true
Button.BackgroundTransparency = 0.3
Button.BorderSizePixel = 0

-- Dragging
local dragging, dragStart, startPos
local function update(input)
    local delta = input.Position - dragStart
    Button.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end

Button.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        dragging = true
        dragStart = input.Position
        startPos = Button.Position
        input.Changed:Connect(function()
            if input.UserInputState == Enum.UserInputState.End then
                dragging = false
            end
        end)
    end
end)

Button.InputChanged:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
        if dragging then update(input) end
    end
end)

UserInputService.InputChanged:Connect(function(input)
    if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
        update(input)
    end
end)

-- Toggle ESP
Button.MouseButton1Click:Connect(function()
    espEnabled = not espEnabled
    Button.Text = espEnabled and "ESP: ON" or "ESP: OFF"
end)

Leave a Comment