Hola a todos :D

Hace tiempo hice mi sistema de diálogos rpg, era bastante sencillo, pero funcionaba, la cosa es que hace un par de dias encontre un nuevo renderizado de texto llamado scribble, trate de implementarlo en el sistema de diálogos que tenia, en un principio me parti la cabeza en pensar como adaptarlo, pero finalmente lo logre, todo parecía ir en orden y los textos se reproducen correctamente, pero la segunda vez que abría el texto comenzaba con problemas, ya que el efecto de la máquina de escribir (se escribe el texto letra por letra), trate de ver las variables una por una y parece que esta fallando la función de scribble de .typewriter_in(0.5, 1)
ok, encontre el problema pero lo complicado es como solucionarlo, si alguien sabe de algo que pueda funcionar o si ven algo raro a parte de la función del .typewriter_in, se lo agradeceria mucho, a continuación les dejo los codigos que uso:

[OBJ_TEXTBOX]

_Create_:

[gml]indice = 0;

mensaje = "";

msage = scribble(mensaje)
   .typewriter_in(0.5, 1)
      .typewriter_sound(snd_letras, 999, 1.0, 1.0)


paus = false;[/gml]

_step_
[gml]if (string_length(mensaje) < string_length(referencia.msg[indice])){
    mensaje += referencia.msg[indice]
}

msage = scribble(mensaje)
   .typewriter_in(0.5, 1)
      .typewriter_sound(snd_letras, 999, 1.0, 1.0)
      
      
if msage.get_typewriter_state() = 1 && (indice <= referencia.final)
{

   if keyboard_check_pressed(ord("X")) && (mensaje == referencia.msg[indice])
   {
      indice +=1;
      global.mensaje +=1
      if (indice > referencia.final) {obj_prota.stop = false; global.mensaje = 0; instance_destroy(); }
      mensaje = "";
   }   else
   {
      mensaje = referencia.msg[indice];      
   }

}


if (msage.get_typewriter_state() < 1) && paus = false
{

   if keyboard_check_pressed(ord("X"))
   {
      msage.typewriter_skip();
   }
   
}

if (msage.get_typewriter_paused()){
   
   paus = true
   if keyboard_check_pressed(ord("X"))
   {
      msage.typewriter_unpause();   
   }

}[/gml]

_Draw_
[gml]draw_self(); //permitir ver el sprite del objeto

msage.draw(x + 20, y + 7)

draw_text(x + 20, y - 50, msage.get_typewriter_state())[/gml]


[OBJ_PROTA]

_Step_

[gml]//cama

if (stop == true) { exit; }

var  bloque;
bloque = collision_circle(x,y,32,obj_cama,false,false);

if (keyboard_check_pressed(ord("X")) and bloque){
    var msg;
    msg = instance_create(0,0,obj_textbox);
    msg.referencia = bloque;
    stop = true;
   
}[/gml]

[OBJ_CAMA] (ejemplo)

_Create_

[gml]msg[0] = "Es tu cama suave y comoda.";
msg[1] = "Te encantaria quedarte a dormir un rato mas.";
msg[2] = "...";
msg[3] = "Mejor no.";

final = 3;

global.mensaje = 0;

[/gml]

[SCRIBBLE]

https://github.com/JujuAdams/Scribble

[FUNCIONES DE SCRIBBLE]

https://github.com/JujuAdams/scribble/wiki/scribble()-Methods

[VIDEO ILUSTRANDO MI PROBLEMA]

https://www.youtube.com/watch?v=wUExs6NVL84&feature=youtu.be

Si encuentran algo se los agradeceria muchisimo :,c

Usa la función .typewriter_reset para reiniciar la posición del efecto.

gracias por la respuesta, ya trate de reiniciar el efecto de varias formas, con una alarma, al crearse, cuando se destruye y nada de eso parece funcionar :/

Al principio iba a decirte que usaras el reset cuando adquieras un mensaje nuevo, al inicio del código en step, pero decidí replicar tu código y note que eso solo hacia que funcionara de vez en cuando, hice varias pruebas por mi cuenta y sinceramente no encuentro donde esta el problema, podría ser un fallo en el engine Scribble, en cuyo caso tocaría ponerse en contacto con su creador y mostrarle tu código, entonces el podrá decirte si efectivamente es un fallo en Scribble o si simplemente no lo estamos usando correctamente.

En todo caso, si prefieres una solución que no requiera comunicarte con el creador, puedes usar .flush en lugar de .typewriter_reset al principio del evento step.

[gml]if (string_length(mensaje) < string_length(referencia.msg[indice])){
    mensaje += referencia.msg[indice]
   scribble(mensaje).flush()
}[/gml]

flush elimina el elemento, de manera que la próxima vez que sea usado no tiene otra opción mas que crearlo de 0.

Amigo!!!

Use el codigo que me enviaste y ahora funciona a la perfección, de verdad te agradezco mucho :D