Laquin
Usuario mítico
¡Hola!
Inspirado por este tutorial que nos trajo @Lunos sobre unas modificaciones ideadas por Doesnty, donde se reemplaza la velocidad rápida por instantánea, me propuse insertar la velocidad instantánea manteniendo las otras tres velocidades intactas.
La única pega que encontré fue la siguiente:
Así es; no entran los cuatro textos en pantalla. xD Así que se me ocurrió cambiar los nombres de las velocidades por números:
Quizás no es tan estético como tener palabras en sí, pero bueno, no puedo pensar en nada mejor, ya lo siento.
Meteré el tutorial en distintos spoilers, porque no me gusta que el post se vea excesivamente grande xD
Ahora, solo falta compilar:
Y este sería el resultado:
¡Saludos!
Inspirado por este tutorial que nos trajo @Lunos sobre unas modificaciones ideadas por Doesnty, donde se reemplaza la velocidad rápida por instantánea, me propuse insertar la velocidad instantánea manteniendo las otras tres velocidades intactas.
La única pega que encontré fue la siguiente:
Así es; no entran los cuatro textos en pantalla. xD Así que se me ocurrió cambiar los nombres de las velocidades por números:
Quizás no es tan estético como tener palabras en sí, pero bueno, no puedo pensar en nada mejor, ya lo siento.
Meteré el tutorial en distintos spoilers, porque no me gusta que el post se vea excesivamente grande xD
Empezaremos creando un texto para la velocidad instantánea, en data/strings2.s. En la línea 46, podréis ver lo siguiente:
En lugar de eso, pondremos esto otro:
Lo que hice fue cambiar, como expliqué antes, las palabras por números. Además, añadí un texto nuevo, gSystemText_Inst, que antes no estaba (es el texto de la velocidad nueva que vamos a crear). En lugar de los números también podríais poner A, B, C y D, por ejemplo. Mientras os entre en la pantalla, no hay mayor problema. Es importante poner $ al final de cada uno de los textos, para indicar que ahí se acaba la cadena de caracteres. Es una especie de separador.
Código:
gSystemText_Slow:: @ 842C409
.string "{PALETTE 15}SLOW$"
gSystemText_Mid:: @ 842C411
.string "{PALETTE 15}MID$"
gSystemText_Fast:: @ 842C418
.string "{PALETTE 15}FAST$"
Código:
gSystemText_Slow:: @ 842C409
.string "{PALETTE 15}1$"
gSystemText_Mid:: @ 842C411
.string "{PALETTE 15}2$"
gSystemText_Fast:: @ 842C418
.string "{PALETTE 15}3$"
gSystemText_Inst::
.string "{PALETTE 15}4$"
Nos dirigimos ahora a include/strings2.h. En la línea 26, debéis observar algo así:
Justo debajo, escribiremos:
Así nos quedaría en su totalidad:
Añadir esa línea hace que podamos hacer referencias al texto que hemos creado antes desde otras partes del código.
Código:
extern const u8 gSystemText_Fast[];
Código:
extern const u8 gSystemText_Inst[];
Código:
[...]
extern const u8 gSystemText_ButtonMode[];
extern const u8 gSystemText_Slow[];
extern const u8 gSystemText_Mid[];
extern const u8 gSystemText_Fast[];
extern const u8 gSystemText_Inst[];
extern const u8 gSystemText_On[];
[...]
Vamos a abrir ahora el archivo src/option_menu.c, donde, en la línea 319, veremos esto:
Estas son las posiciones de los textos que aparecen en el menú, en el juego. Debemos hacer dos modificaciones: por una parte, definir la posición del texto de la velocidad instantánea; por otra, cambiar los valores para que los textos no estén demasiado a la izquierda ni a la derecha. Estos valores creo que son bastante acertados:
A continuación, en el mismo archivo, debemos buscar la línea 331. Veremos esta función:
Primero de todo, añadiremos un elemento a ese array llamado styles, puesto que también necesitamos tener el estilo para el texto de la velocidad instantánea.
Acto seguido, como hicieron con los demás estilos, le daremos el valor 0xF al nuestro, escribiendo styles[3] = 0xF;. Por último, llamaremos a la función DrawOptionMenuChoice una vez más para que nos escriba el texto de la velocidad instantánea.
La función entera terminará como la veis aquí:
Ahora, un poco más arriba, en la línea 300, veremos esta otra función:
Cambiaremos los doses por treses:
Esto hará que, si tenemos seleccionada la opción del texto lento, y le damos a la izquierda, se vaya a la opción que está más a la derecha. Antes, se habría ido a FAST; ahora, en cambio, como tenemos una opción más, debe irse a una opción más a la derecha, y entonces llegará a la velocidad instantánea.
También haremos que, al estar en la velocidad instantánea en el menú, y pulsemos el botón hacia la derecha, se vaya a la primera opción de todas, la del texto lento.
Código:
#if ENGLISH
#define TEXTSPEED_SLOW_LEFT (120)
#define TEXTSPEED_MIX_LEFT (155)
#define TEXTSPEED_FAST_LEFT (184)
#endif
Código:
#if ENGLISH
#define TEXTSPEED_SLOW_LEFT (120)
#define TEXTSPEED_MIX_LEFT (147)
#define TEXTSPEED_FAST_LEFT (175)
#define TEXTSPEED_INST_LEFT (202)
#endif
Código:
static void TextSpeed_DrawChoices(u8 selection)
{
u8 styles[3];
styles[0] = 0xF;
styles[1] = 0xF;
styles[2] = 0xF;
styles[selection] = 0x8;
DrawOptionMenuChoice(gSystemText_Slow, TEXTSPEED_SLOW_LEFT, 40, styles[0]);
DrawOptionMenuChoice(gSystemText_Mid, TEXTSPEED_MIX_LEFT, 40, styles[1]);
DrawOptionMenuChoice(gSystemText_Fast, TEXTSPEED_FAST_LEFT, 40, styles[2]);
}
Acto seguido, como hicieron con los demás estilos, le daremos el valor 0xF al nuestro, escribiendo styles[3] = 0xF;. Por último, llamaremos a la función DrawOptionMenuChoice una vez más para que nos escriba el texto de la velocidad instantánea.
La función entera terminará como la veis aquí:
Código:
static void TextSpeed_DrawChoices(u8 selection)
{
u8 styles[4];
styles[0] = 0xF;
styles[1] = 0xF;
styles[2] = 0xF;
styles[3] = 0xF;
styles[selection] = 0x8;
DrawOptionMenuChoice(gSystemText_Slow, TEXTSPEED_SLOW_LEFT, 40, styles[0]);
DrawOptionMenuChoice(gSystemText_Mid, TEXTSPEED_MIX_LEFT, 40, styles[1]);
DrawOptionMenuChoice(gSystemText_Fast, TEXTSPEED_FAST_LEFT, 40, styles[2]);
DrawOptionMenuChoice(gSystemText_Inst, TEXTSPEED_INST_LEFT, 40, styles[3]);
}
Código:
static u8 TextSpeed_ProcessInput(u8 selection)
{
if (gMain.newKeys & DPAD_RIGHT)
{
if (selection < 2)
selection++;
else
selection = 0;
}
if (gMain.newKeys & DPAD_LEFT)
{
if (selection > 0)
selection--;
else
selection = 2;
}
return selection;
}
Código:
static u8 TextSpeed_ProcessInput(u8 selection)
{
if (gMain.newKeys & DPAD_RIGHT)
{
if (selection < 3)
selection++;
else
selection = 0;
}
if (gMain.newKeys & DPAD_LEFT)
{
if (selection > 0)
selection--;
else
selection = 3;
}
return selection;
}
También haremos que, al estar en la velocidad instantánea en el menú, y pulsemos el botón hacia la derecha, se vaya a la primera opción de todas, la del texto lento.
Ahora nos iremos al último archivo que manipularemos, src/text.c, y en la línea 436 pondremos lo siguiente:
Lo único que hicimos fue añadir un valor para la velocidad instantánea, que servirá después para el sistema que programó Doesnty. Todos los créditos para él.
El sistema en cuestión lo insertaremos en la línea 2487 del mismo archivo. Veréis que pone esto:
Lo sustituímos por:
Código:
static const u8 sTextSpeedDelays[] = { 6, 3, 1, 0 }; // slow, mid, fast, inst.
El sistema en cuestión lo insertaremos en la línea 2487 del mismo archivo. Veréis que pone esto:
Código:
PrintNextChar(win);
switch (win->state)
{
case WIN_STATE_END:
return TRUE; // done printing text
case WIN_STATE_WAIT_BUTTON:
case WIN_STATE_WAIT_CLEAR:
case WIN_STATE_WAIT_SCROLL:
if (PlayerCanInterruptDelay(win))
return 0;
win->delayCounter = 60;
break;
case WIN_STATE_PAUSE:
case WIN_STATE_NEWLINE:
case WIN_STATE_WAIT_SOUND:
break;
default:
win->state = WIN_STATE_CHAR_DELAY;
win->delayCounter = GetTextDelay(win);
break;
}
Código:
do{
PrintNextChar(win);
switch (win->state){
case WIN_STATE_END:
return TRUE; // done printing text
case WIN_STATE_WAIT_BUTTON:
case WIN_STATE_WAIT_CLEAR:
case WIN_STATE_WAIT_SCROLL:
if (PlayerCanInterruptDelay(win))
return 0;
win->delayCounter = 60;
break;
case WIN_STATE_PAUSE:
case WIN_STATE_NEWLINE:
case WIN_STATE_WAIT_SOUND:
break;
default:
win->state = WIN_STATE_CHAR_DELAY;
win->delayCounter = GetTextDelay(win);
break;
}
} while (win->state == WIN_STATE_CHAR_DELAY && win->delayCounter == 0);
Código:
make NODEP=1 -j(núm. de procesadores)
¡Saludos!
Última edición: