
KeylessUniversal

--[[
Minos Prime Abilities (estilo ULTRAKILL) - versão legítima
- LocalScript padrão do Roblox (sem getgenv, writefile, HttpGet, sethiddenproperty, etc)
- Feito para rig R6
- Afeta apenas o próprio personagem (não força fling/teleport em outros jogadores)
- Coloque este script em StarterPlayer > StarterPlayerScripts
]]
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local Debris = game:GetService("Debris")
local TextChatService = game:GetService("TextChatService")
local plr = Players.LocalPlayer
local char = plr.Character or plr.CharacterAdded:Wait()
local hrp = char:WaitForChild("HumanoidRootPart")
local hum = char:WaitForChild("Humanoid")
local cam = workspace.CurrentCamera
if hum.RigType ~= Enum.HumanoidRigType.R6 then
warn("[MinosPrime] Este script foi feito para rig R6. Pode não funcionar corretamente em R15.")
end
-- // Speed e jump do personagem ao carregar o script
hum.WalkSpeed = 46
hum.JumpPower = 49
-- // Limpeza de instâncias antigas (se o script for re-executado)
pcall(function() plr.PlayerGui:FindFirstChild("MinosPrimeGui"):Destroy() end)
pcall(function() workspace:FindFirstChild("MinosVFX"):Destroy() end)
local vfxFolder = Instance.new("Folder")
vfxFolder.Name = "MinosVFX"
vfxFolder.Parent = workspace
-- // IDs de som (troque pelos seus próprios ids de áudio públicos/carregados por você)
local Sounds = {
Die = "rbxassetid://0",
Judgement = "rbxassetid://0",
Crush = "rbxassetid://0",
Landing = "rbxassetid://0",
Whoosh = "rbxassetid://0",
ThyEnd = "rbxassetid://0",
Prepare = "rbxassetid://0",
}
local chatEnabled = true
-- // Manda a voiceline no chat do Roblox (funciona com o chat novo e o antigo)
local function sayInChat(msg)
if not chatEnabled then return end
local ok = pcall(function()
if TextChatService.ChatVersion == Enum.ChatVersion.TextChatService then
local channel = TextChatService.TextChannels:FindFirstChild("RBXGeneral")
if channel then
channel:SendAsync(msg)
end
else
plr:Chat(msg)
end
end)
if not ok then
pcall(function() plr:Chat(msg) end)
end
end
local function playSound(key, volume, pitch, parent)
local id = Sounds[key]
if not id or id == "rbxassetid://0" then return end
local s = Instance.new("Sound")
s.SoundId = id
s.Volume = volume or 3
s.PlaybackSpeed = pitch or 1
s.Parent = parent or hrp
s:Play()
Debris:AddItem(s, 6)
end
-- // Shake de câmera simples (sem afetar outros jogadores)
local function cameraShake(duration, intensity)
local startTime = tick()
local conn
conn = RunService.RenderStepped:Connect(function()
local elapsed = tick() - startTime
if elapsed > duration then
conn:Disconnect()
return
end
local falloff = 1 - (elapsed / duration)
cam.CFrame = cam.CFrame * CFrame.new(
(math.random() - 0.5) * intensity * falloff,
(math.random() - 0.5) * intensity * falloff,
0
)
end)
end
-- // Debris cosmético (parte só visual, não atinge outros jogadores)
local function spawnDebris(amount, cf)
local rayResult = workspace:Raycast(cf.Position, Vector3.new(0, -50, 0))
local material = Enum.Material.Slate
local color = Color3.new(0.6, 0.6, 0.6)
if rayResult and rayResult.Instance then
material = rayResult.Instance.Material
color = rayResult.Instance.Color
end
for _ = 1, amount do
local p = Instance.new("Part")
p.Name = "Debris"
p.Size = Vector3.new(1, 1, 1)
p.Material = material
p.Color = color
p.CFrame = cf
p.CanCollide = false
p.Anchored = false
p.Parent = vfxFolder
p.AssemblyLinearVelocity = Vector3.new(
(math.random() - 0.5) * 40,
math.random(5, 40),
(math.random() - 0.5) * 40
)
local att0 = Instance.new("Attachment", p)
local att1 = Instance.new("Attachment", p)
att0.Position = Vector3.new(0, 0.5, 0)
att1.Position = Vector3.new(0, -0.5, 0)
local trail = Instance.new("Trail")
trail.Attachment0 = att0
trail.Attachment1 = att1
trail.Lifetime = 0.6
trail.FaceCamera = true
trail.Color = ColorSequence.new(Color3.new(1, 1, 1))
trail.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.2),
NumberSequenceKeypoint.new(1, 1),
})
trail.Parent = p
Debris:AddItem(p, 3)
end
end
-- // Anel de choque cosmético no chão
local function shockwaveRing(cf, duration, size, color)
local ring = Instance.new("Part")
ring.Anchored = true
ring.CanCollide = false
ring.CastShadow = false
ring.Material = Enum.Material.Neon
ring.Color = color or Color3.fromRGB(255, 140, 0)
ring.Shape = Enum.PartType.Cylinder
ring.Size = Vector3.new(0.2, 1, 1)
ring.CFrame = cf * CFrame.Angles(0, 0, math.rad(90))
ring.Transparency = 0.3
ring.Parent = vfxFolder
TweenService:Create(ring, TweenInfo.new(duration, Enum.EasingStyle.Quad), {
Size = Vector3.new(0.2, size, size),
Transparency = 1,
}):Play()
Debris:AddItem(ring, duration)
end
-- // Rastro nos braços durante um dash
local function armTrail(duration, color)
local limbs = { char:FindFirstChild("Left Arm"), char:FindFirstChild("Right Arm") }
for _, limb in ipairs(limbs) do
if limb then
local att0 = Instance.new("Attachment", limb)
local att1 = Instance.new("Attachment", limb)
att0.Position = Vector3.new(0, limb.Size.Y / 2, 0)
att1.Position = Vector3.new(0, -limb.Size.Y / 2, 0)
local trail = Instance.new("Trail")
trail.Attachment0 = att0
trail.Attachment1 = att1
trail.Lifetime = 0.3
trail.FaceCamera = true
trail.Color = ColorSequence.new(color or Color3.new(1, 1, 1))
trail.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.1),
NumberSequenceKeypoint.new(1, 1),
})
trail.Parent = limb
Debris:AddItem(att0, duration)
Debris:AddItem(att1, duration)
Debris:AddItem(trail, duration)
end
end
end
-- // Aura de partículas ao redor do personagem (puramente cosmética)
local function bodyAura(duration, color)
local att = Instance.new("Attachment", hrp)
local emitter = Instance.new("ParticleEmitter")
emitter.Texture = "rbxassetid://243664672" -- textura padrão de fumaça/energia do catálogo do Roblox
emitter.Color = ColorSequence.new(color or Color3.fromRGB(255, 255, 0))
emitter.Lifetime = NumberRange.new(0.4, 0.6)
emitter.Rate = 40
emitter.Speed = NumberRange.new(2, 4)
emitter.Size = NumberSequence.new({
NumberSequenceKeypoint.new(0, 2),
NumberSequenceKeypoint.new(1, 0),
})
emitter.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.3),
NumberSequenceKeypoint.new(1, 1),
})
emitter.Parent = att
Debris:AddItem(att, duration)
return att
end
-- // ================= FALA ACIMA DA CABEÇA =================
local billboard = Instance.new("BillboardGui")
billboard.Name = "MinosDialog"
billboard.Size = UDim2.fromScale(4, 2)
billboard.StudsOffset = Vector3.new(0, 2.5, 0)
billboard.AlwaysOnTop = true
billboard.Parent = char:WaitForChild("Head")
local dialogLabel = Instance.new("TextLabel")
dialogLabel.Name = "DialogText"
dialogLabel.Size = UDim2.fromScale(1, 1)
dialogLabel.BackgroundTransparency = 1
dialogLabel.Font = Enum.Font.Code
dialogLabel.TextScaled = true
dialogLabel.TextColor3 = Color3.new(1, 1, 1)
dialogLabel.TextTransparency = 1
dialogLabel.Text = ""
dialogLabel.Parent = billboard
local dialogStroke = Instance.new("UIStroke", dialogLabel)
dialogStroke.Color = Color3.new(0, 0, 0)
dialogStroke.Thickness = 2
dialogStroke.Transparency = 1
local sayId = 0
local function Say(msg, holdDuration)
sayId += 1
local thisId = sayId
dialogLabel.TextTransparency = 0
dialogStroke.Transparency = 0
task.spawn(function()
for i = 1, #msg do
if sayId ~= thisId then return end
dialogLabel.Text = string.sub(msg, 1, i)
task.wait(0.02)
end
task.wait(holdDuration or 1)
if sayId == thisId then
TweenService:Create(dialogLabel, TweenInfo.new(1), { TextTransparency = 1 }):Play()
TweenService:Create(dialogStroke, TweenInfo.new(1), { Transparency = 1 }):Play()
end
end)
end
-- // Encontra o jogador mais próximo apenas para MIRAR (não move o outro jogador)
local function getClosestPlayer(radius)
local closest, dist = nil, radius or math.huge
for _, other in ipairs(Players:GetPlayers()) do
if other ~= plr and other.Character then
local otherHrp = other.Character:FindFirstChild("HumanoidRootPart")
if otherHrp then
local d = (hrp.Position - otherHrp.Position).Magnitude
if d < dist then
closest = otherHrp
dist = d
end
end
end
end
return closest
end
local function loadAnim(id)
local anim = Instance.new("Animation")
anim.AnimationId = "rbxassetid://" .. tostring(id)
return hum:LoadAnimation(anim)
end
-- // ================= GUI =================
local gui = Instance.new("ScreenGui")
gui.Name = "MinosPrimeGui"
gui.ResetOnSpawn = false
gui.Parent = plr.PlayerGui
local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.AnchorPoint = Vector2.new(0.5, 0.5)
mainFrame.Position = UDim2.fromScale(0.8, 0.5)
mainFrame.Size = UDim2.fromScale(0.2, 0.65)
mainFrame.BackgroundColor3 = Color3.new(0, 0, 0)
mainFrame.BackgroundTransparency = 0.2
mainFrame.Parent = gui
local corner = Instance.new("UICorner", mainFrame)
corner.CornerRadius = UDim.new(0, 10)
local stroke = Instance.new("UIStroke", mainFrame)
stroke.Color = Color3.new(1, 1, 1)
stroke.Thickness = 2
local layout = Instance.new("UIListLayout", mainFrame)
layout.Padding = UDim.new(0, 8)
layout.HorizontalAlignment = Enum.HorizontalAlignment.Center
layout.SortOrder = Enum.SortOrder.LayoutOrder
local padding = Instance.new("UIPadding", mainFrame)
padding.PaddingTop = UDim.new(0, 10)
padding.PaddingBottom = UDim.new(0, 10)
local function createButton(text, order)
local btn = Instance.new("TextButton")
btn.Name = text
btn.Text = text
btn.Size = UDim2.new(0.85, 0, 0, 40)
btn.BackgroundColor3 = Color3.new(0, 0, 0)
btn.TextColor3 = Color3.new(1, 1, 1)
btn.Font = Enum.Font.Code
btn.TextScaled = true
btn.LayoutOrder = order
btn.Parent = mainFrame
local c = Instance.new("UICorner", btn)
c.CornerRadius = UDim.new(0, 6)
local s = Instance.new("UIStroke", btn)
s.Color = Color3.new(1, 1, 1)
s.Thickness = 1.5
return btn
end
local function cooldownButton(btn, duration)
btn.Active = false
local original = btn.Text
local remaining = duration
task.spawn(function()
while remaining > 0 do
btn.Text = string.format("%.1f", remaining)
task.wait(0.1)
remaining -= 0.1
end
btn.Text = original
btn.Active = true
end)
end
local dieButton = createButton("Die", 1)
local judgementButton = createButton("Judgement", 2)
local crushButton = createButton("Crush", 3)
local thyEndButton = createButton("Thy End Is Now", 4)
local prepareButton = createButton("Prepare Thyself", 5)
local chatToggleButton = createButton("Chat: ON", 6)
chatToggleButton.MouseButton1Click:Connect(function()
chatEnabled = not chatEnabled
chatToggleButton.Text = chatEnabled and "Chat: ON" or "Chat: OFF"
end)
-- // ================= HABILIDADES =================
local dieBusy = false
dieButton.MouseButton1Click:Connect(function()
if dieBusy then return end
-- estilo Saitama: teleporta instantaneamente até o jogador mais próximo
local targetHrp = getClosestPlayer(150)
if not targetHrp then return end
dieBusy = true
local startCFrame = hrp.CFrame
local targetPos = targetHrp.Position
-- pose de "sumiço" antes do teleporte (agachar/preparar)
playSound("Whoosh", 3)
cameraShake(0.15, 1)
task.wait(0.1)
-- teleporte instantâneo (sem tween, pra parecer velocidade tipo Saitama)
hrp.CFrame = CFrame.new(targetPos + Vector3.new(0, 3, -4), targetPos) * CFrame.Angles(0, math.rad(180), 0)
-- efeito de rastro no ponto de partida e no ponto de chegada
spawnDebris(6, startCFrame)
shockwaveRing(startCFrame, 0.5, 15, Color3.fromRGB(255, 255, 255))
playSound("Die", 4)
sayInChat("DIE!")
cameraShake(0.4, 2)
spawnDebris(15, CFrame.new(targetPos))
shockwaveRing(CFrame.new(targetPos), 0.8, 25, Color3.fromRGB(255, 60, 60))
hum:ChangeState(Enum.HumanoidStateType.GettingUp)
cooldownButton(dieButton, 3)
dieBusy = false
end)
local judgementBusy = false
judgementButton.MouseButton1Click:Connect(function()
if judgementBusy then return end
local targetHrp = getClosestPlayer(60)
if not targetHrp then return end
judgementBusy = true
playSound("Judgement", 4)
sayInChat("JUDGEMENT!")
-- posição de referência: 3 studs atrás/acima do alvo, sem mover o outro jogador
local approachCFrame = targetHrp.CFrame * CFrame.new(0, 3, 5) * CFrame.Angles(math.rad(-90), 0, 0)
local tween = TweenService:Create(hrp, TweenInfo.new(0.5, Enum.EasingStyle.Quad), {
CFrame = approachCFrame,
})
tween:Play()
tween.Completed:Wait()
cameraShake(0.5, 2)
spawnDebris(15, hrp.CFrame)
shockwaveRing(hrp.CFrame, 1, 40, Color3.fromRGB(0, 200, 255))
task.wait(0.3)
hum:ChangeState(Enum.HumanoidStateType.GettingUp)
cooldownButton(judgementButton, 5)
judgementBusy = false
end)
local crushBusy = false
crushButton.MouseButton1Click:Connect(function()
if crushBusy then return end
crushBusy = true
local startPos = hrp.Position
playSound("Whoosh", 3)
-- sobe no ar
local upTween = TweenService:Create(hrp, TweenInfo.new(0.6, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
CFrame = CFrame.new(startPos + Vector3.new(0, 50, 0)),
})
upTween:Play()
upTween.Completed:Wait()
task.wait(0.4)
-- desce com impacto
local downTween = TweenService:Create(hrp, TweenInfo.new(0.35, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {
CFrame = CFrame.new(startPos),
})
downTween:Play()
downTween.Completed:Wait()
playSound("Crush", 5)
sayInChat("CRUSH!")
playSound("Landing", 3)
cameraShake(0.5, 2.5)
spawnDebris(20, CFrame.new(startPos))
shockwaveRing(CFrame.new(startPos), 1, 45, Color3.fromRGB(255, 165, 0))
hum:ChangeState(Enum.HumanoidStateType.GettingUp)
cooldownButton(crushButton, 6)
crushBusy = false
end)
local thyEndBusy = false
thyEndButton.MouseButton1Click:Connect(function()
if thyEndBusy then return end
thyEndBusy = true
-- avança rapidamente na direção em que a câmera/personagem está olhando
local lookDir = hrp.CFrame.LookVector
local startPos = hrp.Position
local endPos = startPos + (lookDir * 45)
Say("THY END IS NOW!", 1.5)
sayInChat("THY END IS NOW!")
playSound("ThyEnd", 4)
armTrail(0.5, Color3.fromRGB(255, 0, 0))
cameraShake(0.6, 2)
local dashTween = TweenService:Create(hrp, TweenInfo.new(0.35, Enum.EasingStyle.Linear), {
CFrame = CFrame.new(endPos, endPos + lookDir),
})
dashTween:Play()
dashTween.Completed:Wait()
spawnDebris(18, hrp.CFrame)
shockwaveRing(hrp.CFrame, 0.9, 35, Color3.fromRGB(255, 0, 0))
cooldownButton(thyEndButton, 6)
thyEndBusy = false
end)
local prepareBusy = false
prepareButton.MouseButton1Click:Connect(function()
if prepareBusy then return end
prepareBusy = true
Say("PREPARE THYSELF!", 1.5)
sayInChat("PREPARE THYSELF!")
playSound("Prepare", 4)
local aura = bodyAura(3, Color3.fromRGB(0, 200, 255))
shockwaveRing(hrp.CFrame, 1.2, 30, Color3.fromRGB(0, 200, 255))
cameraShake(0.3, 1)
-- buff temporário só no seu próprio personagem
local originalSpeed = hum.WalkSpeed
local originalJump = hum.JumpPower
hum.WalkSpeed = originalSpeed * 1.5
hum.JumpPower = originalJump * 1.3
task.wait(5)
hum.WalkSpeed = originalSpeed
hum.JumpPower = originalJump
if aura then aura:Destroy() end
cooldownButton(prepareButton, 10)
prepareBusy = false
end)
-- // Reset ao morrer/respawnar
plr.CharacterAdded:Connect(function(newChar)
char = newChar
hrp = newChar:WaitForChild("HumanoidRootPart")
hum = newChar:WaitForChild("Humanoid")
billboard.Parent = newChar:WaitForChild("Head")
hum.WalkSpeed = 46
hum.JumpPower = 49
end)No comments yet for this script.



