ULTRAKILL-like blood system

You can write your topic however you want, but you need to answer these questions:

  1. What do you want to achieve? Keep it simple and clear!

A blood like particle system like the title says but i want it to be small Parts instead of actual blood (like red and pink .5x.5x.5 parts)

  1. What is the issue? Include screenshots / videos if possible!

ULTRAKILL 04 – Improved Gore
I don’t want to make the actual gore just the blood particles like the little spheres with trails that fly up then onto the floor

  1. What solutions have you tried so far? Did you look for solutions on the Developer Hub?

i tried a module from toolbox but didnt know how to work it :smiling_face_with_tear:

Please do not ask people to write entire scripts or design entire systems for you. If you can’t answer the three questions above, you should probably pick a different category.
please don’t write a whole big thing for me
I just want a place to start at least

I thought this was interesting so I decided to make a small attempt

It’s a pretty low-effort one and I’d like to see how I could improve this in the future (wanna know if I can turn something simple into something more refined).

It doesn’t have a blood splatter effect after the blood collides with an object since I’m not too sure how I can do that (though I’ll try to figure it out in the future), but all I did was create a module script inside of server script service, require it from a server script in starter character scripts, and then when the player died, I would call the function in the module listed down below.

local bloodModule = {}

local bloodSounds = {
	"rbxassetid://7837535984";
	"rbxassetid://7837536401";
	"rbxassetid://154955269";
}

function bloodModule:characterDeathEffects(char)
	local splatterSound = Instance.new("Sound")
	splatterSound.SoundId = bloodSounds[math.random(1, #bloodSounds)]
	splatterSound.Parent = char.PrimaryPart

	splatterSound:Play()
	
	for i = 1, 100 do
		local blood = Instance.new("Part")
		
		blood.BrickColor = BrickColor.new("Really red")
		blood.Size = Vector3.new(0.5, 0.5, 0.5)
		
		blood.CanCollide = false
		blood.CanTouch = false
		
		blood.Name = "Blood"
		blood.Anchored = false
		
		blood.CFrame = char.PrimaryPart.CFrame
		blood.Parent = workspace
		
		local trail = Instance.new("Trail")
		trail.Attachment0 = Instance.new("Attachment")
		trail.Attachment0.Position = Vector3.new(0, 0.25)
		trail.Attachment0.Parent = blood
		
		trail.Attachment1 = Instance.new("Attachment")
		trail.Attachment1.Position = Vector3.new(0, -0.25)
		trail.Attachment1.Parent = blood
		
		trail.Color = ColorSequence.new({
			ColorSequenceKeypoint.new(0, Color3.new(1, 0, 0));
			ColorSequenceKeypoint.new(1, Color3.new(0.0784314, 0, 0))
		})
		
		trail.MaxLength = 5
		trail.Lifetime = 0.75
		trail.Parent = blood
		
		blood.AssemblyLinearVelocity = Vector3.new(math.random(-20, 20), math.random(-10, 75), math.random(-20, 20))
	end
end

return bloodModule

Maybe this will help

DUDE THIS IS ACTUALLY PERFECT TYSM :smiley: I can keep tweaking and upgrading this