qna_rh
Thread Id: 20804
Thread Name: Repuntear una dirección dentro del mismo juego.
#0
Doctor Juanjo 12932
Pues eso, llevo mucho tiempo retirado y poco de acuerdo de hacking, pero lo que necesito es poder cambiar la descripción de un objeto depende de los eventos que ocurran en el juego:

Ejemplo Estúpido:

Yo tengo una Master Ball, su descripción dice:

The best BALL that
catches a POKéMON
without fail.

Este texto está en la dirección 3C2028

Ahora supongamos que en la dirección 6B09F8 yo tengo el texto:

De bes BAL dad
cackches a poquiman
güiraut feil.

Quiero repuntearlo para que cada vez que vea una Master Ball tenga esa descripción. Pero quiero ver esa nueva descripción después de algún evento en el juego. Es decir no quiero cambiarla del todo. ¿Es posible?

Creo que no. Pero tal vez esté equivocado.
#1
JV Works 12391
Bueno amigo, ya te respondi por face. Pero aun asi, para todo aquel que tenga la misma duda. Respondo por aqui en el foro:

Como sabras, los textos, y practicamente todas las funciones en el hack, tienen un procedimiento que les hace llamada. Por lo que existe alguna rutina en el hack que llama a ese texto que pones y lo muestra como descripcion.

Pues bien, la clave esta en hallar esa rutina.

¿Como lo hacemos?

No es muy dificil. Simplemente tomamos la direccion del texto en cuestion y volteamos sus bytes. Por lo que si es 3C2028, seria 28203C08 (El 08 al final siempre se pone ya que significa que es una direccion en la ROM)

Luego, abrimos cualquier editor hex y le damos a la opcion buscar, y metemos en el buscador la direccion volteada y le damos a buscar. Al hacerlo, nos llevara justo al sitio donde la rutina en cuestion hace llamada al texto. Aqui podemos hacer dos cosas:

1.Modificar la rutina para que segun una variable en la ram, cargue uno u otro texto:

Este metodo es parecido al que yo utilize para meter mas mapasmundi en ruby. Pero es complicado y requiere saber ASM. Vamos con uno mas simple.

2.Cambiar la direccion a la que hace llamada por una que se encuentre en la ram:

Este es el mas factible. Lo que hacemos es cambiar la direccion por una en la ram como por ejemplo 0234AB2A (Hay que ponerla volteada, por lo que seria 2AAB3402). Al hacerlo, la rom hara llamada al texto desde la ram y no desde la rom.

Esto nos trae ventajas. Pues con simples WBTO (Writebytetooffset) cambiamos el texto de esa direccion, por lo que podremos cambiar a nuestro gusto cuantas veces queramos la descripcion de ese objeto.

Pero hay una pega. Debido a que esto se guarda en la ram, al empezar por primera vez a jugar, este texto estara vacio, es decir, no mostrara NADA. Por lo que, antes de poder obtener dicho objeto, lo que debemos hacer es un WBTO a la direccion en la ram que pusimos y con eso le ponemos la descripcion original, que mas adelante cambiaremos.

.........

Aclaro que, esto que estoy diciendo es posible en teoria. No lo he intentado nunca (He hecho algo parecido pero no con textos de objetos, si no con paletas), estoy hablando especificamente del segundo metodo, el primero, que no explico, si que lo he llegado a utilizar (Lo use para meter mas Worldmaps en ruby).

Espero haber ayudado a todo aquel que tambien tuviese esta duda :D