Registrarse

[pokeemerald] Traduciendo textos

kakarotto

Leyenda de WaH
Hola a todos.

En esta ocasión vengo con un tutorial sobre Decompilación y Desensamblaje, un modo de romhackear que hace más ameno algunas cosas que en binario costaba un mundo.

Les hablo de la traducción. Realmente es algo muy sencillo, ya que todos los textos se encuentran en battle_message.c.

En este archivo identificamos varios buffer, además, que contiene un dato específico ya sea del nombre del pokemon, el nombre del jugador, el nombre del pokemon rival, la clase del entrenador...

Un ejemplo sería este:
Código:
{B_PLAYER_NAME} used\n{B_LAST_ITEM}!
Deducimos muy rápidamente que B_PLAYER_NAME es el buffer donde se aloja el nombre de nuestro personaje y B_LAST_ITEM es el buffer donde se aloja el último ítem utilizado.

También hay otros buffers que tienen una utilidad más expandida, es decir, dichos buffers se utilizan para múltiples funciones dependiendo en que contexto vaya.
Un ejemplo sería este:
Código:
{B_BUFF2}
Donde dicho buffer en algunos textos delimita al nombre del POKéMON y en otros textos cambia a fell ó rose.

Diciéndolo de otra forma, este buffer es dinámico.

También hay otros textos que estan programados, haciendo imposible una traducción agradable.
Me refiero al famoso mensaje de:
Código:
Wild [POKéMON] used [ATTACK]
Foe[POKéMON] used [ATTACK]
que traducido viene siendo: Pokémon salvaje usó ataque ó Pokémon enemigo usó ataque.

Para editar esto hay que hacer una serie de correciones para que dicho "Wild" y dicho "Foe" se ponga después de la especie del POKéMON, quedando como Pokemon salvaje usó ó Pokemon enemigo usó.

-Lo primero que se debe hacer en battle_message.c es traducir todo texto que contenta "Wild" y "Foe".
-Seguidamente nos vamos a la línea donde se define esto:
Código:
#define HANDLE_NICKNAME_STRING_CASE(battlerId, monIndex)
-Cambiamos el código presente por esto:
Código:
#define HANDLE_NICKNAME_STRING_CASE(battlerId, monIndex)                \
    if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)                     \
    {                                                                   \
        GetMonData(&gEnemyParty[monIndex], MON_DATA_NICKNAME, text);    \
		StringGetEnd10(text);											\
		toCpy = text;													\
        while (*toCpy != EOS)                                           \
        {                                                               \
            dst[dstID] = *toCpy;                                        \
            dstID++;                                                    \
            toCpy++;                                                    \
        }																\
		 if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)                    \
            toCpy = sText_FoePkmnPrefix;                                \
        else                                                            \
            toCpy = sText_WildPkmnPrefix;                               \
    }                                                                   \
    else                                                                \
    {                                                                   \
        GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, text);   \
    StringGetEnd10(text);                                               \
	toCpy = text;														\
	}
¡Y listo! ¡Ya podéis traducir de una manera profesional!

Espero que el tutorial les sea de vuestro agrado.
Hasta luego guapos:boogie:
 

Lumbreon

Soy nuevo XD :3
Respuesta: [pokeemerald] Traduciendo textos

¡Que gran aporte!

Esta bastante bueno poder hacer una traducción mas limpia y linda a la vista.
Yo ya había optado por directamente eliminar esos prefijos por no poder
volverlos a sufijos.
Ya que no sabia donde se declaraba el orden de los buffers y no se si ya
lograste traducir el texto de "[stat] de [pokemon] [sube/baja mucho]"
ya que estos al directamente traducirlos se muestra algo así:
"¡ATAQUE de BULBASAUR\n mucho sube!".

En todo caso, gran aporte sigue así crack.
 

kakarotto

Leyenda de WaH
Respuesta: [pokeemerald] Traduciendo textos

¡Que gran aporte!

Esta bastante bueno poder hacer una traducción mas limpia y linda a la vista.
Yo ya había optado por directamente eliminar esos prefijos por no poder
volverlos a sufijos.
Ya que no sabia donde se declaraba el orden de los buffers y no se si ya
lograste traducir el texto de "[stat] de [pokemon] [sube/baja mucho]"
ya que estos al directamente traducirlos se muestra algo así:
"¡ATAQUE de BULBASAUR\n mucho sube!".

En todo caso, gran aporte sigue así crack.
Actualizaré con eso, espero que no sea muy complicado
 

Diego Mertens

Dartrix Joven
Respuesta: [pokeemerald] Traduciendo textos
¡Que gran aporte!
lograste traducir el texto de "[stat] de [pokemon] [sube/baja mucho]"
ya que estos al directamente traducirlos se muestra algo así:
"¡ATAQUE de BULBASAUR\n mucho sube!".
Respuesta: [pokeemerald] Traduciendo textos
Actualizaré con eso, espero que no sea muy complicado
¡Es de hecho bastante fácil!
He hecho los cambios aquí por si piensan que sería mejor agreagarlos al tuto este para tenerlo todo en un solo lugar:
 

Mobius1

Usuario de bronce
Hola buenas pues siguiendo los pasos daba unos errores, yo siguiendo lo que VSC me decia que tenia error y con mucha prueba y fallos "creo" que e dado con la solucion, pero seguramente ya que yo no se nada de C, este mal por algun lado, dejo esto por aqui con la idea de que lo corigais si hace falta, repito me funciona pero ni idea de si esta mal o le falta algo para que quede bien.
Código:
#define HANDLE_NICKNAME_STRING_CASE(battlerId)                          \
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)                         \
    {                                                                   \
        GetMonData(&gEnemyParty, MON_DATA_NICKNAME, text);              \
        toCpy = text;                                                   \
        while (*toCpy != EOS)                                           \
        {                                                               \
            dst[dstID] = *toCpy;                                        \
            dstID++;                                                    \
            toCpy++;                                                    \
        }                                                               \
         if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)                    \
            toCpy = sText_FoePkmnPrefix;                                \
        else                                                            \
            toCpy = sText_WildPkmnPrefix;                               \
    }                                                                   \
    else                                                                \
    {                                                                   \
    GetMonData(&gPlayerParty, MON_DATA_NICKNAME, text);                 \
    toCpy = text;                                                       \
    }
 
Arriba