Bueno últimamente he estado inactivo por aquí, así que hola  :),  bueno toca hablar de un movimiento muy comun que tiene un enemigo, que que a la vez resulta ser bastante molesto de evitar, en este caso las cabeza de medusa del juego "Castle Vania"



Pues su movimiento es serpenteaste, es decir que se mueve de un extremo a otro, lo cual vendría siendo arriba abajo mientras se mueve hacia el frente, entonces podría decir que tiene un CREATE donde están sus variables de velocidad, un STEP que ejecute repetidamente la acción de moverse y una ALARMA0 que invierta las coordenadas de movimiento, pues claro en algún momento tendrá que subir y bajar, lo que vendría siendo igual a Y y -Y, pero otro factor que tendría que considerar es que esta no se mueven hasta que el jugador las haya visto con la "VIEW", por lo que de alguna forma si colisionan con la "VIEW" del jugador esta pasan a tener movimiento, lo que significa que su movimiento inicial es 0 hasta que el jugador las vea, de lo contrario perderán su posiciona inicial apareciendo en el momento que uno no tenia planeado.

Entonces seria algo como

obj_Murcielago
CREATE

velocidad = 0 + (colisión view)


STEP

velocidad += y
alarm[0] = 30


ALARMA0

velocidad -= y


Cualquiera que tenga conocimientos de programación sabe que mi análisis literal tiene sentido, pero a nivel de código no esta muy bien argumentado, no me extraña que no funcione, aunque creo que estoy compensando algo bien  :-[.

Se llama efecto WAVE, se hace con funciones trigonométricas

En ese tutorial te enseña como hacerlo de varias maneras y tiene un editable: https://csanyk.com/2012/10/game-maker-wave-motion-tutorial/