What I did in the current version of my particle system was give each particle various properties that are adjusted that have an overall effect on how the particle interacts with the world.
For example;
dripChance - the chance a particle will drip when it’s stuck to something. Basically making things drip faster or slower (Blood vs water, for example)
stickChance - The chance a particle will stop dripping even if it’s on a drippable surface. (Again, good for making liquids act “thicker”, like blood vs water)
friction - The rate the velocity decays, so something with high friction will slow down faster than something with low friction.
spread - The rate the particle tends to spreads out either on the X or Y axis just to have more natural looking movement.
decayRate - The rate of decay, for example, fire would have an extremely high decay because it only exists for a moment, and is destroyed. Where water or blood you may want to leave on the screen longer.
It’s just some ideas, but basically I have a master particle class that has a bunch of properties like this, and each child class adjusts them to get the effect I want.
Here’s a gif of a bunch of them all together in action in the new system;