In this series of tutorials, we will go beyond the usual basics of emitting bursts or trails of particles and create full-blown fireworks. We will start by using the 'emit' command to give us extra control over how particles are emitted. We will see how it is possible to use both ramps and expressions to achieve certain effects, like sparkling or flashing particles. We will make extensive use of particle expressions, including some basic vector math and the 'rot()' function, to achieve complex behaviors such as ring-shaped emission and tightly-spiralling motion. By the end of this course, you will have everything you need to create complex, exciting, and dynamic fireworks.