(https://www.comunidadgm.org/preguntas-y-respuestas/limitacion-en-modo-de-movimiento-diagonal/?action=dlattach;attach=18337;image)
Eso sucede porque cuando el movimiento es diagonal, las componentes de movimiento vertical y horizontal valen (ambas) 4, que al sumarse dan como resultado un número mayor (4√2).
Para corregir esto, deberías hacer lo siguiente:
[gml]
///EVENTO STEP
//Primero, consigues las componentes del movimiento como lo haces normalmente:
var hmove = keyboard_check(vk_right) - keyboard_check(vk_left);
var vmove = keyboard_check(vk_down) - keyboard_check(vk_up);
//Segundo, calculas el ángulo que forman ambas componentes entre sí
var angle = point_direction(0, 0, hmove, vmove);
//Tercero, multiplicas el valor de la velocidad por las componentes del ángulo.
var hvel = abs(hmove) * vel * dcos(angle);
var vvel = abs(vmove) * vel * dsin(angle);
//(se multiplica también por "abs(hmove)" para evitar que haya movimiento cuando no se está presionando la tecla)
//Cuarto, mueves el objeto
x += hvel;
y -= vvel;
[/gml]
(https://www.comunidadgm.org/preguntas-y-respuestas/limitacion-en-modo-de-movimiento-diagonal/?action=dlattach;attach=18339;image)