Another thing that you may need to consider is setting static objects depth in their create event "before" event_inherited. This is because static objects like shadow casters add their shadow depth when created to a the buffer used for casting shadows. So, depending on your depth sorting method you would put in the create event:
depth = room_height - bbox_bottom;
event_inherited(); // After setting depth
Then for objects which change depth often you would put in their step event or where ever:
depth = room_height - bbox_bottom;
update_depth(); // Explained in the user manual
Light depth on the other hand is normalized so where the light is updated you would put:
light_id.y = new_y_value;
light_id.set_depth(room_height/new_y_value);
Or use a "with statement" or something to avoid all the extra id lookups, etc.