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.