pain engine v0.9.2

Run Settings
LanguageLua
Language Version
Run Command
local studspermeters = 20 local fatal_vel = studspermeters*15 local terminal_vel = studspermeters*16 local fallstates = { Enum.HumanoidStateType.Freefall, Enum.HumanoidStateType.FallingDown, Enum.HumanoidStateType.Flying, Enum.HumanoidStateType.Jumping, } local bleeding = {} local falling = {} local ragdolled = {} local gores1 = {3739335394,3737268126,3929462189,3739335007} local gores2 = {3847883680,3847884467,3847885772,3929462677} local gores3 = {4953187368,4953187704} local pg = {1489922915,1489934368} local stuns = { 5169623605, 5169624072, 5169626214, 5169624072, 5169623821, 5169626595 } local impacts = { 3848124871, 3848125583, 3848126035, 3929466751 } if not _G['ignore pain engine'] then _G['ignore pain engine'] = {} end function check_fatal(hum,dmg) if 0 >= (hum.Health - dmg) then return true end return false end function check_godded(hum,lasthp) if lasthp then if lasthp > hum.Health then return true end elseif hum.MaxHealth >= math.huge or hum.MaxHealth >= 1/0 then return true elseif hum.Parent:FindFirstChildOfClass("ForceField") then return true end end function is_enabled(plr) if _G['ignore pain engine'][plr.UserId] then return true elseif _G['ignore pain engine'][plr.UserId] == nil then return true else return false end end function toggle_enable(plr,bool) _G['ignore pain engine'][plr.UserId] = bool end local junk = Instance.new("Folder",script) function bleed2(plr,frick,targhum,can_hurt,t,splat,dir) coroutine.resume(coroutine.create(function() if frick and targhum then else return end local rig = targhum.RigType local limbs = {'Head','Left Arm','Right Arm','Left Leg','Right Leg','RightUpperLeg','LeftUpperLeg','RightUpperArm','LeftUpperArm','RightLowerLeg','LeftLowerLeg','RightLowerArm','LeftLowerArm','RightFoot','LeftFoot','RightHand','LeftHand'} local interval_bleed = 0.1 if not bleeding[frick] or 0 >= bleeding[frick] then bleeding[frick] = 0 bleeding[frick] = bleeding[frick] + t elseif bleeding[frick] > 0 then bleeding[frick] = bleeding[frick] + t return else return end while bleeding[frick] > 0 do if (not frick or not frick.Parent or not frick.Parent.Parent or not targhum or not targhum.Parent) then break end local max_limbs = 0 local current_limbs = 0 local gone_limbs = 0 local targchar = targhum.Parent if rig == Enum.HumanoidRigType.R6 then max_limbs = 5 elseif rig == Enum.HumanoidRigType.R15 then max_limbs = 13 end for i,v in pairs(targchar:GetChildren()) do local found = false for i,n in pairs(limbs) do if n == v.Name then found = true; end; end; if found and not v:FindFirstChild("Dismembered") then current_limbs = current_limbs + 1 end end gone_limbs = (max_limbs-current_limbs) if targhum and can_hurt then local bdmg = 0.3 local multi = 3 if 0 >= gone_limbs then gone_limbs = 1 else gone_limbs = gone_limbs*multi end if 0 >= (targhum.Health - bdmg*gone_limbs) then targhum.BreakJointsOnDeath = false --[[ pcall(function() kill(plr,targchar,dir,5) end) ]] end targhum:TakeDamage(bdmg*gone_limbs) end local vel = (dir*0.5)+Vector3.new(math.random(-5, 5)/40,math.random(-5, 5)/30,math.random(-5, 5)/40) local thing = Instance.new('Part') thing.Name = "blood_drop" thing.Size = Vector3.new(0.1,0.1,0.1) thing.CFrame = frick.CFrame*CFrame.new(0,frick.Size.Y/2,0) if splat then thing.Transparency = 0 elseif not splat then thing.Transparency = 1 end thing.Color = Color3.fromRGB(75, 0, 0) thing.Material = Enum.Material.SmoothPlastic thing.CanCollide = false thing.Velocity = vel thing.Parent = junk thing:SetNetworkOwner(plr) local mesh = Instance.new('SpecialMesh') mesh.MeshType = Enum.MeshType.Sphere mesh.Parent = thing game:GetService("Debris"):AddItem(thing,10) local att1,att2 = Instance.new("Attachment"),Instance.new("Attachment") att1.Parent = thing att1.Position = Vector3.new(0,-(thing.Size.Y/2),0) att2.Parent = thing att2.Position = Vector3.new(0,(thing.Size.Y/2),0) if splat then local trail_drop = Instance.new("Trail") trail_drop.Parent = thing trail_drop.Attachment0 = att1 trail_drop.Attachment1 = att2 trail_drop.Color = ColorSequence.new(Color3.new(0.5, 0, 0),Color3.new(0.7, 0, 0)) trail_drop.FaceCamera = true trail_drop.LightInfluence = 1 trail_drop.WidthScale = NumberSequence.new(1,0) trail_drop.Transparency = NumberSequence.new(0,1) trail_drop.Lifetime = 0.1 trail_drop.MinLength = 0 end local rawrxd = Instance.new('BodyForce') rawrxd.Parent = thing rawrxd.Force = vel game:GetService("Debris"):AddItem(rawrxd,0.01) thing.Touched:connect(function(tou) if tou and tou.Parent and not tou:IsDescendantOf(targchar) and not tou:IsDescendantOf(junk) and not tou.Parent:FindFirstChildOfClass("Humanoid") and not tou.Parent.Parent:FindFirstChildOfClass("Humanoid") and not tou.Parent:IsA("Accessory") and tou.Name ~= 'Handle' and tou.Parent.Name ~= 'Handle' and not tou.Parent:IsA("Tool") and not string.match(tou.Name:lower(),'blood_drop') and not string.match(tou.Name:lower(),'bullet') and not string.match(tou.Name:lower(),'bone') and not string.match(tou.Name:lower(),'gun mag') and not string.match(tou.Name:lower(),'limb') then local pos = Vector3.new(thing.Position.X,(tou.Position.Y+(tou.Size.Y/2))+(0.02/2),thing.Position.Z) local Point1 = pos-Vector3.new(0.01,0.01,0.01) local Point2 = pos+Vector3.new(0.01,0.01,0.01) local Region = Region3.new(Point1,Point2) for _,Part in pairs(game.Workspace:FindPartsInRegion3(Region,nil,math.huge)) do if Part.Name == "blood" then tou = Part end end thing:Destroy() if tou.Name == "blood" then local reee = tou.CFrame if tou.Transparency > -0.2 then tou.Transparency = tou.Transparency - 0.1 end local s = 0.025 local smax = 0.1 if tou.Color.R > 0 then local nc = tou.Color.R*1.012 if nc > 1 then nc = 1 end tou.Color = Color3.new(nc, 0, 0) end s = smax*math.clamp(t/10,0,1) if tou.Size.X < 5 then tou.Size = tou.Size+Vector3.new(s*4,0,s*4) elseif tou.Size.X < 7.5 then tou.Size = tou.Size+Vector3.new(s*3,0,s*3) elseif tou.Size.X < 10 then tou.Size = tou.Size+Vector3.new(s*2,0,s*2) end tou.CFrame = reee local tween = game:GetService("TweenService"):Create(tou,TweenInfo.new(4),{Transparency = 1}) tween:Play() tween.Completed:Connect(function() if tou.Transparency >= 0.9 then tou:Destroy() end end) local splash = Instance.new("Sound",tou) splash.SoundId = 'rbxassetid://5157825454' --685857471 splash.Volume = 0.025 splash.PlayOnRemove = true splash:Destroy() elseif tou.CanCollide == true then local bloodsplat = Instance.new('Part') local s = math.random(5,10)/10 if gone_limbs >= 1 then bloodsplat.Size = Vector3.new(s*gone_limbs,0.2,s*gone_limbs) else bloodsplat.Size = Vector3.new(s,0.2,s) end bloodsplat.Name = "blood" bloodsplat.Anchored = true bloodsplat.CanCollide = false bloodsplat.Material = Enum.Material.Glass bloodsplat.Color = Color3.fromRGB(75, 0, 0) bloodsplat.Transparency = -0.2 bloodsplat.Parent = junk bloodsplat.CFrame = CFrame.new(pos) local mesh = Instance.new('SpecialMesh') mesh.MeshType = Enum.MeshType.Sphere mesh.Parent = bloodsplat local tween = game:GetService("TweenService"):Create(bloodsplat,TweenInfo.new(4),{Transparency = 1}) tween:Play() tween.Completed:Connect(function() if bloodsplat.Transparency >= 0.9 then bloodsplat:Destroy() end end) local splash = Instance.new("Sound",bloodsplat) splash.SoundId = 'rbxassetid://5157825454' splash.Volume = 0.025 splash.PlayOnRemove = true splash:Destroy() end end end) bleeding[frick] = bleeding[frick] - interval_bleed wait(interval_bleed) end end)) end function blood_splat(obj) local ParticleEmitter1 = Instance.new("ParticleEmitter") local ParticleEmitter2 = Instance.new("ParticleEmitter") local ParticleEmitter3 = Instance.new("ParticleEmitter") ParticleEmitter1.Name = "Blood3" ParticleEmitter1.Parent = obj ParticleEmitter1.Speed = NumberRange.new(3, 7) ParticleEmitter1.Rotation = NumberRange.new(-360, 360) ParticleEmitter1.Color = ColorSequence.new(Color3.new(0.486275, 0, 0),Color3.new(0.258824, 0, 0)) ParticleEmitter1.Enabled = false ParticleEmitter1.LightEmission = 0.20000000298023 ParticleEmitter1.LightInfluence = 1 ParticleEmitter1.Texture = "rbxassetid://241779220" ParticleEmitter1.Transparency = NumberSequence.new(1,0.48750001192093,0.75625002384186,1) ParticleEmitter1.ZOffset = 0.5 ParticleEmitter1.Size = NumberSequence.new(0,2.8749995231628) ParticleEmitter1.Acceleration = Vector3.new(0, -5, 0) ParticleEmitter1.EmissionDirection = Enum.NormalId.Front ParticleEmitter1.Lifetime = NumberRange.new(0.40000000596046, 1) ParticleEmitter1.Rate = 3000 ParticleEmitter1.RotSpeed = NumberRange.new(-40, 270) ParticleEmitter1.SpreadAngle = Vector2.new(360, 360) ParticleEmitter1.VelocitySpread = 360 ParticleEmitter2.Name = "Blood" ParticleEmitter2.Parent = obj ParticleEmitter2.Speed = NumberRange.new(5, 10) ParticleEmitter2.Rotation = NumberRange.new(-360, 360) ParticleEmitter2.Color = ColorSequence.new(Color3.new(0.666667, 0, 0),Color3.new(0.423529, 0, 0)) ParticleEmitter2.Enabled = false ParticleEmitter2.LightEmission = 0.40000000596046 ParticleEmitter2.LightInfluence = 1 ParticleEmitter2.Texture = "rbxassetid://73547327" ParticleEmitter2.Transparency = NumberSequence.new(0.10000000149012,0.14375001192093,0.49374997615814,1) ParticleEmitter2.Size = NumberSequence.new(0,2.8749995231628) ParticleEmitter2.Acceleration = Vector3.new(0, -5, 0) ParticleEmitter2.EmissionDirection = Enum.NormalId.Front ParticleEmitter2.Lifetime = NumberRange.new(0.30000001192093, 0.5) ParticleEmitter2.Rate = 10000000 ParticleEmitter2.RotSpeed = NumberRange.new(-40, 270) ParticleEmitter2.SpreadAngle = Vector2.new(360, 360) ParticleEmitter2.VelocitySpread = 360 ParticleEmitter3.Name = "Blood2" ParticleEmitter3.Parent = obj ParticleEmitter3.Speed = NumberRange.new(5, 14) ParticleEmitter3.Color = ColorSequence.new(Color3.new(0.45098, 0, 0),Color3.new(0.45098, 0, 0)) ParticleEmitter3.Enabled = false ParticleEmitter3.LightEmission = 0.20000000298023 ParticleEmitter3.LightInfluence = 1 ParticleEmitter3.Texture = "http://www.roblox.com/asset/?id=134531274" ParticleEmitter3.Transparency = NumberSequence.new(0.30000001192093,0.30000001192093) ParticleEmitter3.ZOffset = 1 ParticleEmitter3.Size = NumberSequence.new(0.12499988079071,0) ParticleEmitter3.Acceleration = Vector3.new(0, -20, 0) ParticleEmitter3.EmissionDirection = Enum.NormalId.Front ParticleEmitter3.Lifetime = NumberRange.new(0.5, 1.5) ParticleEmitter3.Rate = 100000 ParticleEmitter3.SpreadAngle = Vector2.new(360, 360) ParticleEmitter3.VelocitySpread = 360 -- ParticleEmitter1:Emit(20) ParticleEmitter2:Emit(20) ParticleEmitter3:Emit(20) -- game:GetService("Debris"):AddItem(ParticleEmitter1,2) game:GetService("Debris"):AddItem(ParticleEmitter2,2) game:GetService("Debris"):AddItem(ParticleEmitter3,2) -- end function limb_collide(obj,mode,d) if (obj:IsA("UnionOperation") or obj:IsA("BasePart")) and not obj:FindFirstChild('limb') then else return end local exists = pcall(game:GetService("PhysicsService").GetCollisionGroupId, game:GetService("PhysicsService"), 'Limb Collide') if not exists then game:GetService("PhysicsService"):CreateCollisionGroup('Limb Collide') end game:GetService("PhysicsService"):CollisionGroupSetCollidable('Limb Collide','Limb Collide',false) -- local t = {} -- local cb = Instance.new("Part") cb.Name = 'limb' cb.Transparency = 1 cb.CanCollide = true cb.Anchored = false cb.CFrame = obj.CFrame cb.Size = obj.Size*0.9 cb.Massless = true cb.Locked = true game:GetService("PhysicsService"):SetPartCollisionGroup(cb,'Limb Collide') game:GetService("PhysicsService"):SetPartCollisionGroup(obj,'Limb Collide') local weld = Instance.new("Weld") weld.Part0 = cb weld.Part1 = obj weld.Parent = cb --obj.Massless = true obj.Anchored = false if mode or obj:FindFirstChild("Dismembered") then cb.Parent = junk -- .Parent else cb.Parent = junk table.insert(t,1,cb) end if d then game:GetService("Debris"):AddItem(cb,d) end -- if not string.match(obj.Name:lower(),'torso') and not string.match(obj.Name:lower(),'rootpart') and not string.match(obj.Name:lower(),'head') then local lv = Vector3.new() -- Vector3.new(cb.Size.X,0,cb.Size.Z) local cb2 = Instance.new("Part") cb2.Name = 'limb' cb2.Transparency = 1 cb2.CanCollide = true cb2.Anchored = false cb2.CFrame = obj.CFrame cb2.Size = lv cb2.Massless = true cb2.Locked = true --game:GetService("PhysicsService"):SetPartCollisionGroup(cb2,'Limb Collide') local weld2 = Instance.new("Weld") weld2.Part0 = cb weld2.Part1 = cb2 weld2.C1 = CFrame.new(0,(cb.Size.Y/2),0) weld2.Parent = cb2 if mode or obj:FindFirstChild("Dismembered") then cb2.Parent = junk -- .Parent else cb2.Parent = junk table.insert(t,1,cb2) end if d then game:GetService("Debris"):AddItem(cb2,d) end end -- return t end function recurse(root,callback,i) i= i or 0 for _,v in pairs(root:GetChildren()) do i = i + 1 callback(i,v) if #v:GetChildren() > 0 then i = recurse(v,callback,i) end end return i end function ragdollJoint(character, part0, part1, attachmentName, className, properties) attachmentName = attachmentName.."RigAttachment" local constraint = Instance.new(className.."Constraint") constraint.Attachment0 = part0:FindFirstChild(attachmentName) constraint.Attachment1 = part1:FindFirstChild(attachmentName) constraint.Name = "RagdollConstraint"..part1.Name for _,propertyData in next,properties or {} do constraint[propertyData[1]] = propertyData[2] end constraint.Parent = character end function getAttachment0(character, attachmentName) for _,child in next,character:GetChildren() do local attachment = child:FindFirstChild(attachmentName) if attachment then return attachment end end end function ragdoll(targchar,kill,remove) if targchar then else return end local targplr pcall(function() targplr = game:GetService("Players"):GetPlayerFromCharacter(targchar) end) local pc = targchar local targhum = pc:FindFirstChildOfClass("Humanoid") local js,js2 = {},{} local lc = {} targhum.PlatformStand = true --if kill then local old_pc if remove then pc.Archivable = true old_pc = pc pc = pc:Clone() end for i,v in pairs(pc:GetDescendants()) do if v.Name ~= 'HumanoidRootPart' and v.Name ~= 'Torso' and v:IsA("BasePart") then if remove or not kill then local t = limb_collide(v,false,10) table.insert(lc,1,t) end end if kill then if v:IsA("ParticleEmitter") then v.Enabled = false end if v:IsA("SelectionBox") or v:IsA("BodyVelocity") or v:IsA("BodyPosition") or v:IsA("BodyAngularVelocity") or v:IsA("BodyForce") or v:IsA("BodyGyro") or v:IsA("BodyThrust") or v:IsA("BodyMover") then if v:IsA("BodyVelocity") then game:GetService("Debris"):AddItem(v,0.15) else v:Destroy() end end if (v:IsA("Script") and v.Name == 'Health') or (v:IsA("LocalScript") and v.Name == 'Animate') then v:Destroy() end if v:IsA("Humanoid") then v.HealthDisplayType = Enum.HumanoidHealthDisplayType.AlwaysOff v.PlatformStand = true end end end if remove then for i,v in pairs(old_pc:GetDescendants()) do if v:IsA("BasePart") or v:IsA("UnionOperation") or v:IsA("ForceField") or v:IsA("Accessory") or v:IsA("Decal") or v:IsA("Texture") or v:IsA("SurfaceGui") then v:destroy() end if v:IsA("Humanoid") then v.BreakJointsOnDeath = true v.Health = 0 v.HealthDisplayType = Enum.HumanoidHealthDisplayType.AlwaysOff v.PlatformStand = true end end pc.Parent = junk game:GetService("Debris"):AddItem(pc,10) end --end --if kill and targhum:FindFirstChild("Ragdolled") then return; end; coroutine.resume(coroutine.create(function() if targplr then for i,v in pairs(pc:GetChildren()) do if v:IsA("BasePart") then --v.Massless = true if v:CanSetNetworkOwnership() then v:SetNetworkOwner(targplr) end end end end end)) local kb = 15 local root = pc:FindFirstChild("HumanoidRootPart") local targtorso = pc:FindFirstChild("Torso") or pc:FindFirstChild("UpperTorso") or pc:FindFirstChild("Head") or pc:FindFirstChild("HumanoidRootPart") if targtorso then else return end local dir = targtorso.CFrame.lookVector*-1 local bv = Instance.new("BodyVelocity") bv.MaxForce = Vector3.new(math.huge,math.huge,math.huge) bv.Velocity = --[[dir*kb+]]Vector3.new(0,kb,0) bv.Parent = targtorso game:GetService("Debris"):AddItem(bv,0.1) if kill then local ragval = Instance.new("ObjectValue") ragval.Name = 'Ragdolled' ragval.Parent = targhum end coroutine.resume(coroutine.create(function() if (targhum.RigType == Enum.HumanoidRigType.R6 or (targhum.RigType == Enum.HumanoidRigType.R15 and not kill)) then for _,m in pairs(pc:GetChildren()) do for _,v in pairs(m:GetChildren()) do if (v:IsA("Snap") --[[or v:IsA('Weld')]] or v:IsA("BallSocketConstraint")) and kill then v:Destroy() end if (v:IsA('Motor6D') or v:IsA('Motor') or v:IsA("Weld")) and (v.Parent:IsA("BasePart") or v.Parent:IsA("UnionOperation")) then if not kill then table.insert(js2,1,{obj = v,par = v.Parent}) end local a0, a1 = Instance.new("Attachment"), Instance.new("Attachment") a0.CFrame = v.C0 a1.CFrame = v.C1 a0.Parent = v.Part0 a1.Parent = v.Part1 local b = Instance.new("BallSocketConstraint") b.Attachment0 = a0 b.Attachment1 = a1 b.Parent = v.Part0 v.Parent = nil table.insert(js,1,b) end end end elseif targhum.RigType == Enum.HumanoidRigType.R15 and kill then local character = targchar recurse(character, function(_,v) if v:IsA("Attachment") then v.Axis = Vector3.new(0, 1, 0) v.SecondaryAxis = Vector3.new(0, 0, 1) v.Rotation = Vector3.new(0, 0, 0) end end) --Re-attach hats for _,child in next,character:GetChildren() do if child:IsA("Accoutrement") then --Loop through all parts instead of only checking for one to be forwards-compatible in the event --ROBLOX implements multi-part accessories for _,part in next,child:GetChildren() do if part:IsA("BasePart") then local attachment1 = part:FindFirstChildOfClass("Attachment") local attachment0 = getAttachment0(character, attachment1.Name) if attachment0 and attachment1 then --Shouldn't use constraints for this, but have to because of a ROBLOX idiosyncrasy where --joints connecting a character are perpetually deleted while the character is dead local constraint = Instance.new("HingeConstraint") constraint.Attachment0 = attachment0 constraint.Attachment1 = attachment1 constraint.LimitsEnabled = true constraint.UpperAngle = 0 --Simulate weld by making it difficult for constraint to move constraint.LowerAngle = 0 constraint.Parent = character end end end end end ragdollJoint(character, character.LowerTorso, character.UpperTorso, "Waist", "BallSocket", { {"LimitsEnabled",true}; {"UpperAngle",5}; }) ragdollJoint(character, character.UpperTorso, character.Head, "Neck", "BallSocket", { {"LimitsEnabled",true}; {"UpperAngle",15}; }) local handProperties = { {"LimitsEnabled", true}; {"UpperAngle",0}; {"LowerAngle",0}; } ragdollJoint(character, character.LeftLowerArm, character.LeftHand, "LeftWrist", "Hinge", handProperties) ragdollJoint(character, character.RightLowerArm, character.RightHand, "RightWrist", "Hinge", handProperties) local shinProperties = { {"LimitsEnabled", true}; {"UpperAngle", 0}; {"LowerAngle", -75}; } ragdollJoint(character, character.LeftUpperLeg, character.LeftLowerLeg, "LeftKnee", "Hinge", shinProperties) ragdollJoint(character, character.RightUpperLeg, character.RightLowerLeg, "RightKnee", "Hinge", shinProperties) local footProperties = { {"LimitsEnabled", true}; {"UpperAngle", 15}; {"LowerAngle", -45}; } ragdollJoint(character, character.LeftLowerLeg, character.LeftFoot, "LeftAnkle", "Hinge", footProperties) ragdollJoint(character, character.RightLowerLeg, character.RightFoot, "RightAnkle", "Hinge", footProperties) --TODO fix ability for socket to turn backwards whenn ConeConstraints are shipped ragdollJoint(character, character.UpperTorso, character.LeftUpperArm, "LeftShoulder", "BallSocket") ragdollJoint(character, character.LeftUpperArm, character.LeftLowerArm, "LeftElbow", "BallSocket") ragdollJoint(character, character.UpperTorso, character.RightUpperArm, "RightShoulder", "BallSocket") ragdollJoint(character, character.RightUpperArm, character.RightLowerArm, "RightElbow", "BallSocket") ragdollJoint(character, character.LowerTorso, character.LeftUpperLeg, "LeftHip", "BallSocket") ragdollJoint(character, character.LowerTorso, character.RightUpperLeg, "RightHip", "BallSocket") end end)) if root then root.CanCollide = false end local c if root then c = root.Touched:Connect(function(obj) if obj and not obj:IsDescendantOf(junk) and (root.Velocity.Magnitude >= 3) then local impact = Instance.new("Sound",root) impact.Name = 'impact' impact.SoundId = 'rbxassetid://' .. impacts[math.random(1,#impacts)] impact.Volume = 0.1 impact.PlayOnRemove = true impact:Destroy() end end) end local function restore() if c then c:Disconnect() end if root then root.CFrame = root.CFrame*CFrame.new(0,4,0) end for i,v in pairs(js) do v:Destroy() end for i,v in pairs(lc) do for i,v in pairs(v) do v:Destroy() end end if targhum then targhum.PlatformStand = false end for i,v in pairs(js2) do v.obj.Parent = v.par end if root then root.CanCollide = true end end return restore end function connectfall(plr,torso,hum) local dmg = 0 local saved_vel = 0 while falling[hum] do if not falling[hum] then break end saved_vel = torso.Velocity.Magnitude wait(0) end if saved_vel >= 75 then dmg = 100*(saved_vel/fatal_vel) if saved_vel >= fatal_vel*1.2 and torso and plr.Character then local p = Instance.new("Part") p.CanCollide = false p.Anchored = true p.Size = Vector3.new() p.Position = torso.Position p.Transparency = 1 p.Parent = junk local impact = Instance.new("Sound",p) impact.Name = 'impact' impact.SoundId = 'rbxassetid://' .. impacts[math.random(1,#impacts)] impact.Volume = 0.1 impact.PlayOnRemove = true impact:Destroy() local explode2 = Instance.new("Sound",p) explode2.Name = 'expode' explode2.SoundId = 'rbxassetid://' .. impacts[math.random(1,#impacts)] explode2.Volume = 0.15 explode2.PlayOnRemove = true explode2:Destroy() local exp_gore = Instance.new("Sound") exp_gore.SoundId = "rbxassetid://" .. gores3[math.random(1,#gores3)] exp_gore.Volume = 4 exp_gore.Parent = p exp_gore:Play() local pe = Instance.new("ParticleEmitter") pe.Speed = NumberRange.new(15, 15) pe.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0,Color3.new(1, 0, 0)), ColorSequenceKeypoint.new(0.5,Color3.new(1, 0.33333, 0)), ColorSequenceKeypoint.new(1,Color3.new(1, 1, 1)), }) pe.LightEmission = 0.80000001192093 pe.Texture = "rbxassetid://162359401" pe.Size = NumberSequence.new({ NumberSequenceKeypoint.new(0,0), NumberSequenceKeypoint.new(0.0264,1), NumberSequenceKeypoint.new(0.3,1), NumberSequenceKeypoint.new(0.5,1.5), NumberSequenceKeypoint.new(1,2), }) --pe.Drag = 0.60000002384186 pe.Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0,0), NumberSequenceKeypoint.new(0.5,0), NumberSequenceKeypoint.new(1,1), }) pe.Lifetime = NumberRange.new(1,2) pe.Rate = 100 pe.SpreadAngle = Vector2.new(180, 180) pe.Parent = p pe.Enabled = false pe:Emit(75) blood_splat(p) for _,v in pairs(plr.Character:GetChildren()) do if v:IsA("BasePart") or v:IsA("UnionOperation") then explode_limb(plr,v,plr.Character,v.CFrame.upVector*-1,dmg) end end game:GetService("Debris"):AddItem(p,5) end if check_godded(hum) then return end if not check_fatal(hum,dmg) then if not torso:FindFirstChild("pain groan") then local groan = Instance.new("Sound") groan.Name = 'pain groan' groan.SoundId = 'rbxassetid://' .. stuns[math.random(1,#stuns)] groan.Volume = 1 groan.Parent = torso groan.PlayOnRemove = true groan:Destroy() end coroutine.resume(coroutine.create(function() ragdolled[plr] = true local restore = ragdoll(torso.Parent,false) hum:SetStateEnabled(Enum.HumanoidStateType.Freefall,true) hum:SetStateEnabled(Enum.HumanoidStateType.Landed,true) wait(10*(saved_vel/fatal_vel)) if plr and ragdolled[plr] then ragdolled[plr] = false end if restore then restore() end end)) end blood_splat(torso,torso.Position,Vector3.new()) --[[ if check_fatal(hum,dmg) then bleed2(plr,torso,hum,false,game:GetService("Players").RespawnTime,false,torso.CFrame.upVector*-1) elseif dmg >= 25 then bleed2(plr,torso,hum,false,3,false,torso.CFrame.upVector*-1) end ]] local smash_s = Instance.new("Sound") smash_s.Parent = torso smash_s.PlayOnRemove = true local dmg_s = Instance.new("Sound") dmg_s.Parent = torso dmg_s.PlayOnRemove = true if check_fatal(hum,dmg) then --smash_s.SoundId = 'rbxassetid://' .. gores2[math.random(1,#gores2)] smash_s.Volume = 0.7 dmg_s.SoundId = 'rbxassetid://704141469' dmg_s.Volume = 1.5 elseif dmg >= 50 then --smash_s.SoundId = 'rbxassetid://' .. gores1[math.random(1,#gores1)] smash_s.Volume = 0.7 dmg_s.SoundId = 'rbxassetid://535681058' dmg_s.Volume = 1 elseif dmg >= 25 then dmg_s.SoundId = 'rbxassetid://4057626616' dmg_s.Volume = 1.5 end smash_s:Destroy() dmg_s:Destroy() hum:TakeDamage(dmg) end end function burn_up(obj,mode) if mode == 1 then local particle = obj:FindFirstChild("flame") local light = obj:FindFirstChild("flame light") local flame_sound = obj:FindFirstChild('burn up') local scream_sound = obj:FindFirstChild('flame scream') if not obj:FindFirstChild("burn up") then local start_flame = Instance.new("Sound") start_flame.SoundId = 'rbxassetid://5868574236' start_flame.Parent = obj start_flame.Volume = 2.5 start_flame.PlayOnRemove = true start_flame:Destroy() flame_sound = Instance.new("Sound") flame_sound.Name = 'burn up' flame_sound.SoundId = 'rbxassetid://443980606' flame_sound.Volume = 1.5 flame_sound.Parent = obj flame_sound.Looped = true flame_sound:Play() scream_sound = Instance.new("Sound") scream_sound.Name = 'flame scream' scream_sound.SoundId = 'rbxassetid://147758618' scream_sound.Parent = obj scream_sound.Looped = true scream_sound:Play() local PointLight1 = Instance.new("PointLight") PointLight1.Name = 'flame light' PointLight1.Parent = obj PointLight1.Color = Color3.new(1, 0.803922, 0.341176) PointLight1.Range = 21 PointLight1.Brightness = 0.47499999403954 PointLight1.Shadows = true light = PointLight1 particle = Instance.new("Fire") particle.Name = 'flame' particle.Size = 10 particle.Parent = obj end elseif mode == 2 then local particle = obj:FindFirstChild("flame") local light = obj:FindFirstChild("flame light") local flame_sound = obj:FindFirstChild('burn up') local scream_sound = obj:FindFirstChild('flame scream') if particle and particle.Enabled then particle.Enabled = false game:GetService("Debris"):AddItem(particle,1.5) end if light and light.Enabled then light.Enabled = false game:GetService("Debris"):AddItem(light,1) end if flame_sound then flame_sound:Destroy() end if scream_sound then scream_sound:Destroy() end end end function explode_limb(plr,obj,targchar,dir,dmg) local targhum = targchar:FindFirstChildOfClass("Humanoid") local targtorso = targchar:FindFirstChild("Torso") or targchar:FindFirstChild("UpperTorso") or targchar:FindFirstChild("HumanoidRootPart") if dmg > 0 and not obj:FindFirstChild('Dismembered') --[[and obj.Name ~= 'Torso' and obj.Name ~= 'HumanoidRootPart' and obj.Name ~= 'UpperTorso' and obj.Name ~= 'LowerTorso']] then else return end local d = 10 local t = dmg/d local t2 = dmg/20/d bleed2(plr,targtorso,targhum,true,t,true,Vector3.new(0,-1,0).Unit) local gs = Instance.new("Sound") gs.SoundId = 'rbxassetid://206082273' -- 'rbxassetid://' .. gores2[math.random(1,#gores2)] gs.Volume = 0.3 gs.PlayOnRemove = true gs.Parent = obj gs:Destroy() for i = 1,d do local p = Vector3.new(obj.Size.X/math.random(d/3,d/2),obj.Size.Y/math.random(d/3,d/2),obj.Size.Z/math.random(d/3,d/2)) local blood_chunk = Instance.new("Part") blood_chunk.Size = p blood_chunk.CanCollide = true blood_chunk.Anchored = false if math.random(1,2) == 1 then blood_chunk.Color = Color3.fromRGB(math.random(90,170),0,0) else blood_chunk.Color = obj.Color end blood_chunk.Position = obj.Position+Vector3.new(math.random(-obj.Size.X*10,obj.Size.X*10)/10/2,math.random(-obj.Size.Y*10,obj.Size.Y*10)/10/2,math.random(-obj.Size.Z*10,obj.Size.Z*10)/10/2) blood_chunk.Material = Enum.Material.Slate blood_chunk.Parent = junk local kb = 25 local ka = 90 local bav = Instance.new("BodyAngularVelocity") bav.MaxTorque = Vector3.new(math.huge,math.huge,math.huge) bav.AngularVelocity = Vector3.new(math.random(-ka,ka),math.random(-ka,ka),math.random(-ka,ka)) bav.Parent = blood_chunk local bv = Instance.new("BodyVelocity") bv.MaxForce = Vector3.new(math.huge,math.huge,math.huge) local ud = (obj.Position-blood_chunk.Position).Unit if kb*3 >= ud.Magnitude then bv.Velocity = (ud*kb)+Vector3.new(0,kb,0) --bleed2(plr,targtorso,targhum,true,3,false,ud) else bv.Velocity = Vector3.new(0,kb,0) --bleed2(plr,targtorso,targhum,true,3,false,dir) end bv.Parent = blood_chunk game:GetService("Debris"):AddItem(bv,0.1) game:GetService("Debris"):AddItem(bav,0.1) game:GetService("Debris"):AddItem(blood_chunk,10) end obj:Destroy() end function bind(plr,char,new) pcall(function() if char then else return end if is_enabled(plr) then local ff = Instance.new("ForceField",char) game:GetService("Debris"):AddItem(ff,1) end local torso = char:FindFirstChild("Torso") or char:FindFirstChild("UpperTorso") or char:FindFirstChild("HumanoidRootPart") local hum = char:FindFirstChildOfClass("Humanoid") local base = workspace:FindFirstChild('Base') or workspace:FindFirstChild('Baseplate') if new then wait(0.1) if base then --torso.CFrame = base.CFrame*CFrame.new(0,base.Size.Y/2+4,0) else --torso.CFrame = CFrame.new(0,base.Size.Y/2+4,0) end end hum.StateChanged:Connect(function(oldstate,newstate) local foundstate = false for i,v in pairs(fallstates) do if v == newstate then foundstate = true break end end if foundstate and not check_godded(hum) and is_enabled(plr) then if not falling[hum] then falling[hum] = true connectfall(plr,torso,hum) end else falling[hum] = false end end) local cv if is_enabled(plr) then cv = game:GetService("RunService").Stepped:Connect(function() if not char or not char.Parent or not torso or not torso.Parent or not hum then cv:Disconnect() end local vel = torso.Velocity.Magnitude if vel >= terminal_vel and not check_godded(hum) then local dmg = (vel/terminal_vel)/5 hum:TakeDamage(dmg) burn_up(torso,1) else burn_up(torso,2) end end) end if hum.RigType == Enum.HumanoidRigType.R6 then hum.BreakJointsOnDeath = false hum:SetStateEnabled(Enum.HumanoidStateType.Dead,true) end local bid = 0 local did_break = {} local can_break = false local dmged = false for _,limb in pairs(char:GetChildren()) do if (limb:IsA("BasePart") or limb:IsA("UnionOperation")) and limb.Name ~= 'HumanoidRootPart' and limb.Name ~= 'Torso' and limb.Name ~= 'UpperTorso' and limb.Name ~= 'LowerTorso' then limb.Touched:Connect(function(obj) local saved_vel = limb.Velocity.Magnitude local saved_vel2 = obj.Velocity.Magnitude*(obj.Mass/5) local dmg = (saved_vel/fatal_vel)*hum.MaxHealth local dmg2 = (saved_vel2/fatal_vel)*hum.MaxHealth if obj and obj.Parent and not obj.Parent:FindFirstChildOfClass("Humanoid") and obj.CanCollide then else saved_vel2 = 0 end if limb and not dmged and (can_break or ragdolled[plr]) and not check_godded(hum) and (saved_vel >= fatal_vel or saved_vel2 >= fatal_vel) then dmged = true did_break[bid] = true local p = Instance.new("Part") p.CanCollide = false p.Anchored = true p.Size = Vector3.new() p.Position = limb.Position p.Transparency = 1 p.Parent = junk local impact = Instance.new("Sound",p) impact.Name = 'impact' impact.SoundId = 'rbxassetid://' .. impacts[math.random(1,#impacts)] impact.Volume = 0.1 impact.PlayOnRemove = true impact:Destroy() local explode2 = Instance.new("Sound",p) explode2.Name = 'expode' explode2.SoundId = 'rbxassetid://' .. impacts[math.random(1,#impacts)] explode2.Volume = 0.15 explode2.PlayOnRemove = true explode2:Destroy() local exp_gore = Instance.new("Sound") exp_gore.SoundId = "rbxassetid://" .. gores3[math.random(1,#gores3)] exp_gore.Volume = 4 exp_gore.Parent = p exp_gore:Play() local pe = Instance.new("ParticleEmitter") pe.Speed = NumberRange.new(15, 15) pe.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0,Color3.new(1, 0, 0)), ColorSequenceKeypoint.new(0.5,Color3.new(1, 0.33333, 0)), ColorSequenceKeypoint.new(1,Color3.new(1, 1, 1)), }) pe.LightEmission = 0.80000001192093 pe.Texture = "rbxassetid://162359401" pe.Size = NumberSequence.new({ NumberSequenceKeypoint.new(0,0), NumberSequenceKeypoint.new(0.0264,1), NumberSequenceKeypoint.new(0.3,1), NumberSequenceKeypoint.new(0.5,1.5), NumberSequenceKeypoint.new(1,2), }) --pe.Drag = 0.60000002384186 pe.Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0,0), NumberSequenceKeypoint.new(0.5,0), NumberSequenceKeypoint.new(1,1), }) pe.Lifetime = NumberRange.new(1,2) pe.Rate = 100 pe.SpreadAngle = Vector2.new(180, 180) pe.Parent = p pe.Enabled = false pe:Emit(75) blood_splat(p) for _,v in pairs(char:GetChildren()) do if v:IsA("BasePart") or v:IsA("UnionOperation") then explode_limb(plr,v,char,v.CFrame.upVector*-1,dmg) end end game:GetService("Debris"):AddItem(p,5) wait(0.2) dmged = false elseif limb and not dmged and (can_break or ragdolled[plr]) and (dmg >= 40 or dmg2 >= 40) then dmged = true did_break[bid] = true local d = dmg if dmg2 > dmg then d = dmg2 end local p = Instance.new("Part") p.CanCollide = false p.Anchored = true p.Size = Vector3.new() p.Position = limb.Position p.Transparency = 1 p.Parent = junk local impact = Instance.new("Sound",p) impact.Name = 'impact' impact.SoundId = 'rbxassetid://' .. impacts[math.random(1,#impacts)] impact.Volume = 0.1 impact.PlayOnRemove = true impact:Destroy() local explode = Instance.new("Sound",p) explode.Name = 'expode' explode.SoundId = 'rbxassetid://' .. gores2[math.random(1,#gores2)] explode.Volume = 0.1 explode.PlayOnRemove = true explode:Destroy() blood_splat(p) explode_limb(plr,limb,char,limb.CFrame.upVector*-1,d) game:GetService("Debris"):AddItem(p,2) wait(0.2) dmged = false end end) end end local curhealth = hum.Health hum.HealthChanged:Connect(function(newhealth) if check_godded(hum) then return end local dmg = (curhealth-newhealth) if curhealth > newhealth and torso --[[and hum.Health > 0]] then if dmg >= 30 or 0 >= newhealth then bid = bid + 1 can_break = true wait(0.4) can_break = false end if dmg > 0 then if not did_break[bid] then bleed2(plr,torso,hum,false,(dmg/hum.MaxHealth)*10,false,torso.CFrame.upVector*-1) end end end curhealth = hum.Health end) hum.Died:Connect(function() ragdoll(char,true) end) end) end function chat(plr) plr.Chatted:Connect(function(msg) if msg:lower():sub(1,6) == 'tfall/' then local bool = msg:lower():sub(7) if bool == 'true' then toggle_enable(plr,true) elseif bool == 'false' then toggle_enable(plr,false) end end end) end for _,plr in pairs(game:GetService("Players"):GetPlayers()) do chat(plr) bind(plr,plr.Character) plr.CharacterAdded:Connect(function(char) bind(plr,char,true) end) end game:GetService("Players").PlayerAdded:Connect(function(plr) chat(plr) plr.CharacterAdded:Connect(function(char) bind(plr,char,true) end) end) while wait(1) do if not junk then junk = Instance.new("Folder",script) end end
Editor Settings
Theme
Key bindings
Full width
Lines