Bueno he estado programando un ojo volador que te persigue si estas a cierta distancia de el, cuando es se acerque a ti demasiado se detiene y empieza a disparar:
[gml]///Movimiento
// Chequea en un circule si esta el jugador
if collision_circle(x,y,200,objJugador,0,0) || debil{

    // Se detiene
    if !collision_circle(x,y,100,objJugador,0,0){
    image_angle = direction
        mp_potential_step(objJugador.x, objJugador.y, 2, false)
    }else{
        speed = 0
        if !parar{
            alarm[0] = 10
            parar = true
           
            image_angle = point_direction(x,y,objJugador.x+16,objJugador.y+16)
            direction = image_angle
           
            // Disparo
            bala = instance_create(x,y,objOjoBala)
            bala.direction = direction
            bala.speed = 6
            bala.image_angle = bala.direction
        }
    }
}else{
    speed =0
}[/gml]

El problema con este codigo es que cuando se acerca y hay un obstaculo por el medio se detiene y te empieza a atacar, y las balas del ojo nunca llegaran pues estas se destruyen con el obstaculo.

Necesito una manera de verificar que haya obstaculos entre el ojo y el jugador.
Hola

Tenes la funcion collision_line