
Key RequiredUniversal

local mode = "Progressive" -- change for ragdoll or kill mode at script launch. You can always switch while running the script.
local punchCounts = {} -- used for progressive mode.
local healthPerHit = 15 -- also used for progressive mode.
local Players = game:GetService("Players")
local StarterGui = game:GetService("StarterGui")
local Debris = game:GetService("Debris")
local TweenService = game:GetService("TweenService")
local player = Players.LocalPlayer
repeat task.wait() until player and player:FindFirstChild("Backpack")
local mouse = player:GetMouse()
local PhysicsService = game:GetService("PhysicsService")
local RAGDOLL_GROUP = "RagdollParts"
local tool = Instance.new("Tool")
tool.Name = "Iron Fist"
tool.CanBeDropped = false
tool.RequiresHandle = true
local handle = Instance.new("Part")
handle.Name = "Handle"
handle.Size = Vector3.new(1, 1, 1)
handle.Transparency = 1
handle.CanCollide = false
handle.Parent = tool
local fistSound = Instance.new("Sound")
fistSound.SoundId = "rbxassetid://2885006854"
fistSound.Volume = 1
fistSound.Parent = handle
local smackSound = Instance.new("Sound")
smackSound.SoundId = "rbxassetid://9117970193"
smackSound.Volume = 1
smackSound.Parent = handle
local equipSound = Instance.new("Sound")
equipSound.SoundId = "rbxassetid://6784421247"
equipSound.Parent = handle
local rscreamSound = Instance.new("Sound")
rscreamSound.SoundId = "rbxassetid://6108565657"
rscreamSound.Parent = handle
local kscreamSound = Instance.new("Sound")
kscreamSound.SoundId = "rbxassetid://7772283448"
kscreamSound.Parent = handle
-- BONE SOUNDS
local boneSound1 = Instance.new("Sound")
boneSound1.SoundId = "rbxassetid://9113544629"
boneSound1.Volume = 1
boneSound1.Parent = handle
local boneSound2 = Instance.new("Sound")
boneSound2.SoundId = "rbxassetid://7837512412"
boneSound2.Volume = 1
boneSound2.Parent = handle
local boneSound3 = Instance.new("Sound")
boneSound3.SoundId = "rbxassetid://82176913611683"
boneSound3.Volume = 1
boneSound3.Parent = handle
StarterGui:SetCore("SendNotification", {
Title = "FE Punch",
Text = "by minishakk. Tortures NPCs. Controls: E, R, F",
Icon = "rbxassetid://16952938318"
})
pcall(function()
if not PhysicsService:CollisionGroupExists(RAGDOLL_GROUP) then
PhysicsService:CreateCollisionGroup(RAGDOLL_GROUP)
end
PhysicsService:CollisionGroupSetCollidable(RAGDOLL_GROUP, RAGDOLL_GROUP, true)
end)
local function ragdoll(character)
local motors = {}
for _, motor in ipairs(character:GetDescendants()) do
if motor:IsA("Motor6D") then
local part0, part1 = motor.Part0, motor.Part1
if part0 and part1 then
table.insert(motors, {
Name = motor.Name,
Parent = motor.Parent,
Part0 = part0,
Part1 = part1,
C0 = motor.C0,
C1 = motor.C1,
})
local a0 = Instance.new("Attachment")
a0.CFrame = motor.C0
a0.Name = "RagdollAttachment0"
a0.Parent = part0
local a1 = Instance.new("Attachment")
a1.CFrame = motor.C1
a1.Name = "RagdollAttachment1"
a1.Parent = part1
local constraint = Instance.new("BallSocketConstraint")
constraint.Attachment0 = a0
constraint.Attachment1 = a1
constraint.Name = "RagdollConstraint"
constraint.Parent = part0
end
motor:Destroy()
end
end
for _, part in ipairs(character:GetDescendants()) do
if part:IsA("BasePart") then
part.CanCollide = true
part.CollisionGroup = RAGDOLL_GROUP
end
end
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local force = Instance.new("BodyVelocity")
force.Velocity = root.CFrame.LookVector * 50
force.MaxForce = Vector3.new(1e5, 0, 1e5)
force.P = 1e4
force.Parent = root
Debris:AddItem(force, 0.5)
end
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.PlatformStand = false
humanoid:ChangeState(Enum.HumanoidStateType.Ragdoll)
end
task.wait(3)
for _, desc in ipairs(character:GetDescendants()) do
if desc:IsA("BallSocketConstraint") and desc.Name == "RagdollConstraint" then
desc:Destroy()
elseif desc:IsA("Attachment") and (desc.Name == "RagdollAttachment0" or desc.Name == "RagdollAttachment1") then
desc:Destroy()
end
end
for _, data in ipairs(motors) do
local m = Instance.new("Motor6D")
m.Name = data.Name
m.Part0 = data.Part0
m.Part1 = data.Part1
m.C0 = data.C0
m.C1 = data.C1
m.Parent = data.Parent
data.Part0.CollisionGroup = "Default"
data.Part1.CollisionGroup = "Default"
data.Part0.CanCollide = false
data.Part1.CanCollide = false
end
if humanoid then
humanoid:ChangeState(Enum.HumanoidStateType.GettingUp)
end
end
local function bleed(position)
local dir = Vector3.new(
math.random(-100, 100) / 100,
math.random(-100, 100) / 100,
math.random(-100, 100) / 100
).Unit
local part = Instance.new("Part")
part.Size = Vector3.new(1, 1, 1)
part.Anchored = true
part.CanCollide = false
part.Transparency = 1
part.CFrame = CFrame.new(position, position + dir)
part.Parent = workspace
local emitter = Instance.new("ParticleEmitter")
emitter.Texture = "rbxassetid://12532663797"
emitter.Rate = 0
emitter.Lifetime = NumberRange.new(0.3, 0.5)
emitter.Speed = NumberRange.new(10, 10)
emitter.VelocitySpread = 0
emitter.Color = ColorSequence.new(Color3.new(0.6, 0, 0))
emitter.EmissionDirection = Enum.NormalId.Front
emitter.Acceleration = Vector3.new(0, -20, 0)
emitter.Parent = part
emitter:Emit(1)
Debris:AddItem(part, 2)
end
local function flash()
local gui = Instance.new("ScreenGui")
gui.IgnoreGuiInset = true
gui.ResetOnSpawn = false
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = player:WaitForChild("PlayerGui")
local frame = Instance.new("Frame")
frame.BackgroundColor3 = Color3.new(0.545098, 0.231373, 0.235294)
frame.Size = UDim2.new(1, 0, 1, 0)
frame.BackgroundTransparency = 1
frame.Parent = gui
local tween = TweenService:Create(frame, TweenInfo.new(0.1), {BackgroundTransparency = 0.5})
tween:Play()
tween.Completed:Wait()
local outTween = TweenService:Create(frame, TweenInfo.new(0.2), {BackgroundTransparency = 1})
outTween:Play()
outTween.Completed:Wait()
gui:Destroy()
end
local function shake()
local cam = workspace.CurrentCamera
if not cam then return end
local originalCFrame = cam.CFrame
local originalCameraType = cam.CameraType
cam.CameraType = Enum.CameraType.Scriptable
local shakes = 6
local magnitude = 5
for i = 1, shakes do
local offset = Vector3.new(
math.random(-100, 100) / 1000,
math.random(-100, 100) / 1000,
math.random(-100, 100) / 1000
) * magnitude
cam.CFrame = originalCFrame * CFrame.new(offset)
task.wait(0.01)
end
cam.CFrame = originalCFrame
cam.CameraType = originalCameraType
end
local punching = false
local function animations()
if punching then return end
punching = true
local character = player.Character
if character then
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then
local animator = humanoid:FindFirstChildOfClass("Animator") or Instance.new("Animator", humanoid)
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://10717116749"
local track = animator:LoadAnimation(animation)
track.Priority = Enum.AnimationPriority.Action
track.Looped = false
track:Play()
track.Stopped:Connect(function()
punching = false
end)
else
punching = false
end
else
punching = false
end
end
local function audio(targetCharacter)
fistSound:Play()
task.wait(0.5)
local boneSounds = {boneSound1, boneSound2, boneSound3}
for i = 1, 3 do
if i <= 2 then
smackSound:Play()
end
boneSounds[i]:Play()
flash()
task.spawn(shake)
if targetCharacter then
local torso = targetCharacter:FindFirstChild("UpperTorso") or targetCharacter:FindFirstChild("Torso")
if torso then
bleed(torso.Position + Vector3.new(
math.random(-100, 100) / 100,
math.random(-100, 100) / 100,
math.random(-100, 100) / 100
))
end
end
task.wait(0.3)
end
end
local function gotoNPC(target)
local root = player.Character and player.Character:FindFirstChild("HumanoidRootPart")
if not root then return end
local head = target:FindFirstAncestorWhichIsA("Model"):FindFirstChild("Head")
if not head then return end
local look = head.CFrame.LookVector
local offset = look * -2
local newPos = head.Position + offset
root.CFrame = CFrame.new(newPos, head.Position)
end
local function punch(target)
local character = target:FindFirstAncestorOfClass("Model")
if character and character ~= player.Character then
local humanoid = character:FindFirstChildOfClass("Humanoid")
local head = character:FindFirstChild("Head")
if humanoid and head then
gotoNPC(target)
animations()
task.spawn(function() audio(character) end)
task.wait(2)
if humanoid and humanoid.Health > 0 then
if mode == "Kill" then
humanoid:ChangeState(Enum.HumanoidStateType.Ragdoll)
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local force = Instance.new("BodyVelocity")
force.Velocity = root.CFrame.LookVector * 50
force.MaxForce = Vector3.new(1e5, 0, 1e5)
force.P = 1e4
force.Parent = root
Debris:AddItem(force, 0.5)
end
kscreamSound:Play()
humanoid.Health = 0
elseif mode == "Ragdoll" then
rscreamSound:Play()
ragdoll(character)
elseif mode == "Progressive" then
local id = character
punchCounts[id] = (punchCounts[id] or 0) + 1
if punchCounts[id] < 3 then
local newHealth = math.max(humanoid.Health - healthPerHit, 1)
rscreamSound:Play()
humanoid.Health = newHealth
ragdoll(character)
else
humanoid:ChangeState(Enum.HumanoidStateType.Ragdoll)
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local force = Instance.new("BodyVelocity")
force.Velocity = root.CFrame.LookVector * 50
force.MaxForce = Vector3.new(1e5, 0, 1e5)
force.P = 1e4
force.Parent = root
Debris:AddItem(force, 0.5)
end
kscreamSound:Play()
humanoid.Health = 0
punchCounts[id] = nil
end
end
end
end
end
end
tool.Equipped:Connect(function()
equipSound:Play()
end)
tool.Activated:Connect(function()
if punching then return end
local target = mouse.Target
if target and target.Parent then
punch(target)
end
end)
mouse.KeyDown:Connect(function(key)
if key == "r" then
mode = "Ragdoll"
StarterGui:SetCore("SendNotification", {
Title = "FE Punch",
Text = "Ragdoll mode enabled.",
Icon = "rbxassetid://16142074920",
Duration = 2
})
elseif key == "e" then
mode = "Kill"
StarterGui:SetCore("SendNotification", {
Title = "FE Punch",
Text = "Kill mode enabled.",
Icon = "rbxassetid://9583486345",
Duration = 2
})
elseif key == "f" then
mode = "Progressive"
StarterGui:SetCore("SendNotification", {
Title = "FE Punch",
Text = "Progressive mode enabled.",
Icon = "rbxassetid://74033962087144",
Duration = 2
})
end
end)
tool.Parent = player.Backpack -- gives you the power ;)No comments yet for this script.



