Translations of this page:

Líneas de diálogo, un línea en string.tab

Se me ha ocurrido una cosa.
Cuando estás traduciendo una frase de un idioma a otro, es posible que no tenga la misma estructura, y me gustaría tener la posibilidad de agrupar unas frases en una conversación.

Digamos que mi actor quiere decir:
“Hola.”
“Mi nombre es Guybrush Threepweeod.”
“Quiero ser pirata.”

Yo escribiría en mi código:

actor.Talk("/GUYBRUSH_HELLO_00/Hola."); 
actor.Talk("/GUYBRUSH_HELLO_01/Mi nombre es Guybrush Threepweeod."); 
actor.Talk("/GUYBRUSH_HELLO_02/Quiero ser pirata.");

y en string.tab tendría:

GUYBRUSH_HELLO_00       Hola. 
GUYBRUSH_HELLO_01       Mi nombre es Guybrush Threepweeod. 
GUYBRUSH_HELLO_02       Quiero ser pirata.

y tengo 3 archivos: GUYBRUSH_HELLO_00.ogg GUYBRUSH_HELLO_01.ogg GUYBRUSH_HELLO_02.ogg.

pero estaba pensando, ¿al traducirlo necesitaré más de 3 frases? ¿o 2 son suficientes?
Así que, no quiero tener diferentes códigos para cada idioma, lo mejor sería agrupar estas tres líneas en una sola.
Pero, ¿cómo las divido para que el actor pronuncie cada línea y tenga tres archivos de sonido independientes?

He escrito este método para hablar (Talk), y puedes incluirlo en el script del actor:

method Talk(inString) 
{ 
    // recupera la cadena de entrada y separa el código y el valor con / 
    var myStr = new String(inString); 
    var SplitArr = myStr.Split("/"); 
    // si no está en formato ("/aaa/bbb") lo deja como está 
    if (SplitArr.Length < 2) { 
        this.Talk(inString); 
        return; 
    } 
    // la recupera de string.tab 
    var expanded = Game.ExpandString(inString); 
 
    // la divide en partes con el separador \ 
    // asumo que la división sólo tendrá una palabra si no se encuentra en string.tab, así que la trataremos como tal 
    var expandedStr = new String(expanded); 
    var SplitArr2 = expandedStr.Split("\"); 
    // si es una línea la dice como es 
    if (SplitArr2.Length < 2) { 
        this.Talk(inString); 
        return; 
    } 
 
    // pronuncia cada parte y reproduce su sonido según TAG_NAME_00 etc.. 
    for (var i= 0; i < SplitArr2.Length; i = i+1){ 
        var fmti; 
        if (i < 10) { 
            fmti = "0" + i; 
        }  else { 
            fmti = i; 
        } 
        var outString = "/" + SplitArr[1] + "_" + fmti + "/" + SplitArr2[i] ; 
        this.Talk(outString); 
    } 
 
}

Ahora, también quiero estar seguro de que tengo todas mis cadenas en string.tab, así que en lugar de usar el texto en el código, escribiré “MISSING_TEXT BLABLABLA” y así sabré qué falta cuando haga las preguntas y respuestas.
Lo que tengo ahora es:

actor.Talk("/GUYBRUSH_HELLO/MISSING TEXT GUYBRUSH_HELLO");

y en string.tab:

GUYBRUSH_HELLO       Hola.\Mi nombre es Guybrush Threepweeod.\Quiero ser pirata.

y mantengo mis archivos de sonido originales GUYBRUSH_HELLO_00… hasta el 02, y funciona perfecto.

Nota: inicialmente quería usar el separador |, pero WME lo cambia a \n. algo que no está documentado, y así no puedes dividir fácilmente una cadena con dos caracteres sin escribir otra función.

SoundGuy

 
es/resource/talk_lines_one_line_in_string.tab.txt · Last modified: 2010/03/19 22:07 by saboteur
Recent changes RSS feed Creative Commons License Driven by DokuWiki