¡¡Buenas!!
Tras un largo tiempo sin aportar nada a la decompilación debido a que me encuentro en un curso de estudios bastante intenso, traigo un tutorial (ahora mismo estoy en plena fecha de exámenes). Ya llevaba mucho sin hacer nada y tenía ese nosequé que me decía que tenía que volver a traer algo por absurdo que fuera, aunque estoy seguro que a alguien le servirá
Como bien se puede deducir por el título, en este "tuto" os voy a enseñar a modificar el texto de la interfaz para poder mostrar un contador de felicidad, y tener una referencia de cuanto le queda al huevo para eclosionar (que es la verdadera "unidad" que el juego usa, y no los pasos como tal, como mucha gente piensa)
Aquí un vídeo para que entendáis a qué me refiero.
Para empezar, iremos al archivo "include/strings.h" para definir dos nuevas variables, yo las he nombrado así:
Concretamente, después de "extern const u8 gText_OTSlash[];", pero eso realmente da igual.
Ahora, iremos a "src/strings.c" para darles un valor a estas variables.
Bien, ahora que tenemos todo lo externo al archivo "importante" definido, pasamos a la acción, "src/pokemon_summary_screen.c":
Buscamos la función "PrintEggState", en la que encontraremos
Lo que modificaremos completamente por
En resumen, estamos definiendo diversas variables para almacenar datos, que a mi parecer, el propio nombre los definen bien.
Si la línea "friendshipAmount = 40 - (sum->friendship);" no existiera, sería una cuenta regresiva (40, 39, 38...), por lo que restamos a 40 el valor real y tenemos la cuenta progresiva (0, 1, 2, 3...)
Más tarde comprobamos si tal variable es menor que 10 (tiene un dígito) o igual o mayor que 10 (tiene dos dígitos), básicamente para editar la posición X de los valores al ser impresos en pantalla.
Usamos una función para convertir un entero en una cadena de texto, que almacenamos en "gStringVar1", para más tarde imprimirla con la función "SummaryScreen_PrintTextOnWindow"
Estamos a un último paso, ya que hemos colocado la string "HAPPINESS" en la parte superior del cuadro de texto, no obstante, la letra tiene color blanco, y junto con el propio color blanco del fondo se confunde, además, para que quede parejo al resto de cajas de texto, lo lógico sería colocarle un fondo verde.
Tenemos dos opciones, yo claramente tiraré por la más rápida porque como digo, no me puedo poner detallista. Aún así, la opción que yo considero idónea, es la otra (que sería tomar el bg que se usa de fondo para el huevo y modificarlo para que tenga en esa zona el fondo verde)
Bien, yo lo que hice (aunque dudo que vosotros hagáis lo mismo porque es antiestético) es editar la función donde se comprueba si es un huevo o un Pokémon para cambiar el bg, concretamente
En el cuál simplemente podéis suprimir tanto la función como la declaración de la misma (al principio del .c), o, si sois tan vagos como yo, comentar el if entero o eliminarlo.
Y con esto obtendremos ese resultado:
Espero que os guste este tutorial exprés.
¡Un saludo!
Tras un largo tiempo sin aportar nada a la decompilación debido a que me encuentro en un curso de estudios bastante intenso, traigo un tutorial (ahora mismo estoy en plena fecha de exámenes). Ya llevaba mucho sin hacer nada y tenía ese nosequé que me decía que tenía que volver a traer algo por absurdo que fuera, aunque estoy seguro que a alguien le servirá
Como bien se puede deducir por el título, en este "tuto" os voy a enseñar a modificar el texto de la interfaz para poder mostrar un contador de felicidad, y tener una referencia de cuanto le queda al huevo para eclosionar (que es la verdadera "unidad" que el juego usa, y no los pasos como tal, como mucha gente piensa)
Aquí un vídeo para que entendáis a qué me refiero.
No voy a estructurar demasiado bien el tema, y soy consciente de ello, pero estoy haciendo esto a contrarreloj.
Para empezar, iremos al archivo "include/strings.h" para definir dos nuevas variables, yo las he nombrado así:
Código:
extern const u8 gText_EggHappiness[];
extern const u8 gText_EggHatch[];
Ahora, iremos a "src/strings.c" para darles un valor a estas variables.
Código:
const u8 gText_EggHatch[] = _("/40");
const u8 gText_EggHappiness[] = _("HAPPINESS");
Buscamos la función "PrintEggState", en la que encontraremos
Código:
static void PrintEggState(void)
{
const u8 *text;
struct PokeSummary *sum = &pssData->summary;
if (pssData->summary.sanity == TRUE)
text = gText_EggWillTakeALongTime;
else if (sum->friendship <= 5)
text = gText_EggAboutToHatch;
else if (sum->friendship <= 10)
text = gText_EggWillHatchSoon;
else if (sum->friendship <= 40)
text = gText_EggWillTakeSomeTime;
else
text = gText_EggWillTakeALongTime;
SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 2), text, 0, 1, 0, 0);
}
Lo que modificaremos completamente por
Código:
static void PrintEggState(void)
{
u32 friendshipAmount;
int x;
struct PokeSummary *sum = &pssData->summary;
if (pssData->summary.sanity == TRUE){
SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 2), gText_EggWillTakeALongTime, 0, 1, 0, 0);
}
else {
friendshipAmount = 40 - (sum->friendship);
if (friendshipAmount < 10)
ConvertIntToDecimalStringN(gStringVar1, friendshipAmount, 1, 1);
else
ConvertIntToDecimalStringN(gStringVar1, friendshipAmount, 1, 2);
SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 2), gText_EggHappiness, 0, 1, 0, 1);
SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 2), text, 0, 17, 0, 3);
x = GetStringWidth(1, gStringVar1, 0);
SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 2), gText_EggHatch, x, 17, 0, 0);
}
}
En resumen, estamos definiendo diversas variables para almacenar datos, que a mi parecer, el propio nombre los definen bien.
Si la línea "friendshipAmount = 40 - (sum->friendship);" no existiera, sería una cuenta regresiva (40, 39, 38...), por lo que restamos a 40 el valor real y tenemos la cuenta progresiva (0, 1, 2, 3...)
Más tarde comprobamos si tal variable es menor que 10 (tiene un dígito) o igual o mayor que 10 (tiene dos dígitos), básicamente para editar la posición X de los valores al ser impresos en pantalla.
Usamos una función para convertir un entero en una cadena de texto, que almacenamos en "gStringVar1", para más tarde imprimirla con la función "SummaryScreen_PrintTextOnWindow"
Estamos a un último paso, ya que hemos colocado la string "HAPPINESS" en la parte superior del cuadro de texto, no obstante, la letra tiene color blanco, y junto con el propio color blanco del fondo se confunde, además, para que quede parejo al resto de cajas de texto, lo lógico sería colocarle un fondo verde.
Tenemos dos opciones, yo claramente tiraré por la más rápida porque como digo, no me puedo poner detallista. Aún así, la opción que yo considero idónea, es la otra (que sería tomar el bg que se usa de fondo para el huevo y modificarlo para que tenga en esa zona el fondo verde)
Bien, yo lo que hice (aunque dudo que vosotros hagáis lo mismo porque es antiestético) es editar la función donde se comprueba si es un huevo o un Pokémon para cambiar el bg, concretamente
Código:
static void sub_81C2524(void)
{
if (pssData->summary.isEgg)
ChangeBgX(3, 0x10000, 0);
else
ChangeBgX(3, 0, 0);
}
En el cuál simplemente podéis suprimir tanto la función como la declaración de la misma (al principio del .c), o, si sois tan vagos como yo, comentar el if entero o eliminarlo.
Y con esto obtendremos ese resultado:
Espero que os guste este tutorial exprés.
¡Un saludo!
Última edición: