A basic particle system written in C++ and SDL/OpenGL and configurable from Lua would be a really nice addition to the engine to allow for a variety of advanced graphics effects for the game designer.
Emission features define how, when, and where particles are emitted.
Continuously generate particles at a fixed rate, or generate a cluster all at once when triggered by some in-game event. [e.g. a bomb exploding]
Place newly-emitted particles at a point, or randomly within a region, such as a box or circle. The point or region could be moving, e.g. attached to an object or character. [For us, any entity could optionally be an emitter]
Give the particles a random initial speed and direction, within certain ranges. For example, an explosion would send particles in all directions while a cannon would send them in the direction the cannon is pointing.
Optionally have particles inherit velocity from their emitter, when the emitter is itself moving.
Motion features control how particles move after they're emitted.
Collision detection can be used to make particles respect walls, either by flowing along them or bouncing off.
Air drag causes fast-moving particles to slow down. Gravity or buoyancy makes particles sink or rise. [Probably not useful in a top-down game.]
Particles also might move along a spline defined by the designer, or be attracted to a particular point or region (possibly attached to an object or character), etc.
Rendering features control how particles look.
You almost certainly want to have the particles change size, color, and alpha as they age. Animation curves can be defined to control these.
For a 2D game, the Z-order of particles relative to other game objects should also be controllable. [We could place the particles on any of the 3 existing layers]
For sprite particles, you might like to have the sprite rotate. It could spin at a random speed, or rotate to face its direction of motion, or the direction its emitter was moving when it was emitted.
Above list is from a post found on Stack Exchange. Some might not apply to solarus, but I think most do.
I also found a good example of a basic particle system written in SDL/C++ which could serve as a starting point. All the code is posted here and he has full YouTubetutorialstoo.
I am now convinced that this could be implemented entirely through Lua scripting and am (slowly) working on it. If small modifications to the engine are required, those will be logged individually.
A basic particle system written in C++ and SDL/OpenGL and configurable from Lua would be a really nice addition to the engine to allow for a variety of advanced graphics effects for the game designer.
Emission features define how, when, and where particles are emitted.
Motion features control how particles move after they're emitted.
Rendering features control how particles look.
Above list is from a post found on Stack Exchange. Some might not apply to solarus, but I think most do.
I also found a good example of a basic particle system written in SDL/C++ which could serve as a starting point. All the code is posted here and he has full YouTube tutorials too.