Again, not quite a tutorial, but just another perspective and helpful method of something.
When creating Zelda games, it is useful to create a menu....obviously. When the menu is created, though, nothing should move. Nothing should do anything when the menu is open. Realize, though, that deactivating all instances will also disable drawing their sprite. So, here is what you do in the creation of the menu object:
s = surface_create(view_wview,view_hview);
surface_set_target(s);
draw_clear_alpha(c_black,0);
screen_redraw();
draw_set_blend_mode_ext(bm_inv_dest_alpha,bm_one);
draw_set_color(c_black);
draw_rectangle(view_xview,view_yview,view_xview+view_wview,view_yview+view_hview,0);
draw_set_blend_mode(bm_normal);
surface_reset_target();
instance_deactivate_all(1);
Now, let me explain what this does. First of all, it creates a surface on whic the screen will be drawn. All graphics on the screen are captured onto this surface. Then, all instances are deactivated, all of their drawing stops, but the menu object is still activated. In the draw event, all you must do is draw the surface onto the screen, redrawing all of the previous graphics that aren't drawn when deactivated. Even so, there is a slight problem. Surfaces have a weird error in which rather than combining alpha values on top of each other (.3 + .4 = .7), only the last alpha value is drawn (.3 + .4 = .4). To remedy this, first, the whole surface is cleared (draw_clear_alpha), and then after the sccreen is captured, a special blend mode is set. A black rectangle is drawn, but since the blend mode forces black to become transparent, it resets the alpha to 1 without actually adding or drawing anyhting else to the screen! This fixes any alpha problems there might be in a simple, quick line of code.
When you are ready to exit the menu, make sure to free the surface from memory (surface_free(s)), reactivate everything (instance_activate_all()), and destroy the menu instance.
I like this apporach because I don't have to deal with technicalities of going to another room or manually stopping ecah and every object's speed, image_speed, sound, etc. to give the impression of the game being paused. This method actually pauses the game AND fixes transparency values, also in the quickest possible way.
Thank you, and goodnight. Crap, I overcomplicate things.