Registrarse

[ASM] Menú con funciones personalizadas

El Carlos Betancourt

Mejorando en el RH
Respuesta: GBA | ASM | Menú con funciones personalizadas

Valla tutorial, ahora ya puedo quitar lo de ir hasta el centro pokémon para acceder al PC de Bill
 

Juan Kio

Aprendiendo decomp...
Respuesta: GBA | ASM | Menú con funciones personalizadas

porque al apretar la opcion en el menu se me resetea el juego
 

Wufzheevk

Ģ̴͕̹͉̻͕̥͇̗̼̠̫͎̜̞͎͖̼͎̅͆̈́͑͆͛̎̈́̓̒̉̉́̊́̏͑̐̐͜͝l̸͐̄̅̑̾̈
Respuesta: GBA | ASM | Menú con funciones personalizadas

Tengo una pregunta, Seria posible de algun modo hacer que la opcion que hemos cambiado (EXIT) funcione con una flag al igual que la pokedex??, de modo que cuando te ponen la flag esta opcion aparece. Es que la opcion que le puse no quiero que la tenga el prota desde el inicio de la historia... Gracias y buen tuto!!
 

L!no

GBA Developer
Respuesta: GBA | ASM | Menú con funciones personalizadas

Tengo una pregunta, Seria posible de algun modo hacer que la opcion que hemos cambiado (EXIT) funcione con una flag al igual que la pokedex??, de modo que cuando te ponen la flag esta opcion aparece. Es que la opcion que le puse no quiero que la tenga el prota desde el inicio de la historia... Gracias y buen tuto!!
Podrías cambiar de lugar tu función y el bag, y usar la rutina para que se active el bag con una flag, que voy a subir un tuto sobre esto pronto.

Enviado desde mi GT-S5303B mediante Tapatalk
 
Respuesta: GBA | ASM | Menú con funciones personalizadas

Hola que tal! Buen tutorial. ¿Por casualidad sabes como hacer para cambiar el EXIT por
la PC? Como en Pokemon sol y luna.
 

Kaiser de Emperana

Called in hand
Re: Respuesta: GBA | ASM | Menú con funciones personalizadas

Hola que tal! Buen tutorial. ¿Por casualidad sabes como hacer para cambiar el EXIT por
la PC? Como en Pokemon sol y luna.
Simplemente mirá como funciona el script de la pc y llamalo con el método que explico en el tutorial.

Pero yo si fuera vos no lo haría. El pc en la tercera generación cura los pokemon, lo que haría que el jugador sea un centro pokemon móvil.
 
Una pregunta, discúlpame ser tan pesado. Para insertar la rutina es necesario hacer
la rutina.bin? O estando compilada sirve?
 

Kaiser de Emperana

Called in hand
Una pregunta, discúlpame ser tan pesado. Para insertar la rutina es necesario hacer
la rutina.bin? O estando compilada sirve?
Deje el código por si alguien la quería modificar o ver como es. Pero si insertás con el editor hexadecimal la rutina compilada que deje en el post principal, debería funcionar. O sea, compilarla (hacer el rutina.bin), sin modificaciones, te va dar lo mismo que puse yo.
 

Kaiser de Emperana

Called in hand
@旅団.Markuzz Kaizuka estaba teniendo unos problemas modificando el menú, así que me pidió ayuda.

El quería cambiar la opción de POKEDEX. El problema que ocurre es que al seleccionarse una opción del menú distinta de RETIRE, EXIT o SAVE. El juego oscurece la pantalla. ¿Por qué? Porque todas las demás opciones abren algun tipo de menú, el jugador deja de estar en el mapa.
Pero para el caso de un script necesitamos que la pantalla se quede como está, así que debemos modificar la funcion que oscurece la pantalla.

Lo que voy a mostrar sirve tanto para fire red como para rojo fuego. Para emerald y ruby habría que hacer unas rutinas diferentes, si alguien la necesita que avise.
(Por cierto, @♠Subzero♠ posteó esto para el usar el hack en rojo fuego. Aunque se equivocó en el orden de reamplazo de YYYYYY y ZZZZZZ, a ver si lo arregla)

Pero bueno además de la rutina principal, hay que insertar dos más:

Modifiquen esta rutina según sea su situación. En la primera línea, modifiquen la cantidad de opciones del menú que no deben oscurecer la pantalla.
Y al final de la rutina, agreguen los punteros a esas funciones. Tal y como está la rutina ahora, funcina igual que la original del juego. Si quieren agregar una función más deberías cambar el 3 por 4 y agregar un puntero al final.

Código:
.equ opts_quantity, 3


.thumb
.align 2

main:
	mov r2, #0
	ldr r0, selected_option_func
	ldr r0, [r0]
	mov r3, pc
	add r3, r3, #(menu_options_array - pc_value)
pc_value:

loop:
	ldr r1, [r3]
	cmp r1, r0
	beq return_0
	add r2, r2, #1
	add r3, r3, #4
	cmp r2, #opts_quantity
	bne loop
	mov r0, #1
	b return

return_0:
	mov r0, #0
return:
	bx lr

.align 2
selected_option_func:
	.word 0x020370f0

menu_options_array:
	.word 0x0806f4e9	@ Save 
	.word 0x0806f541	@ Exit 
	.word 0x0806f555	@ Retire
Esos son los offsets de fire red. Para rojo fuego cambiarlos por:
Código:
menu_options_array:
	.word 0x0806f521	@ Save
	.word 0x0806f579	@ Exit
	.word 0x0806f58d	@ Retire
Una vez compilada esta rutina, insertenla en cualquier offset terminado en 0, 4, 8 o C.

Luego modifiquen esta rutina tal que 0x08XXXXXX sea el puntero a la rutina anterior +1.
Código:
.thumb
.align 2


main:
	push {lr}
	ldr r0, is_in_array_routine
	b jump
	nop

is_in_array_routine:
.word 0x08XXXXXX

bx_r0:
	bx r0
	nop

jump:
	bl bx_r0
	cmp r0, #0
	beq (. + 0xe)
Compílenla y dependiendo de su rom, insertenla donde corresponda:
Fire Red: 0x6f394
Rojo Fuego: 0x6f3cc

Y con eso está, si la rutina está bien insertada, no debería de oscurecer la pantalla al selecionar alguna de las nuevas opciones.

Por cierto, por si a alguien le interesa. La rutina original que postee da lástima. Pueden usar esta, que ocupa menos y puede insertarse en cualquier offset terminado en 0, 4, 8 o C. No sólo en offsets terminados en dos ceros.
Código:
.align 2
.thumb

main:
	push {lr}
	ldr r1, RUTINA_EXIT
	bl bx_r1

	ldr r0, SCRIPT_ADRESS
	ldr r1, SCRIPT_EXECUTER
	bl bx_r1
	mov r0, #1
	pop {pc}

bx_r1:	
	bx r1

.align 2
SCRIPT_ADRESS: 
.word 0x08XXXXXX
RUTINA_EXIT:
.word 0x08YYYYYY
SCRIPT_EXECUTER: 
.word 0x08ZZZZZZ
Saludos.
 
Última edición:

CompuMax

Discord: CompuMax#0425
Miembro insignia
Respuesta: Re: GBA | ASM | Menú con funciones personalizadas

Muy interesante. Pero si lo que deseo es oscurecer la pantalla antes de ejecutar una rutina, tal cual como ocurre al entrar a la mochila o a la pokedex. Es decir, lo que deseo es salir del sistema de mapas ¿Cómo haría en ese caso? y si es posible ¿Cómo volver a él? aunque podría hacer un warp de ser necesario :D
 

Kaiser de Emperana

Called in hand
Re: Respuesta: Re: GBA | ASM | Menú con funciones personalizadas

Muy interesante. Pero si lo que deseo es oscurecer la pantalla antes de ejecutar una rutina, tal cual como ocurre al entrar a la mochila o a la pokedex. Es decir, lo que deseo es salir del sistema de mapas ¿Cómo haría en ese caso? y si es posible ¿Cómo volver a él? aunque podría hacer un warp de ser necesario :D
Una forma de hacerlo en FR sería:
- Para oscurecer la pantalla llamás a 0x08070588, a la cual le tendrías que pasar los parámetros: (-1, 0, 0, 16, 0)
- Luego, tendrías que llamar a 0x80563f0, para liberar la memoria que ocupan los tilesets.
- Cambiar el callback de retorno (puntero almacenado en 0x3005020) a la función 0x807dd24.
- Cambiar el callback 2 con la función 0x08000544, pasándole como parámetro tu rutina principal (la que quieras que se ejecute constantemente).

- Y por último, para volver tenés que cambiar el callback 2 para que apunte a la rutina de 0x080567dc.

Eso sería algo así como una base. Dependiendo de lo que quieras hacer tal vez haya que hacer algo más.

Como siempre, te recomiendo que aprendas C y mires el código por tu cuenta. Te sería mucho más útil para aprender como funciona el engine, en lugar de tener que estar haciendo prueba y error con una lista de rutinas que te pasen.
 
Respuesta: GBA | ASM | Menú con funciones personalizadas

una pregunta como se hace cuando es un dialogo ya q cuando entro en offset y guardo voy al juego y algunas palabras claves como el color de tinta o el nombre de jugador aparecen como diagolo dificultando el entendimiento
 

Kaiser de Emperana

Called in hand
Re: Respuesta: GBA | ASM | Menú con funciones personalizadas

una pregunta como se hace cuando es un dialogo ya q cuando entro en offset y guardo voy al juego y algunas palabras claves como el color de tinta o el nombre de jugador aparecen como diagolo dificultando el entendimiento
¿Podrías explicarme un poco mejor? No entiendo a que te referís con que sea un "diálogo", ni que cosa es ese diálogo.
 

Acosta

The Wolf~
Respuesta: GBA | ASM | Menú con funciones personalizadas

Un excelente aporte, algo complicado de usar, pero de todos modos sirve.

¡Muchas gracias y saludos!
 

Ryurs

Usuario de oro
@旅団.Markuzz Kaizuka estaba teniendo unos problemas modificando el menú, así que me pidió ayuda.

El quería cambiar la opción de POKEDEX. El problema que ocurre es que al seleccionarse una opción del menú distinta de RETIRE, EXIT o SAVE. El juego oscurece la pantalla. ¿Por qué? Porque todas las demás opciones abren algun tipo de menú, el jugador deja de estar en el mapa.
Pero para el caso de un script necesitamos que la pantalla se quede como está, así que debemos modificar la funcion que oscurece la pantalla.

Lo que voy a mostrar sirve tanto para fire red como para rojo fuego. Para emerald y ruby habría que hacer unas rutinas diferentes, si alguien la necesita que avise.
(Por cierto, @♠Subzero♠ posteó esto para el usar el hack en rojo fuego. Aunque se equivocó en el orden de reamplazo de YYYYYY y ZZZZZZ, a ver si lo arregla)

Pero bueno además de la rutina principal, hay que insertar dos más:

Modifiquen esta rutina según sea su situación. En la primera línea, modifiquen la cantidad de opciones del menú que no deben oscurecer la pantalla.
Y al final de la rutina, agreguen los punteros a esas funciones. Tal y como está la rutina ahora, funcina igual que la original del juego. Si quieren agregar una función más deberías cambar el 3 por 4 y agregar un puntero al final.

Código:
.equ opts_quantity, 3


.thumb
.align 2

main:
    mov r2, #0
    ldr r0, selected_option_func
    ldr r0, [r0]
    mov r3, pc
    add r3, r3, #(menu_options_array - pc_value)
pc_value:

loop:
    ldr r1, [r3]
    cmp r1, r0
    beq return_0
    add r2, r2, #1
    add r3, r3, #4
    cmp r2, #opts_quantity
    bne loop
    mov r0, #1
    b return

return_0:
    mov r0, #0
return:
    bx lr

.align 2
selected_option_func:
    .word 0x020370f0

menu_options_array:
    .word 0x0806f4e9    @ Save
    .word 0x0806f541    @ Exit
    .word 0x0806f555    @ Retire
Esos son los offsets de fire red. Para rojo fuego cambiarlos por:
Código:
menu_options_array:
    .word 0x0806f521    @ Save
    .word 0x0806f579    @ Exit
    .word 0x0806f58d    @ Retire
Una vez compilada esta rutina, insertenla en cualquier offset terminado en 0, 4, 8 o C.

Luego modifiquen esta rutina tal que 0x08XXXXXX sea el puntero a la rutina anterior +1.
Código:
.thumb
.align 2


main:
    push {lr}
    ldr r0, is_in_array_routine
    b jump
    nop

is_in_array_routine:
.word 0x08XXXXXX

bx_r0:
    bx r0
    nop

jump:
    bl bx_r0
    cmp r0, #0
    beq (. + 0xe)
Compílenla y dependiendo de su rom, insertenla donde corresponda:

Y con eso está, si la rutina está bien insertada, no debería de oscurecer la pantalla al selecionar alguna de las nuevas opciones.

Por cierto, por si a alguien le interesa. La rutina original que postee da lástima. Pueden usar esta, que ocupa menos y puede insertarse en cualquier offset terminado en 0, 4, 8 o C. No sólo en offsets terminados en dos ceros.
Código:
.align 2
.thumb

main:
    push {lr}
    ldr r1, RUTINA_EXIT
    bl bx_r1

    ldr r0, SCRIPT_ADRESS
    ldr r1, SCRIPT_EXECUTER
    bl bx_r1
    mov r0, #1
    pop {pc}

bx_r1:   
    bx r1

.align 2
SCRIPT_ADRESS:
.word 0x08XXXXXX
RUTINA_EXIT:
.word 0x08YYYYYY
SCRIPT_EXECUTER:
.word 0x08ZZZZZZ
Saludos.
He intentado conseguir esto para que no salga la pantalla en negro, pero para la rom de esmeralda.

No he sido capaz de encontrar las compensaciones necesarias para esmeralda de estas 2 cosas que expones en tu post:
020370F0 sStartMenuCallback (en firered)
0806F394 StartMenu_FadeScreenIfLeavingOverworld (en firered)

¿Alguien puede echarme una mano?
 

jotana241

Usuario de plata
Bueno, antes que nada quiero aclarar que yo no soy el el que diseñó este sistema, yo solo usé unos offset que encontré por ahí y adapté una rutina de ASM de Sonicarvalho posteada en este foro (cosa que sólo pude hacer gracias a la ayuda de eing y cosarara xD).

La rutina de Sonicarvalho la pueden encontrar aquí. Ésta consiste en ejecutar scripts desde rutinas ASM, el problema es que unicamente funciona desde el overworld, por lo que la preparé para que pueda ser llamada desde el menú.


Bueno, para este tutorial necesitan:
- XSE.
- Un editor hexadecimal, yo recomiendo Hex Workshop o HxD.
- Conocimientos básicos de hex (buscar offsets, copiar, pegar, etc.).

Bueno, comencemos.

Introducción
Bueno, como saben al presionar el boton Enter, se abre un menú alineado a la derecha (Pokedex, Pokemon, Mochila, etc.). Este menú tiene 7 funciones en fire red y 8 funciones en ruby y emerald. Todas son muy importantes menos una, la función EXIT, que puede ser ejecutada simplemente presionando el boton B.
Nuestro objetivo es remplazar esa función por una diferente, pero programar una función nueva es algo bastante dificil, al menos para gente como yo xD. Por eso vamos a usar la rutina que nos dejó Sonicarvalho, que permite ejecutar scripts "normales" (los del XSE) desde una rutina ASM.
El problema está en que la rutina de Sonicarvalho no funciona desde el menú, por eso modifiqué levemente la función para que antes de ejecutarse ésta cierre el menú.

Insertando los texto
Bueno, eso de cambiar la función suena bien, pero quedaría muy mal si tenemos que apretar un botón que diga EXIT. Para eso vamos a usar XSE.

Abrimos el XSE, y desde éste abrimos nuestro rom. Allí ponemos nuestro texto, yo voy a poner algo así:
Código:
#DYNAMIC 0x800000

#org @TextoDelMenu
= BAILAR
Compilamos y anotamos en algún lado el offset que nos dio.

En fire red el menú tiene una descripción de lo que hace cada función, por eso también debemos insertar un texto para esto. Tengan en cuenta que no puede pasar las 2 líneas o sino no se verá. Yo voy a usar este:
Código:
#DYNAMIC 0x800000

#org @Descripcion
= Al seleccionar esta opción,\nrealizarás unos pasos de baile.
Nuevamente compilamos y anotamos el offset.

Insertando nuestro script
Bueno, ahora toca insertar el script que queremos que se ejecute cuando apretemos el botón. Lo haremos nuevamente en XSE, yo voy a usar este script:
Código:
#DYNAMIC 0x800000

#org @inicio
lockall
applymovement 0xFF @mov1
waitmovement 0xFF
msgbox @frase1 0x6
applymovement 0xFF @mov2
waitmovement 0xFF
msgbox @frase2 0x6
releaseall
end

#org @frase1
= ¡A bailar!

#org @frase2
= ¡Aww yeah!

#org @mov1
#raw 0x0 'Mirar Abajo
#raw 0xFE 'Finalizar Movimientos

#org @mov2
#raw 0x1A 'Esperar 3
#raw 0x2 'Mirar Izquierda
#raw 0x18 'Esperar 1
#raw 0x3 'Mirar Derecha
#raw 0x18 'Esperar 1
#raw 0x2 'Mirar Izquierda
#raw 0x18 'Esperar 1
#raw 0x3 'Mirar Derecha
#raw 0x18 'Esperar 1
#raw 0x6 'Mirar Izquierda (Rápido)
#raw 0x18 'Esperar 1
#raw 0x7 'Mirar Derecha (Rápido)
#raw 0x18 'Esperar 1
#raw 0x6 'Mirar Izquierda (Rápido)
#raw 0x18 'Esperar 1
#raw 0x3 'Mirar Derecha
#raw 0x18 'Esperar 1
#raw 0x6 'Mirar Izquierda (Rápido)
#raw 0x18 'Esperar 1
#raw 0x7 'Mirar Derecha (Rápido)
#raw 0x18 'Esperar 1
#raw 0x54 'Saltar en el Lugar (Mirando Izquierda)
#raw 0x18 'Esperar 1
#raw 0x55 'Saltar en el Lugar (Mirando Derecha)
#raw 0x18 'Esperar 1
#raw 0x0 'Mirar Abajo
#raw 0x18 'Esperar 1
#raw 0x66 'Feliz (^_^)
#raw 0x18 'Esperar 1
#raw 0xFE 'Finalizar Movimientos
Compilamos y anotamos el offset.

Insertando la rutina ASM
Bueno lo que sigue es abrir el editor hexadecimal y desde este nuestro rom.

Bueno escribo esto para los que no estén muy familiarizados con la rom, para que no sólo copien al pie de la letra lo que digo, sino que entiendan algo xD
Empecemos con algo muy básico. El editor hexadecimal muestra todos los datos de nuestra rom. El editor trabaja en Bytes (en algunos lados pueden leer que trabaja de a 8bits, eso es porque 1Byte es igual a 8bits), o sea divide todos los datos en grupos de dos caracteres hexadecimales. A cada uno de esos Bytes les asigna un número para identificarlos (offset). El Byte 1 está en el offset 00000000 (también conocido como 0 xD, le pongo 6 dígitos porque así es como trabaja el rom). El Byte 2 en 000001, el 15 en 00000F, el 25487 en 00638E. Siempre el número en hexadecimal -1.

Bueno, empecemos con las cosas que vamos a modificar. Como dije antes, el editor nos muestra todos los datos, pero entender que significa cada cosa es algo inhumano. No podemos saber a simple vista que hay en cada offset, pero gracias a investigaciones de otras personas y a los datos que nos dan las herramientas que usamos, podemos saber donde se encuentran algunas cosas. Por ejemplo, gracias al XSE sabemos donde están guardados los textos y el script que insertamos. Pero eso lo sabemos nosotros, estos datos están en el rom pero actualmente no hay nada que haga que el rom los lea, sólo están ahí. Por eso hay que modificar unos punteros.
Los punteros son un conjunto de 4 Bytes que tienen escrita la dirección del offset al que están llamando, pero tiene el offset permutado. ¿Qué es permutado? Es que tiene los Bytes en el orden opuesto, por ejemplo:
Offset:061578 Puntero llevando al offset:78150608
Offset:7F5C14 Puntero llevando al offset:145C7F08
Offset:125A28 Puntero llevando al offset:285A1208

Ahora la duda que supongo tendrán todos es ¿Pero que car*jo es ese 08 del final? Bueno hace un rato le dije que el rom trabaja los offset con 6 dígitos, pero eso no es completamente verdad. En el editor hexadecimal vemos toda la memoria ROM del juego, pero cuando un emulador o una consola reproduce el rom éstos generan unas 8 memorias más. Estas serían (no le voy a decir los nombres porque trabajar con esto ya es algo más avanzado que no necesitan saber):
La que va de 00000000 hasta 00FFFFFF
La que va de 01000000 hasta 01FFFFFF
La que va de 02000000 hasta 02FFFFFF
La que va de 03000000 hasta 03FFFFFF
La que va de 04000000 hasta 04FFFFFF
La que va de 05000000 hasta 05FFFFFF
La que va de 06000000 hasta 06FFFFFF
La que va de 07000000 hasta 07FFFFFF

Y la memoria rom es la que vemos con el editor hexadecimal, que aunque éste diga que un offset se llama 00F51487, al estar el juego emulándose se llama 08F51487.
La memoria rom va desde 08000000 hasta 08FFFFFF. Y para aquellos que hayan expandido su rom, tendrán también una segunda memoria rom que va desde 09000000 hasta 09FFFFFF.

Y bueno, eso sería un poco de la organización de la rom, lo que vamos a hacer en los próximos pasos del tutorial es cambiar algunos punteros.

En el editor tenemos que buscar un espacio vacío de 44 Bytes o más (pueden usar FSF, no es necesario) y allí debemos pegar nuestra rutina. OJO, tienen que pegarla en un offset que termine en 0000, ejemplo 840000 (la verdad que desconozco la razón de ésto, usualmente se debe pegar la rutina en un offset cuyo último dígito sea 0, 4, 8 o C pero con ésta rutina por alguna razón sólo pude hacerla funcionar en offset como 800000; seguramente se pueda pegar en alguna parte diferente pero como no lo se, recomiendo hacer ésto). Otra advertencia, tiene que remplazar los datos, no insertar.

MIRAR EL FINAL DE ESTE POST
Código:
.align 2
.thumb

Main:
    push {r0,lr}
    bl CERRAR_MENU
    bl RUTINASONICARVALHO
    pop {r0,pc}

CERRAR_MENU:
    ldr r0, RUTINA_EXIT
    bx r0

RUTINASONICARVALHO:
    push {lr}
    ldr r0, SCRIPT_ADRESS
    bl SCRIPT_ROUTINE
    pop {pc}

SCRIPT_ROUTINE:
    ldr r1, SCRIPT_EXECUTER
    bx r1

.align 2

RUTINA_EXIT:
    .word 0x08YYYYYY
SCRIPT_ADRESS:
    .word 0x08XXXXXX
SCRIPT_EXECUTER:
    .word 0x08ZZZZZZ

Nuevamente anotamos el offset y pasamos al siguiente paso.

Modificando Punteros
Bueno, ya les expliqué que son los punteros y como funcionan ahora vamos a sobre escribirlos. Yo voy a trabajar en fr así que voy a ir poniendo sus punteros, al final de la explicación dejo los de ruby y emerald.
Primero, para los que hayan copiado y pegado la rutina ya compilada, hay un puntero que dice 77777708, allí tienen que modificarlo para que guíe a su script. Ya saben, si su script está en 800514, ponen 14058008.

Después nos vamos a donde están los punteros del EXIT de menú. Para eso vayan al offset 3A7374. Allí van a tener una estructura así: XXXXXX08YYYYYY08.
El primer puntero indica el texto que muestra en el menú. Así que modifican el puntero para el texto que insertamos primero.
El segundo puntero indica la función que tiene el botón. Alli tenemos que poner permutada la dirección donde insertamos la rutina +1. Si la insertamos en 81F54C. Ponemos 4DF58108.

Después nos vamos a otro puntero que lleva también a la función original del EXIT. Este se encuentra en 06F3C4. Allí ponemos exactamente lo mismo que antes.

El puntero para la descripción del botón, está en 3A73AC.
Supongo que ya saben que hacer.



¡A probar!
Eso es todo ahora a abrir su rom y a probar lo que hicimos:


Bueno como ven, yo hice un script totalmente inútil que no ayuda en nada xD. Pero era solo una demostración, lo que hagan se los dejo a su imaginación, podrían hacer cualquier tipo de cosa, como un celular, un mapa en el menú, etc.

Como ven remplazando el EXIT la función nueva quedaría en el el último lugar del menú. Pero al igual que modificamos esto se pueden modificar todas las funciones, si cambiamos algunos punteros de lugar podemos cambiar fácilmente el órden en que se muestra el menú.

Les explico la estructura de como esta guardado. Todas las opciones tienen el mismo sistema, [puntero texto][puntero función], y además están en órden: [texto1][función1],[texto2][función2],[texto3][función3]...
Con ésto ya pueden saber como modificar los punteros. Y para ahorrarles es trabajo, los punteros del menú empiezan en:
Fire Red: 3A7344
Emerald: 510540
Ruby: 376d24

Unas advertencias. La pokedex, pokemon y pokenav deben ser activadas por flags, así que probablemente van a tener que pensar algunas cosas más si modifican éstos. Y en fire red, las opciones tiene descripciones, así que si cambian el orden éstas van a quedar desordenada (No es un problema la verdad, si total tienen que traducirlas xD).
MIRAR ESTE POST

Bueno ahora los Créditos:
Sonicarvalho, por la rutina original.
knizz y FBI agent, por los offsets del menú.

Bueno eso es todo, espero ver hacks con menús personalizados ^^.
Suerte.

---------------------------------
Y para los que quieran un ips... (es para ver en un rom en blanco, no se les ocurra parchear un hack xD).
una pregunta no se puede consultar el pc desde el menu ?
 
Arriba