Quick answer: GameMaker controller objects duplicating each room restart? Persistent objects re-instantiate without destroying old instances - guard creation with instance_number checks.
Audio controller is persistent. After 10 room restarts, there are 11 of them all responding to the same events.
Guard creation
if instance_number(obj_audio) == 0 {
instance_create_layer(0, 0, "Controllers", obj_audio);
}Idempotent creation: only create if none exists.
Or place in a single 'init' room
Persistent controllers live in a one-frame init room that the game enters once. Subsequent rooms can't accidentally re-create them.
Audit persistent flag usage
Object inspector shows the persistent checkbox. Persistent + created-per-room = leak. One or the other.
“Persistent objects break the create-per-room contract. Guard their creation.”
Standardize on a single PersistentControllerSpawner script. Every persistent controller goes through it; the leak pattern stops being possible.