Czy wy nie rozumiecie, że sprite_add nie zwraca wam grafiki w postaci fizycznej a jedynie index za pomocą, którego możecie się potem odwołać do miejsca w pamięci z daną grafiką?! To, że sprawdzasz sprite_indexem wcześniej to nic ci nie daje! A wszelkie spritey, dzwieki itp zostają cały czas zawalając pamięć dopóki sami kodem sprite_delete itp go nie skasujecie.
Przykładowo, jeśli zrobicie coś takiego
GML
obrazek=sprite_add('misio.gif');
//i za chwile bez kasowania tego co jest pod zmienna obrazek
obrazek=sprite_add('kaczka.gif');
To ten gif z miśkiem zostanie wam w pamięci gry dopóki tej gry nie wyłączycie, i nawet go nie skasujecie, bo już nie ma jak się odwołać do tamtego indexu z misiem, gdyż pod zmienną obrazek wwaliliście już index z obrazkiem kaczki.
PS: Może istnieje jakiś sposób na usuwanie takich memory leaków ale ja go nie znam.