Registrarse

[RH - Otros] Cambiar de orden la elección genero

gameboy_cl

Usuario de platino
Hola, quería saber si es posible cambiar de orden la elección de genero del protagonista, me gustaría que fuese la primera opción "CHICA".
Sé que en estricto rigor pudo hacerlo solo reemplazando al protagonista por mujer, pero quiero evitar eso.
POKEMON AGUA AZUL.png
Uso FR ingles.

Ojalá se entienda lo que quiero explicar, gracias de antemano.
 

Loz

_______
Mmm, si sólo quieres que aparezca la opción de 'Chica' en vez de 'Chico', podrías cambiar los punteros de los textos, es decir colocar el puntero de la palabra 'Chica' en el lugar del puntero de la palabra 'Chico', solo sería un cambio estético.
 

CoqeeinRH

Leyenda de WaH
Pues facil editando el Texto, el de "CHICO" por "CHICA" Y el de "CHICA" por "CHICO" y cambiar los Minisprites y los Sprites... Es fácil.​
 

Draizehn

I'm back, baby.
Miembro del equipo
Moderador/a
Lo que dijeron los compas de arriba...
Puedes editar los textos de "Boy" "Girl" y editarlos a tu gusto, con una herramienta para editar textos - - - Obviamente xd--- en mi caso yo uso A-Text es bastante fácil la verdad... Aunque sería incomodo porque en la elección la chica lucirá como un chico -(pues solo cambiaste los textos no los sprites) - aquí tendrías q editar los sprites, Creo q puedes usar NSE 2.0 para esto...
Espero te haya servido mi ayuda :D
 

Tohru

Baneado
Lo que dijeron los compas de arriba...
Puedes editar los textos de "Boy" "Girl" y editarlos a tu gusto, con una herramienta para editar textos - - - Obviamente xd--- en mi caso yo uso A-Text es bastante fácil la verdad... Aunque sería incomodo porque en la elección la chica lucirá como un chico -(pues solo cambiaste los textos no los sprites) - aquí tendrías q editar los sprites, Creo q puedes usar NSE 2.0 para esto...
Espero te haya servido mi ayuda :D
No uses el A-Text para eso esa wea daña la rom :v
mejor usa Hexmaniac v:
 

CoqeeinRH

Leyenda de WaH
No uses el A-Text para eso esa wea daña la rom :v
mejor usa Hexmaniac v:
Pues si tienes varias alternativas... También podrias usar 010 Editor qué es el que usa PokeAJ para traducir Roms y editar textos, pero A-Text ya quedo obsoleto ya que "bugea" las Roms. 🔥🐶
xD
Yo porque no s eusar bien el HMA xDdd
Es cuestión de ir buscando lo qué necesites cambiar, HMA tiene de todo literalmente. Es una de las mejores herramientas. 👽⚽
 

Draizehn

I'm back, baby.
Miembro del equipo
Moderador/a
Vale bro... Grasas
Pues si tienes varias alternativas... También podrias usar 010 Editor qué es el que usa PokeAJ para traducir Roms y editar textos, pero A-Text ya quedo obsoleto ya que "bugea" las Roms. 🔥🐶

Es cuestión de ir buscando lo qué necesites cambiar, HMA tiene de todo literalmente. Es una de las mejores herramientas. 👽⚽
 

Acimut

Profesional de WaH
Hola, quería saber si es posible cambiar de orden la elección de genero del protagonista, me gustaría que fuese la primera opción "CHICA".
Sé que en estricto rigor pudo hacerlo solo reemplazando al protagonista por mujer, pero quiero evitar eso.
Ver el archivo adjunto 9579
Uso FR ingles.

Ojalá se entienda lo que quiero explicar, gracias de antemano.
No sé porqué nadie ayuda, si está bien fácil de hacer xd

El género del prota se guarda en el SaveBlock2. Ocupa 1 byte, es 0 si es chico y 1 si es chica.
Lo que haría en tu lugar, además deintercambiar el texto sería cambiar los resultados a la hora de elegir una opción.

Así, sólo hay que modificar la función que recibe el resultado y establece el género en el saveblock:

Modificar esto en C está bien fácil.
Si MALE = 0 Y FEMALE =1
En teoría sólo sería necesario cambiar esto:
C:
static void Task_OakSpeech20(u8 taskId)
{
    s8 input = Menu_ProcessInputNoWrapAround();
    switch (input)
    {
    case 0:
        gSaveBlock2Ptr->playerGender = MALE;
        break;
    case 1:
        gSaveBlock2Ptr->playerGender = FEMALE;
        break;
    case -1:
    case -2:
        return;
    }
    gTasks[taskId].func = Task_OakSpeech21;
}
Por esto:
Código:
static void Task_OakSpeech20(u8 taskId)
{
    s8 input = Menu_ProcessInputNoWrapAround();
    switch (input)
    {
    case 0:
        gSaveBlock2Ptr->playerGender = FEMALE;
        break;
    case 1:
        gSaveBlock2Ptr->playerGender = MALE;
        break;
    case -1:
    case -2:
        return;
    }
    gTasks[taskId].func = Task_OakSpeech21;
}

Si pasamos lo anterior a binario, será necesario hacer un hook, lo que yo haría sería poner un hook justo en el switch, así:

Código:
.org 0x0812ffb2
    ldr r3, =Task_OakSpeech20_new|1
    bx r3
Uso R3 porque el registro no es usado en la función.
Esto compilado en 0x0812ffb2 sería:
01 4B 18 47 00 00 XX+1 XX XX 08
donde XX+1 XX XX 08 sería el offset permutado a la rutina modificada (Task_OakSpeech20_new), que pasaré a continuación:

Código:
.org 0x08XXXXXX
Task_OakSpeech20_new:
    cmp    r1, #0
    beq    .set_female
    cmp    r1, #0
    bgt    .no_equ_0
    mov    r0, #0x2
    neg    r0, r0
    cmp    r1, r0
    blt    .gTask_Task_OakSpeech21
    b    .return
.no_equ_0:
    cmp    r1, #0x1
    beq    .set_male
    b    .gTask_Task_OakSpeech21
.set_female:
    ldr    r0, =0x0300500C //gSaveBlock2Ptr
    ldr    r1, [r0]
    mov    r0, #0x1        //FEMALE
    b    .Save_playerGender
.set_male:
    ldr    r0, =0x0300500C //gSaveBlock2Ptr
    ldr    r1, [r0]
    mov    r0, #0x0        //MALE
.Save_playerGender:
    strb    r0, [r1, #0x8]
.gTask_Task_OakSpeech21:
    ldr    r0, =0x03005090 //gTasks
    lsl    r1, r4, #0x2
    add    r1, r1, r4
    lsl    r1, r1, #0x3
    add    r1, r1, r0
    ldr    r0, =0x0812fff1 //Task_OakSpeech21
    str    r0, [r1]
.return:
    pop    {r4}
    pop    {r0}
    bx    r0
Como ven, nada del otro mundo, una rutina bien corta, y compilada quedaría algo como:

00 29 09 D0 00 29 04 DC 02 20 40 42 81 42 0B DB 11 E0 01 29 04 D0 07 E0 08 48 01 68 01 20 02 E0 06 48 01 68 00 20 08 72 05 48 A1 00 09 19 C9 00 09 18 04 48 08 60 10 BC 01 BC 00 47 0C 50 00 03 90 50 00 03 F1 FF 12 08

Insertas esta rutina en un offset alineado (terminado en 0, 4, 8, C), anotas el offset, pues es el que usas en la rutina anterior (hook)

Por último hay que repuntear los textos de chico y chica respectivamente:
Código:
08415d93 g 00000004 gText_Boy
puntero: 93 5d 41 08
offset donde se encuentra el puntero: 0x0812FF98

08415d97 g 00000005 gText_Girl
puntero: 97 5d 41 08
offset donde se encuentra el puntero:0x0812FF9C
Hice una prueba para verificar que todo funcione correctamente, por lo que solo intercambié los offset de los textos, pero supongo que tienes los textos traducidos, así que pon los offset correspondientes.



Espero haberte ayudado, saludos.
 

Vent

グラフィックの神
No sé porqué nadie ayuda, si está bien fácil de hacer xd

El género del prota se guarda en el SaveBlock2. Ocupa 1 byte, es 0 si es chico y 1 si es chica.
Lo que haría en tu lugar, además deintercambiar el texto sería cambiar los resultados a la hora de elegir una opción.

Así, sólo hay que modificar la función que recibe el resultado y establece el género en el saveblock:

Modificar esto en C está bien fácil.
Si MALE = 0 Y FEMALE =1
En teoría sólo sería necesario cambiar esto:
C:
static void Task_OakSpeech20(u8 taskId)
{
    s8 input = Menu_ProcessInputNoWrapAround();
    switch (input)
    {
    case 0:
        gSaveBlock2Ptr->playerGender = MALE;
        break;
    case 1:
        gSaveBlock2Ptr->playerGender = FEMALE;
        break;
    case -1:
    case -2:
        return;
    }
    gTasks[taskId].func = Task_OakSpeech21;
}
Por esto:
Código:
static void Task_OakSpeech20(u8 taskId)
{
    s8 input = Menu_ProcessInputNoWrapAround();
    switch (input)
    {
    case 0:
        gSaveBlock2Ptr->playerGender = FEMALE;
        break;
    case 1:
        gSaveBlock2Ptr->playerGender = MALE;
        break;
    case -1:
    case -2:
        return;
    }
    gTasks[taskId].func = Task_OakSpeech21;
}

Si pasamos lo anterior a binario, será necesario hacer un hook, lo que yo haría sería poner un hook justo en el switch, así:

Código:
.org 0x0812ffb2
    ldr r3, =Task_OakSpeech20_new|1
    bx r3
Uso R3 porque el registro no es usado en la función.
Esto compilado en 0x0812ffb2 sería:
01 4B 18 47 00 00 XX+1 XX XX 08
donde XX+1 XX XX 08 sería el offset permutado a la rutina modificada (Task_OakSpeech20_new), que pasaré a continuación:

Código:
.org 0x08XXXXXX
Task_OakSpeech20_new:
    cmp    r1, #0
    beq    .set_female
    cmp    r1, #0
    bgt    .no_equ_0
    mov    r0, #0x2
    neg    r0, r0
    cmp    r1, r0
    blt    .gTask_Task_OakSpeech21
    b    .return
.no_equ_0:
    cmp    r1, #0x1
    beq    .set_male
    b    .gTask_Task_OakSpeech21
.set_female:
    ldr    r0, =0x0300500C //gSaveBlock2Ptr
    ldr    r1, [r0]
    mov    r0, #0x1        //FEMALE
    b    .Save_playerGender
.set_male:
    ldr    r0, =0x0300500C //gSaveBlock2Ptr
    ldr    r1, [r0]
    mov    r0, #0x0        //MALE
.Save_playerGender:
    strb    r0, [r1, #0x8]
.gTask_Task_OakSpeech21:
    ldr    r0, =0x03005090 //gTasks
    lsl    r1, r4, #0x2
    add    r1, r1, r4
    lsl    r1, r1, #0x3
    add    r1, r1, r0
    ldr    r0, =0x0812fff1 //Task_OakSpeech21
    str    r0, [r1]
.return:
    pop    {r4}
    pop    {r0}
    bx    r0
Como ven, nada del otro mundo, una rutina bien corta, y compilada quedaría algo como:

00 29 09 D0 00 29 04 DC 02 20 40 42 81 42 0B DB 11 E0 01 29 04 D0 07 E0 08 48 01 68 01 20 02 E0 06 48 01 68 00 20 08 72 05 48 A1 00 09 19 C9 00 09 18 04 48 08 60 10 BC 01 BC 00 47 0C 50 00 03 90 50 00 03 F1 FF 12 08

Insertas esta rutina en un offset alineado (terminado en 0, 4, 8, C), anotas el offset, pues es el que usas en la rutina anterior (hook)

Por último hay que repuntear los textos de chico y chica respectivamente:
Código:
08415d93 g 00000004 gText_Boy
puntero: 93 5d 41 08
offset donde se encuentra el puntero: 0x0812FF98

08415d97 g 00000005 gText_Girl
puntero: 97 5d 41 08
offset donde se encuentra el puntero:0x0812FF9C
Hice una prueba para verificar que todo funcione correctamente, por lo que solo intercambié los offset de los textos, pero supongo que tienes los textos traducidos, así que pon los offset correspondientes.



Espero haberte ayudado, saludos.
Grande Acimut! Como siempre salvando el dia.
PD: Esto va para ModExe, lo llamaré ''Rutina de Cambio al seleccionar el Género'' uwu
 

Acimut

Profesional de WaH
PD: Esto va para ModExe, lo llamaré ''Rutina de Cambio al seleccionar el Género'' uwu
Me entristece tener que leer esto, pues asesina mis ya pocas ganas desinteresadas de ayudar en la comunidad. La razón por la que usé parte de mi poco tiempo en dar una solución al problema planteado, es para fomentar la investigación, incentivar la curiosidad y con suerte se use para algo nuevo o diferente; y así, para que quien le interese pueda crecer como rom hacker. Si no fuese el caso, no hubiera puesto información relevante, y mucho menos el código en ensamblador. Me gustaría decir que lo hice con fines didácticos.

Lo que tu quieres hacer con mis aportes va en contra de mi filosofía, así que por favor, absténgase de publicar mis aportes como parte de otros recursos o parches.
 

Vent

グラフィックの神
Me entristece tener que leer esto, pues asesina mis ya pocas ganas desinteresadas de ayudar en la comunidad. La razón por la que usé parte de mi poco tiempo en dar una solución al problema planteado, es para fomentar la investigación, incentivar la curiosidad y con suerte se use para algo nuevo o diferente; y así, para que quien le interese pueda crecer como rom hacker. Si no fuese el caso, no hubiera puesto información relevante, y mucho menos el código en ensamblador. Me gustaría decir que lo hice con fines didácticos.

Lo que tu quieres hacer con mis aportes va en contra de mi filosofía, así que por favor, absténgase de publicar mis aportes como parte de otros recursos o parches.
Sólo bromeaba... tampoco hay que tomárselo a pecho...
Si no quieres que tus aportes estén en mi ModExe... pos, hay que respetar tu decisión.
 
Arriba