Registrarse

[RH - ASM] [DUDA] No puedo renombrar al rival en POKéMON FireRed

Estado
Cerrado para nuevas respuestas.

Bugrhak

A long time ago I used to call myself "Subzero".
Dale a :ROFLMAO: si pensabas que la duda iba a estar escrita en español.

Hello, all. I'm working on a fire red hack, and I've used the Intro Manager tool to remove naming your rival at the introduction. It told me that if I wanted to change it, I could: "To name the rival from within the game, use “callasm 0x13034D”.
If you want to change the default name, change the name at 01C5758, or repoint if you want."
 
Última edición:

Rubire4

Usuario mítico
Y si tan necesario es que se llame Red y no hay otra opción, ¿no es tan fácil como sustituir en los scripts y combates [RIVAL] por Red en vez de intentar que el buffer [RIVAL] valga Red? Total, el resultado va a ser el mismo, el rival se va a llamar Red, y no te tienes que complicar la vida.
 

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
En tu mismo post tienes la respuesta. En el offset 01C5758 tienes precisamente lo que buscas, es decir, en esa direccion hay una tabla con textos. Para que te hagas una idea los textos corresponden a una letra por cada byte y un FF para determinar el final del texto (esto es para las rutinas que copian strings de la ROM, para que sepan cuando parar cuando el string no es de longitud fija). Si traducimos esos textos hay algo así:

GREEN/RED/LEAF/FIRE/GARY/KAZ...

Entonces, no se como funciona la rutina que lee esos nombres pero por lo que me imagino el juego está predefinido a que para el rival por default vaya a la direccion donde esté GREEN, lo copia y lo pega en el nombre del rival en la RAM, entonces es muy sencillo, cambia ese GREEN por RED y punto, o mas sencillo, allá donde se lea de la direccion de GREEN lo cambias por la direccion de RED. Es decir,


En la direccion 0x46324 escribes 5E571C08.

Si no me equivoco debería funcionar, ya me contarás.
 

Bugrhak

A long time ago I used to call myself "Subzero".
Veréis, chavales, esta duda la tengo desde hace un montón y nunca me la sacaba de encima. Como soy tan vago y me daba un montón de pereza escribir el post, copié un mensaje de un usuario de otra web. (Sep, a esos extremos he llegado :v) el caso es que me he olvidado de borrarle una parte al post. (Evidence)

Y si tan necesario es que se llame Red y no hay otra opción, ¿no es tan fácil como sustituir en los scripts y combates [RIVAL] por Red en vez de intentar que el buffer [RIVAL] valga Red? Total, el resultado va a ser el mismo, el rival se va a llamar Red, y no te tienes que complicar la vida.
No me creas tan noob xD. Podría haber utilizado ese recurso pero no goza de elegancia.
He eliminado la intro de Oak para dar lugar a una introducción “personalizada”. La idea es que el jugador decida como se va a llamar el rival. En caso de que el jugador no pusiese nombre, se le autoasigna uno. Este ultimo asprcto ya está cubierto ya que el mismo jurgo trae esta mecánica.
El problema en si es la rutina para darle nombre al rival, al momento de hacer el callasm, el menú no se abre, es decir no pasa nada. Quizás sea porque el offset que da la herramienta no es el correcto. Ese offset es el motivo de la duda, me gustarís saber cual es.

Disculpadme si os he confundido. :LOL:
 

~Criisss

Usuario mítico
Buenas,

Estuve investigando esto hace un rato y mirando un poco el código de pokefirered llegué a la dirección del nombre en la RAM. Como está en la WRAM se puede toquetear rápido mediante WBTO. Lo hice de esta manera y funciona sin problemas:

Código:
#dynamic 0x800000

#org @incio
checkgender
compare 0x800D 0x0
if 0x1 call @chico
compare 0x800D 0x1
if 0x1 call @chica
msgbox @msg MSG_SIGN
release
end

// Nombre [rival] = May
#org @chico
writebytetooffset 0xc7 0x2028F78
writebytetooffset 0xd5 0x2028F79
writebytetooffset 0xed 0x2028F7A
writebytetooffset 0xFF 0x2028F7B
return

// Nombre [rival] = Brendan
#org @chica
writebytetooffset 0xBC 0x2028F78
writebytetooffset 0xe6 0x2028F79
writebytetooffset 0xd9 0x2028F7A
writebytetooffset 0xe2 0x2028F7B
writebytetooffset 0xd8 0x2028F7C
writebytetooffset 0xd5 0x2028F7D
writebytetooffset 0xe2 0x2028F7E
writebytetooffset 0xFF 0x2028F7F
return

#org @msg
= El rival es [rival].
La dirección del comienzo del nombre es 0x2028F78 y son 8 bytes + 1 byte para el fin de la cadena (un FF)
Para renombrar, con un par de WBTO alcanza, hay que usar la tabla para los códigos de las letras (0xBC = "B", etc), dejo como ejemplo las de mi hack.
Se podría hacer tranquilamente por ASM, pero creo que con esto alcanza y sobra.
Cabe aclarar que se puede usar habiendo nombrado al rival o no.

¡Saludos!
 

Bugrhak

A long time ago I used to call myself "Subzero".
Buenas,

Estuve investigando esto hace un rato y mirando un poco el código de pokefirered llegué a la dirección del nombre en la RAM. Como está en la WRAM se puede toquetear rápido mediante WBTO. Lo hice de esta manera y funciona sin problemas:

Código:
#dynamic 0x800000

#org @incio
checkgender
compare 0x800D 0x0
if 0x1 call @chico
compare 0x800D 0x1
if 0x1 call @chica
msgbox @msg MSG_SIGN
release
end

// Nombre [rival] = May
#org @chico
writebytetooffset 0xc7 0x2028F78
writebytetooffset 0xd5 0x2028F79
writebytetooffset 0xed 0x2028F7A
writebytetooffset 0xFF 0x2028F7B
return

// Nombre [rival] = Brendan
#org @chica
writebytetooffset 0xBC 0x2028F78
writebytetooffset 0xe6 0x2028F79
writebytetooffset 0xd9 0x2028F7A
writebytetooffset 0xe2 0x2028F7B
writebytetooffset 0xd8 0x2028F7C
writebytetooffset 0xd5 0x2028F7D
writebytetooffset 0xe2 0x2028F7E
writebytetooffset 0xFF 0x2028F7F
return

#org @msg
= El rival es [rival].
La dirección del comienzo del nombre es 0x2028F78 y son 8 bytes + 1 byte para el fin de la cadena (un FF)
Para renombrar, con un par de WBTO alcanza, hay que usar la tabla para los códigos de las letras (0xBC = "B", etc), dejo como ejemplo las de mi hack.
Se podría hacer tranquilamente por ASM, pero creo que con esto alcanza y sobra.
Cabe aclarar que se puede usar habiendo nombrado al rival o no.

¡Saludos!
Lo que planteas está bien, y es válido.
Pero lo que yo quiero es llamar a la rutina para que se abra el menú de dar nombre al rival y así el jugador pueda elegir el nombre por si mismo.
El caso es que el offset que da la herramienta para hacerlo, o bien no es el adecuado, o hay que modificar algo para que funcione.

Podría haber hecho esto más fácil y sencillo si usara la intro de OAK, pero he decidido removerla para dar lugar a algo más personalizado y original.
 

Gold

Porrero a tiempo parcial
Miembro insignia
Yo usé una rutina ASM diferente que no recuerdo bien quien me la proporcionó (De eso casi 5 años) Te la pongo en Hex porque nunca me dieron el código. basta con un thumb callasm + waitstate

Código:
1F B5 10 48 01 90 10 49 09 68 10 48 09 18 04 20 00 22 00 23 00 F0 0B F8 0B 49 09 68 0B 48 09 18 08 78 FF 28 05 D0 00 28 03 D0 1F BC 00 BD 08 4C 20 47 08 48 02 78 0A 70 FF 2A F6 D0 01 30 01 31 F8 E7 C0 46 E1 68 05 08 08 50 00 03 4C 3A 00 00
Si a mi me sirve a vos debería
 

Bugrhak

A long time ago I used to call myself "Subzero".
Muchas gracias tío, esto me viene como anillo al dedo.
Considero que con esto ya podéis dar por cerrada la duda. Gracias a todos por vuestra ayuda. (^3^)_b
 
Estado
Cerrado para nuevas respuestas.
Arriba