Argh, yeah, the boulder is a finicky little thing. I know what's wrong, I just find it hard to test for.
Hey Derek, I don't know if you've fixed the surface transparency issue (black squares around sprites) but here's the fix for it:
Call this code after you've drawn to the surface, before you reset surface target:
draw_set_blend_mode_ext(bm_src_color,bm_one)
draw_set_color(c_black)
draw_rectangle(0,0,width,height,0)
draw_set_blend_mode(bm_normal)
It's caused by some oddity in the way Game Maker handles transparency in surfaces. What this code does is set the blending mode to write to the alpha channel only then it blanks it out.
EDIT: Oh right, as for getting "Trying to use non-existing surface" errors, you can prevent that by checking surface_exists(surf). If the surface doesn't exist immediately re-create. If that isn't enough to solve the problem loop through that code a few times with 100ms sleep() calls in between to give it some time to clear the VRAM.
Hey, thanks for that, Sean!