Quick answer: GameMaker particle counts climbing each room restart? Particle systems and types are global by default - destroy them in Room End or use part_system_create_layer.

Hour into testing, FPS tanks. Debug overlay shows 47,000 active particles. Each room restart added a new system.

Destroy in Room End

var sys = part_system_create();
... // use
part_system_destroy(sys);

Pair every part_system_create with a destroy in Room End or Game End. Global systems leak across rooms.

Use layer-bound systems

part_system_create_layer ties the system to a room layer. Layer cleanup destroys the system automatically.

Audit with the global list

The debug overlay's Particles > Active Systems tab shows every live system. Cross-check against your expected count per room.

“GameMaker's particle API is global state. Global state needs explicit cleanup.”

Wrap particle creation in a script that registers the handle in a per-room ds_list. On Room End, iterate and destroy.