Simple solution: Alter the BLOCK's collision/mask so it's perfect square with precise collision off
More complex solution: for your check of collision free at y+16, could you not do:
[codebox]//This checks 1 pixel below along the entire width of the object for a collision. Put in obj_mario step event.
//Alter gravity or move to collision or whatever you currently do
What was happening is that the game was running out of memory. After thinking it might be something to do with particles, I had a look at my particle code again hoping to optimize it. Looking at the code again I saw that I was creating a new particle system for EACH flame attack, which WASN'T getting deleted. DOH! Stupid mistake is stupid.
I've changed it so all the particles spawn in a global particle system, meaning only 1 particle system exists, instead of the several hundred i was accidently creating.
Thanks LLoyd for your help, it helped me locate the cause.