Estoy en una parte en donde no se lo que hago realmente XD, estoy modificando un poco el bucle principal del juego que impone GM de "step y despues draw"

Estoy haciendo una pantalla en donde muestra un poco la historia del juego, en donde hay un texto y una imagen
El texto se va escribiendo progresivamente como los juegos retro y me encanta, el problema es que quiero esperar hasta que el jugador presione enter para seguir contando la historia

Lo unico importante es que quiero hacer un ciclo infinito hasta que uno presione enter, lo que hice fue esto:

[gml]
cerrado=false
while cerrado=false
    {
    if keyboard_check_pressed(vk_enter) cerrado=true
    show_debug_message('Esperando enter')
    screen_redraw()
    }
[/gml]

Supuestamente ese código espera a que presiones enter para continuar con el evento, step en este caso:

[gml]
for (i=0; i<2; i+=1)
    {
    for (j=0; j<string_length(linea)+1; j+=1)
        {
        dibujarlinea=string_copy(linea,0,j)
        show_debug_message(dibujarlinea)
        pantalla=1
        screen_redraw()
        sleep(40)
        }
    }
show_debug_message('Terminada linea')
if cantlineas<=2 exit
/*cerrado=false
while cerrado=false
    {
    if keyboard_check_pressed(vk_enter) break
    show_debug_message('Esperando enter')
    screen_redraw()
    }*/
for (i=2; i<4; i+=1)
    {
    for (j=0; j<string_length(linea)+1; j+=1)
        {
        dibujarlinea=string_copy(linea,0,j)
        show_debug_message(dibujarlinea)
        pantalla=2
        screen_redraw()
        sleep(40)
        }
    }
show_debug_message('Terminada linea')
if cantlineas<=4 exit
/*cerrado=false
while cerrado=false
    {
    if keyboard_check_pressed(vk_enter) break
    show_debug_message('Esperando enter')
    screen_redraw()
    }*/
for (i=4; i<6; i+=1)
    {
    for (j=0; j<string_length(linea)+1; j+=1)
        {
        dibujarlinea=string_copy(linea,0,j)
        show_debug_message(dibujarlinea)
        pantalla=3
        screen_redraw()
        sleep(40)
        }
    }
show_debug_message('Terminada linea')
[/gml]
Lo comentado es el código que muestro arriba (que no funciona)
Yo quiero esperar a que presiones enter en esos 2 lugares

Descomentando eso queda esperando a que apretes enter y muestra los síntomas clásicos de un ciclo infinito :-\
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


Bueno, lo arreglé, abajo escribo el código pero si alguien sabe la respuesta de lo que pregunté arriba se lo agradecería para ordenar un poco el código

Acá está el resultado sin un ciclo que espere, es más complicado con tantas variables pero funciona :D
[gml]
if keyboard_check_pressed(vk_enter) and terminado=1
   {
   scr_cerrar_animacion()
   }
if keyboard_check(vk_enter) completado+=1
if mouse_check_button(mb_left) completado+=1
if completado=0
{
for (i=0; i<2; i+=1)
    {
    for (j=0; j<string_length(linea)+1; j+=1)
        {
        dibujarlinea=string_copy(linea,0,j)
        show_debug_message(dibujarlinea)
        pantalla=1
        screen_redraw()
        sleep(40)
        }
    }
show_debug_message('Terminada linea')
completado=1
if cantpantallas=1 terminado=1
io_clear()
}
if cantlineas<=2 exit

if completado=2
{
for (i=2; i<4; i+=1)
    {
    for (j=0; j<string_length(linea)+1; j+=1)
        {
        dibujarlinea=string_copy(linea,0,j)
        show_debug_message(dibujarlinea)
        pantalla=2
        screen_redraw()
        sleep(40)
        }
    }
show_debug_message('Terminada linea')
completado=3
if cantpantallas=2 terminado=1
io_clear()
}
if cantlineas<=4 exit

if completado=4
{
for (i=4; i<6; i+=1)
    {
    for (j=0; j<string_length(linea)+1; j+=1)
        {
        dibujarlinea=string_copy(linea,0,j)
        show_debug_message(dibujarlinea)
        pantalla=3
        screen_redraw()
        sleep(40)
        }
    }
show_debug_message('Terminada linea')
completado=5
if cantpantallas=3 terminado=1
io_clear()
}
[/gml]
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy