Hola acabo de hacer una intro para un juego y se me dio por hacer un letrero que dibujara textos con el tipico efecto de letra por letra

El problema es que el codigo usado para la intro no funciona exactamente igual, les mostrare como hacia el texto en la intro para que me digan como podria adaptarlo al letrero

[gml]
/// Create Event
mensaje[0] = " ";
mensaje[1] = " ";
mensaje[2] = " ";
mensaje[3] = " ";
mensaje[4] = " ";
mensaje[5] = " ";

mensaje_start = 0;  //Primer numero del arreglo
mensaje_end = 5;  //Ultimo numero del arreglo
incremento = 0.5;  //Velocidad a la que se mostrara cada letra
caracteres = 0;  //Numeros de caracteres de cada arreglo, las tetras que se dibujaran una por una
mensaje_draw = " ";  //El texto que se dibujara
view = true;  //Para que se muestre el texto
next = false;  //Para que pase al siguiente arreglo
texto = 0;  //Para escuchar un sonido por cada letra mostrada
mensaje_length = string_length(mensaje[mensaje_start])  //Numero de caracteres de cada arreglo
[/gml]

[gml]
/// Step Event
if (caracteres < mensaje_length) {
caracteres += incremento
mensaje_draw = string_copy(mensaje[mensaje_start], 0, caracteres)

//Creare una variable local para verificar algo, en gm8 las puedo declarar poniendo local.
local.caracter = string_char_at(mensaje[mensaje_start], caracteres)

next = false;
view = true;

//Maquina de sonido para el texto
if (texto == 1.5) && (local.caracter != "") {
    sound_play(snd_text)
    texto = 0
   }
   if texto < 1.5
   texto += incremento
   else
   texto = 1.5

}
else { //Si caracteres es mayor que el numero de caracteres del arreglo actual
//Si la alarma esta inactiva y se presiona la tecla de espacio, llamara a la alarma para poner el next en true
if (keyboard_check_pressed(vk_space) && alarm[0] = -1)
    {
     alarm[0] = 60
    }
    if (next) {
        //Siempre que el arreglo actual sea menor al ultimo arreglo
        if (mensaje_start < mensaje_end)
            {
             next = false;
             mensaje_start += 1;  //pasamos al siguiente arreglo del array
             caracteres = 0;  //Restablecemos los caracteres
             mensaje_length = string_length(mensaje[mensaje_start])  //Actualizamos
             mensaje_draw = "";  //Borramos el mensaje anterior
            }
            else {  //Si ya no quedan mensajes a los que avanzar, se destruye
            instance_destroy() }
     }

//Velocidad del texto en puntos suspensivos o espacios y comas, sin idea, alguna sugerencia
}
[/gml]

[gml]
/// Alarm[0] event
view = false;
next = true;
[/gml]

[gml]
/// Draw event
//Creamos una fuente exclusiva para el letrero
var fnt_text;
fnt_text = font_add("Fixedsys", 12, 0, 0, ord("!"), ord("z"))

draw_set_font(fnt_text)
draw_set_halign(fa_left)
draw_set_color(c_white)

if (view)
draw_text(64, 64, mensaje_draw)
[/gml]

Por el momento el codigo no funciona como en la intro, puedo deducir que es por 2 cosas:

1- Lo puse en el evento equivocado, pues el evento step ocurre en cada paso, y muy rapido, en que evento deberia ponerlo

2- Una intro y un letrero son cosas muy distintas, puede que este fallando por algo que no he tomado en cuenta, por ahora no he visto en que estoy fallando

El otro problema son los multiples textos, digo el letrero, pues para mostrar letra por letra necesito crear los mensajes dentro del objeto particular, y seria un malgaste crear multiples letreros y crear multiples variables de texto

Les agradezco si me ayudaran a solucionar este particular problema, nose si llamarlo particular

Haz una animación. Ps decir un objeto cuyo sprite contiene como subimagenes cada letra del letrero.
Para que se dibuje uno a uno usa image_index+=1;  image_speed=0.01;

Espero te sirva de algo
La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.

Creo no me entendi, el problema no es con mostrar el texto letra por letra, eso ya lo hago archivandolas en la array y con string_copy, el problema son los distintos letreros y pues si usara el metodo del sprite con multiples subimagenes estaria gastando memoria rapido

Solo quiero una forma de tener mensajes en multiples instancias colocadas, intente con editar las array dentro de los creation code de las instancias y pues no funciono, se dibujaba  el mismo texto y etc

Hola T789

En vez de usar Arrays, cámbialo por una data structure del tipo "LIST".

CREATE EVENT
[gml]mensaje = ds_list_create()[/gml]

DESTROY EVENT
if mensaje != noone { ds_list_destroy(mensaje); mensaje = noone }

GAME END EVENT
if mensaje != noone { ds_list_destroy(mensaje); mensaje = noone }

Luego en tu STEP EVENT reemplaza todos los:
[gml]mensaje[mensaje_start][/gml]
por:
[gml]ds_list_find_value(mensaje,mensaje_start)[/gml]

Y esta es la función que debes usar para añadir líneas al texto, puedes crear un script para facilitarte las cosas y no repetir estas dos líneas a cada rato.
[gml]ds_list_add(obj_letrero.mensaje,"Tu línea de texto aquí","Puedes añadir hasta 15 líneas usando la misma función")
mensaje_end = ds_list_size(obj_letrero.mensaje) //Asegurate de re-ajustar la cantidad de parrafos cada vez que metes uno nuevo, sino tu STEP EVENT no los leerá todos.[/gml]

Saludos

Tu metodo es muy bueno, no sabia sobre los ds_list, aunque ya habia encontrado otra alternativa para los multiples textos, este metodo no esta nada mal, solo es que me aparece un error de:

EXECUTION ERROR in creation code for instance 100087 in room rm_test
Error in code at line 1
at position 23: Unknown variable mensaje

y la variable ya esta declarada en el evento create