Blood Engine - A droplet emitter system

Amazing module! You should add an option to merge the blood when they are near other blood drops.

6 Likes

thank you! definitely will help me

6 Likes


image

4 Likes

I was thinking about adding something like that, thanks for the suggestion.

5 Likes

There is a new update available that should make it work. This is something related to a server restriction option I added because it’s not really recommended to run it on the server.

5 Likes

Can you possibly send me the script you load the module in?

The feature you requested is now added in V0.0.3

6 Likes

You should add the possibility to make the blood go on the walls

5 Likes

it can go on walls though. are you having any issues with that?

4 Likes

Yes. the Blood dont go on walls. its only go on floor. Idk why

image

and now it’s go through the floor…

2 Likes

ill look into this as soon as possible and report back if it gets fixed

2 Likes

Did the issue fix? It happens to me.

2 Likes

I haven’t looked at the module yet, but is there a “exclusion list”?
[Not sure if this applies to V0.0.2]
Considering to implement the system but I don’t want the droplets to land on certain objects (like NPC’s and certain furniture)

Also is there a decay time for the droplets? Wondering if there is a setting where the droplets decay after a certain amount of time.

Apologies in advance if my questions seems dumb.

2 Likes

yes, its called the filter setting which you can set and make use of by doing this:

-- Set the instances in the filter to whatever you want.
local DripSettings = {
    Filter = {Part, Character, Folder} -- An array that stores instances that don't interfere with the droplets raycast process.
}

-- MODULE
local BloodEngine = require(ReplicatedStorage.BloodEngine)
local BloodInstance = BloodEngine.new(DripSettings) -- customize to whatever you want

that will be included in the next update.

3 Likes

Implemented in V0.0.4, you can now use DripDecay to manage the delay for the pools fading.

Blood drips/pools now go on walls and attach/weld to them, the blood going through the floor should be fully gone. If it isn’t, report back to me.

The issue is fixed now, check V0.0.4

5 Likes

Having trouble implementing the module.

Tried making a part emit blood but Kept throwing quite a few errors.

Apparently it doesn’t generate the folders for you?
Wanted to test the code in a serverscript, but encountered several issues. Couldn’t generate the asset folders / drip part, etc for some odd reason, so I put in some placeholders. Even so, I still encountered a problem where it can’t convert the table.unpack when passed into the module. Not sure whether its my issue or if there a problem with the code.

Used V0.0.4

2 Likes

Could you possibly send me the code you used to implement it? Make sure everything is located where it has to be located, showing me the error logs could also help.

3 Likes

TEST SCRIPT – Server sided script contains the following script:

local ReplicatedStorage = game:GetService("ReplicatedStorage")

-- You can leave any of these values as nil or not assign them, it'll use the default values
local DripSettings = {
	Decals = false, -- Use if you want to have your pools be decals instead of cylinders.
	RandomOffset = true, -- Whether to randomly offset the starting position of the droplets or not.
	DripVisible = false, -- Whether to show the droplets before they become a pool or not.
	DripDelay = 0.01, -- The delay between each droplet.
	DecayDelay = {10, 15}, -- Each pool will start to fade away randomly between min and max seconds after it’s created.
	Speed = 0.5, -- Determines the speed/velocity of the droplets.
	Limit = 500, -- The maximum number of droplets/pools.
	Distance = 1, -- The required distance for the droplet to register with the part below it.
	PoolExpansion = false, -- Whether to expand the pool or not when a droplet lands on it.
	MaximumSize = 0.7, -- The maximum X size of the droplets.
	DefaultSize = {0.4, 0.7}, -- Minimum and Maximum. Both determine the default size of a pool.
	ExpansionSize = {0.1, 0.5}, -- Minimum and Maximum. Both determine the expansion size range of the pools.
	Filter = {} -- An array that stores instances that don't interfere with the droplets raycast process.
}

-- MODULE
local BloodEngine = require(ReplicatedStorage.BloodEngine)
local BloodInstance = BloodEngine.new(table.unpack(DripSettings)) -- customize to whatever you want

local Part = script.Parent

while true do
	-- TARGET

	-- Emits drips from a part in the workspace, emits 10 blood drips only in the front direction
	-- Leave the direction nil if you want it to go in a random direction `BloodInstance:Emit(Part, nil, 10)`
	-- EXAMPLE: BloodInstance:Emit(Part, nil, 10)
	--BloodInstance:Emit(Part, Part.CFrame.LookVector, 10) -- also customize to whatever you want.
	BloodInstance:Emit(Part, nil, 10)
	task.wait(2)
	
end

– Workspace creates folder under Terrain object/folder labeled DripsFolder
ReplicatedStorage contains Assets folder
–Asset folder contains Sounds folder with child Folders Labeled Start & End, with sounds in them.
–Asset folder Contains Drip part
–ReplicatedStorage contains BloodEngine Module

Error: ReplicatedStorage.BloodEngine:110: invalid argument #1 to ‘unpack’ (table expected, got nil)

2 Likes

Time to make a bloodiest roblox game :skull:

joke aside, this is really neat, will def be using for my game.

5 Likes

I believe that he updated it to where you send in the table instead of unpacking it.

2 Likes

As @TimeFrenzied said, you dont have to unpack the table as it does that process for you in the module.

Don’t use the module on the server, as I have forgotten to make it so the module uses the heartbeat event instead of the renderstepped event for server-use.

1 Like