Run it
Copy the script and paste it into your executor.
Config = {
Players = {
Killer = {Color = .(, , )},
Survivor = {Color = .(, , )}
},
Objects = {
Generator = {Color = .(, , )},
Gate = {Color = .(, , )},
Pallet = {Color = .(, , )},
Window = {Color = .(, , )},
Hook = {Color = .(, , )}
}
}
MaskNames = {
[] = ,
[] = ,
[] = ,
[] = ,
[] = ,
[] = ,
[] =
}
MaskColors = {
[] = .(, , ),
[] = .(, , ),
[] = .(, , ),
[] = .(, , ),
[] = .(, , ),
[] = .(, , ),
[] = .(, , )
}
Players = :()
RunService = :()
VirtualInputManager = :()
GuiService = :()
Lighting = :()
LocalPlayer = Players.LocalPlayer
PlayerGui = LocalPlayer:()
ActiveGenerators = {}
LastUpdateTick =
LastFullESPRefresh =
TouchID =
ActionPath =
HeartbeatConnection =
VisibilityConnection =
IndicatorGui =
()
PlayerGui:()
PlayerGui:():()
IndicatorGui = .()
IndicatorGui.Name =
IndicatorGui.IgnoreGuiInset =
IndicatorGui.DisplayOrder =
IndicatorGui.Parent = PlayerGui
(obj, name)
obj
attr = obj:(name)
attr ~= attr
child = obj:(name)
child
success, val = (() child.Value )
success val
(object, color)
h = object:() .()
h.Name =
h.Adornee = object
h.FillColor = color
h.OutlineColor = color
h.FillTransparency =
h.OutlineTransparency =
h.DepthMode = .HighlightDepthMode.AlwaysOnTop
h.Parent = object
(text, color, size, textSize)
billboard = .()
billboard.Name =
billboard.AlwaysOnTop =
billboard.Size = size .(, , , )
label = .()
label.Name =
label.Size = .(, , , )
label.BackgroundTransparency =
label.Text = text
label.TextColor3 = color
label.TextStrokeTransparency =
label.TextStrokeColor3 = .(, , )
label.Font = .Font.GothamBold
label.TextSize = textSize
label.TextWrapped =
label.RichText =
label.Parent = billboard
billboard
(player)
IndicatorGui IndicatorGui.Parent
player.Character
m = IndicatorGui:(player.Name) m m:()
c = IndicatorGui:(player.Name .. ) c c:()
k = IndicatorGui:(player.Name .. ) k k:()
rootPart = player.Character:()
humanoid = player.Character:()
rootPart
teamName = (player.Team player.Team.Name:())
selectedKillerAttr = (player, )
rawMask = (player, ) (player.Character, )
isKnocked = (player.Character, )
isHooked = (player.Character, )
isChased = (player.Character, )
isKiller = teamName:() ~=
color = isKiller Config.Players.Killer.Color Config.Players.Survivor.Color
isHooked
color = .(, , )
humanoid humanoid.Health < humanoid.MaxHealth
color = isKnocked .(, , ) .(, , )
distance =
LocalPlayer.Character LocalPlayer.Character:()
distance = .((rootPart.Position - LocalPlayer.Character.HumanoidRootPart.Position).Magnitude)
baseName = (isKiller selectedKillerAttr (selectedKillerAttr) ~= ) (selectedKillerAttr) player.Name
billboard = rootPart:()
nameText = baseName .. .. distance ..
billboard
billboard = (nameText, color)
billboard.Adornee = rootPart
billboard.Parent = rootPart
lbl = billboard:() billboard:()
lbl
lbl.Text = nameText
lbl.TextColor3 = color
(player.Character, color)
hasMask =
isKiller .((selectedKillerAttr):(), ) rawMask
searchMask = (rawMask):()
key, name (MaskNames)
key:() == searchMask
hasMask =
maskBillboard = rootPart:()
maskBillboard
maskBillboard = (name, MaskColors[key] .(,,), .(, , , ), )
maskBillboard.Name =
maskBillboard.StudsOffset = .(, , )
maskBillboard.Adornee = rootPart
maskBillboard.Parent = rootPart
lbl = maskBillboard:() maskBillboard:()
lbl
lbl.Text = name
lbl.TextColor3 = MaskColors[key] .(,,)
hasMask
maskBillboard = rootPart:()
maskBillboard maskBillboard:()
chasedLabel2D = IndicatorGui:(player.Name .. )
isChased
ct3 = billboard:()
ct3
ct3 = .(, billboard)
ct3.Name =
ct3.Size, ct3.Position, ct3.BackgroundTransparency = .(,,,), .(,,-,),
ct3.Font, ct3.TextSize = .Font.GothamBold,
ct3.Text, ct3.TextColor3, ct3.TextStrokeTransparency = , color,
chasedLabel2D
chasedLabel2D = .(, IndicatorGui)
chasedLabel2D.Name, chasedLabel2D.BackgroundTransparency = player.Name .. ,
chasedLabel2D.Font, chasedLabel2D.TextSize, chasedLabel2D.TextStrokeTransparency = .Font.GothamBold, ,
chasedLabel2D.AnchorPoint = .(, )
chasedLabel2D.Text, chasedLabel2D.TextColor3 = , color
screenPos, onScreen = .CurrentCamera:(rootPart.Position)
onScreen
chasedLabel2D.Visible =
chasedLabel2D.Visible =
viewportCenter = .CurrentCamera.ViewportSize /
direction = .(screenPos.X, screenPos.Y) - viewportCenter
screenPos.Z < direction = -direction
maxScale = .(.(direction.X) / (viewportCenter.X - ), .(direction.Y) / (viewportCenter.Y - ))
chasedLabel2D.Position = .(, viewportCenter.X + direction.X / (maxScale == maxScale), , viewportCenter.Y + direction.Y / (maxScale == maxScale))
chasedLabel2D chasedLabel2D:()
ct3 = billboard:()
ct3 ct3:()
killerLabel2D = IndicatorGui:(player.Name .. )
isKiller
killerLabel2D
killerLabel2D = .(, IndicatorGui)
killerLabel2D.Name, killerLabel2D.BackgroundTransparency = player.Name .. ,
killerLabel2D.Font, killerLabel2D.TextSize, killerLabel2D.TextStrokeTransparency = .Font.GothamBold, ,
killerLabel2D.Size, killerLabel2D.RichText, killerLabel2D.AnchorPoint = .(, , , ), , .(, )
killerLabel2D.Text, killerLabel2D.TextColor3 = baseName .. .. distance .. , color
screenPos, onScreen = .CurrentCamera:(rootPart.Position)
onScreen
killerLabel2D.Visible =
viewportCenter = .CurrentCamera.ViewportSize /
direction = .(screenPos.X, screenPos.Y) - viewportCenter
screenPos.Z < direction = -direction
maxScale = .(.(direction.X) / (viewportCenter.X - ), .(direction.Y) / (viewportCenter.Y - ))
killerLabel2D.Position = .(, viewportCenter.X + direction.X / (maxScale == maxScale), , viewportCenter.Y + direction.Y / (maxScale == maxScale))
killerLabel2D.Visible =
killerLabel2D killerLabel2D:()
(generator)
generator generator.Parent
percent = (generator, ) (generator, )
billboard = generator:()
percent >=
billboard billboard:()
h = generator:() h h:()
cp = .(percent, , )
finalColor = cp < Config.Objects.Generator.Color:(.(, , ), cp / ) .(, , ):(.(, , ), (cp - ) / )
percentStr = .(, percent)
billboard
billboard = (percentStr, finalColor)
billboard.Name, billboard.StudsOffset = , .(, , )
billboard.Adornee = generator:(, ) generator
billboard.Parent = generator
lbl = billboard:() billboard:()
lbl
lbl.Text = percentStr
lbl.TextColor3 = finalColor
()
IndicatorGui IndicatorGui.Parent
label = IndicatorGui:()
teamName = (LocalPlayer.Team LocalPlayer.Team.Name:())
teamName:() teamName:()
label
label = .(, IndicatorGui)
label.Name, label.Size, label.Position = , .(, , , ), .(, , , )
label.AnchorPoint, label.BackgroundTransparency, label.BackgroundColor3 = .(, ), , .(, , )
label.TextColor3, label.Font, label.TextSize, label.RichText = .(, , ), .Font.GothamBold, ,
label.Text =
players = Players:()
.(players, (a, b)
aA = (a, )
bA = (b, )
aA ~= bA
aA ==
((a, ) ) > ((b, ) )
)
nk = players[]
nk
label.Text = .. (nk == LocalPlayer ((nk, ) nk.Name)) ..
label label:()
()
ActiveGenerators = {}
_, obj (:())
obj.Name == (obj, Config.Objects.Window.Color)
Map = :()
Map
_, obj (Map:())
obj.Name == (obj, Config.Objects.Generator.Color) .(ActiveGenerators, obj)
obj.Name == m = obj:() m _, p (m:()) p:() (p, Config.Objects.Hook.Color)
obj.Name == obj.Name == (obj, Config.Objects.Pallet.Color)
obj.Name == (obj, Config.Objects.Gate.Color)
()
current = PlayerGui
segment .(ActionPath, ) current = current current:(segment)
current
()
b = ()
b b:()
p, s, i = b.AbsolutePosition, b.AbsoluteSize, GuiService:()
cx, cy = p.X + (s.X/) + i.X, p.Y + (s.Y/) + i.Y
(() VirtualInputManager:(TouchID, , cx, cy) .() VirtualInputManager:(TouchID, , cx, cy) )
()
.(()
prompt = PlayerGui:(, )
check = prompt prompt:(, )
check
line, goal = check:(), check:()
VisibilityConnection VisibilityConnection:()
VisibilityConnection = check:():(()
LocalPlayer.Team LocalPlayer.Team.Name == check.Visible
HeartbeatConnection HeartbeatConnection:()
HeartbeatConnection = RunService.Heartbeat:(()
lr, gr = line.Rotation % , goal.Rotation %
ss, se = (gr + ) % , (gr + ) %
(ss > se (lr >= ss lr <= se)) (lr >= ss lr <= se)
()
HeartbeatConnection HeartbeatConnection:() HeartbeatConnection =
)
HeartbeatConnection HeartbeatConnection:() HeartbeatConnection =
)
)
.ChildAdded:((c) c.Name == .() () )
LocalPlayer.CharacterAdded:(() HeartbeatConnection HeartbeatConnection:() VisibilityConnection VisibilityConnection:() () .() () )
RunService.Heartbeat:(()
now = ()
now - LastUpdateTick <
LastUpdateTick = now
Lighting.Ambient = .(, , )
Lighting.OutdoorAmbient = .(, , )
Lighting.Brightness =
Lighting.ClockTime =
Lighting.GlobalShadows =
Lighting.FogEnd =
now - LastFullESPRefresh > LastFullESPRefresh = now ()
()
myChar = LocalPlayer.Character
myRoot = myChar myChar:()
killerNearby =
_, p (Players:())
p ~= LocalPlayer
(p)
pTeam = p.Team p.Team.Name:()
pTeam:() myRoot p.Character p.Character:()
(p.Character.HumanoidRootPart.Position - myRoot.Position).Magnitude <
killerNearby =
myRoot
= myRoot:()
killerNearby
= (, .(, , ), .(, , , ), )
.Name, .StudsOffset, .Adornee, .Parent = , .(, , ), myRoot, myRoot
:()
i = #ActiveGenerators, , -
g = ActiveGenerators[i]
g g.Parent (g) .(ActiveGenerators, i) .(ActiveGenerators, i)
)
Players.PlayerRemoving:((p)
IndicatorGui
l = {p.Name .. , p.Name .. , p.Name}
_, n (l) obj = IndicatorGui:(n) obj obj:()
)
()
()
()
Auto perfect skill check generator and auto perfect skill check healing for mobile devices. No UI, it just stays on for the rest of the game. Upd: added ESPs for players, gens, hooks, and pallets (credits to Misery) + Added generator progress + Added player states ESP - Blue (healthy survivors) - Yellow (injured survivors) - Brown (knocked survivors) - Pink (hooked survivors) + Added next killer display in lobby + Added killer names: - Killer - Stalker - Slasher - Hidden - Masked - The Veil + Added fullbright Note: If you have high ping the skill check will miss sometimes. Also I haven't tested it on PC so don't use on PC. If your camera is frozen when it skill checks, click the Roblox icon menu and close it again and it should be fixed.

Universal