jojojo, un par de scripts solo para practicar, me da gusto que los compartas. Tengo un par de tips.
La primera cuestión, es que en ambos scripts estás usando el valor absoluto, en el caso de calcular la distancia no es necesario usarlo, puedes tratar quitandolo y no va a alterar tu código, eso es por que al elevar un número al cuadrado se vuelve positivo. Otra cosa es que en ese script usas la función power, me parece que game maker tiene una función sqr que eleva al cuadrado directamente, pero si no, no es necesario usarla puedes hacer la multiplicación allí de corrido, te digo por que seguro es un poquititín más optimo que usar la función de power que al ser más general, seguro come más.
En el script de calcular la dirección encuentro varios comentarios que podrían serte de utilidad. El primero sería que en el if de cuando la medidadX es 0, ya le pongas un return que mande 90 grados si es para arriba y -90 si es para abajo, creo que eso se vería más pro que el truquillo que usaste xp, igualmente está bien.
Otro de optimizan sería que no utilices strings para nombrar los cuadrantes, entiendo que lo haces por legibilidad pero cuando menos lo consideraría una mala practica y es poco menos eficiente el comparar cadenas que simplemente números, y también guardarlas. Lo mejor si quieres legibilidad seria hacer un enumerador, y poner para una entrada para cada cuadrante, si no pues usar números, al fin y acabo eso son. También me da algo de curiosidad que hayas decidido añadir lo del chequeo de cuadrantes en dos partes, cuando pudiste haberte evitado todo eso y directamente hacer las sumas de ángulos, literal esos 8 if se podrían transformar en 4 y sin hacer comparaciones innecesarias.
Por último y lo más importante creo, es que también con esto de usar los valores absolutos te pierdes de algo interesante en el script que devuelve el ángulo y es que la función del arcotangente también sirve para valores negativos!, concretamente cubre los cuadrantes 1 y 4, de modo que si quitas esos valores absolutos solo tendrías que hacer un if para revisar si está del lado derecho o del izquierdo (en los cuadrantes 2 y 3) y en tal caso sumarle los 180 grados.
mmm también existe una función llamada arctan2, que ya funciona para todos los cuadrantes, pero bueno esa ya sería como algo de trampa si lo que quieres hacer es entrarle a lo manual.