El codigo del compañero arriba es funcional, ya que no ha indicado giro por angulos (image_angle) solo uso las coordenadas para comparar posiciones.
Pero si lo quieres con un codigo como el tuyo se me ocurre usar un margen en la verificacion.
dy = ob_player.y;
if (y < (dy-32)) { sprite_index = spr_enemy_1_down depth = 1}
else
if (y > (dy+32)) { sprite_index = spr_enemy_1_up depth = 1}
else
{ sprite_index = spr_enemy_1 depth = 1}
Colocar el 32 da 64 pxl de margen entre arriba y abajo, lo que queda dentro de ese margen es el centro.
Pero si lo quieres con un codigo como el tuyo se me ocurre usar un margen en la verificacion.
dy = ob_player.y;
if (y < (dy-32)) { sprite_index = spr_enemy_1_down depth = 1}
else
if (y > (dy+32)) { sprite_index = spr_enemy_1_up depth = 1}
else
{ sprite_index = spr_enemy_1 depth = 1}
Colocar el 32 da 64 pxl de margen entre arriba y abajo, lo que queda dentro de ese margen es el centro.