Revivo este tema con las .ini de Rojo Fuego y Esmeralda para Gen 3 Tools 2.9.1
Poner los .ini en la carpeta "Roms Data"
ROJO FUEGO BPRS BPRS.ini
INI:
##########################################################
######################## READ ME #########################
##########################################################
# The symbol @ means that the offset is read dynamically from the ROM.
# Which means that even if you repointed a data, G3T will be able to find the new pointer without having you update this file, except if you did some extremely advanced ASM hacking. (Which is very rare even in the most heavily ASM hacked ROMs)
# You can still edit the offsets to make G3T go directly to the data's offset, like in most of the tools.
# You will still need to edit this file if you changed a table or a data's size. (Such as NumberOfMoves f.e.)
# Exemples of how to edit MoveData properly for an untouched English Fire Red ROM:
# - "MoveData=@1CC" (dynamic offset)
# - "MoveData=&H250C04" (direct offset, in hexadecimal)
# - "MoveData=2427908" (direct offset, in decimal)
##########################################################
######################## READ ME #########################
##########################################################
[GENERAL]
ROMCode=BPRS
ROMName=Pokémon Rojo Fuego (Español)
[MOVE]
NumberOfMoves=354
----------------------------------------------------------
SoundBasedMoves=@1A5EC
MoveAnimationTable=@72608
MoveDescriptionTable=@E574C
MoveData=@1CC
MoveNames=@148
[ITEM]
IndexOfFirstTM=289
NumberOfHMs=8
NumberOfItems=374
NumberOfTMs=100
----------------------------------------------------------
TMData=@125C08
ItemIMGData=@98B74
ItemData=@1C8
[ABILITY]
NumberOfAbilities=77
----------------------------------------------------------
AbilityDescriptionTable=@1C4
AbilityNames=@1C0
[POKEMON]
NumberOfPokemon=411
NumberOfMoveTutors=15
NumberOfMaxEvolutions=5
----------------------------------------------------------
PokemonShinyPal=@134
DexDataTable=@88FEC
PokemonNormalPal=@130
PokemonBackSprites=@12C
PokemonFrontSprites=@128
MoveTutorCompatibility=@120D90
TMHMCompatibility=@43B54
PokemonEvolutions=@42E58
PokemonMoveTable=@3E968
PokemonNames=@144
MoveTutorData=@120D44
PokemonData=@1BC
[TRAINER]
NumberOfTrainers=742
NumberOfTrainerImages=147
NumberOfClassNames=107
----------------------------------------------------------
TrainerPaletteTable=@34638
TrainerImageTable=@34628
ClassMoneyLocation=@2593C
ClassNamesLocation=@D7BF4
TrainerData=@FB70
[MISC]
SizeOfBattleText=247
SizeOfPCText=325
SizeOfNatureNames=162
----------------------------------------------------------
BattleText=@32B24
PCText=@3CE6F4
NatureNames=@45E4E4
ESMERALDA BPES
BPES.ini
INI:
##########################################################
######################## READ ME #########################
##########################################################
# The symbol @ means that the offset is read dynamically from the ROM.
# Which means that even if you repointed a data, G3T will be able to find the new pointer without having you update this file, except if you did some extremely advanced ASM hacking. (Which is very rare even in the most heavily ASM hacked ROMs)
# You can still edit the offsets to make G3T go directly to the data's offset, like in most of the tools.
# You will still need to edit this file if you changed a table or a data's size. (Such as NumberOfMoves f.e.)
# Exemples of how to edit MoveData properly for an untouched English Fire Red ROM:
# - "MoveData=@1CC" (dynamic offset)
# - "MoveData=&H250C04" (direct offset, in hexadecimal)
# - "MoveData=2427908" (direct offset, in decimal)
##########################################################
######################## READ ME #########################
##########################################################
[GENERAL]
ROMCode=BPES
ROMName=Pokémon Esmeralda (Español)
[MOVE]
NumberOfContestEffects=47
NumberOfMoves=354
----------------------------------------------------------
SoundBasedMoves=&HE4D424
ContestDescriptionTable=@DB12C
ContestMoveEffectData=@DAF6C
ContestMoveData=@D8248
MoveAnimationTable=@A3A58
MoveDescriptionTable=@1C3B1C
MoveData=@1CC
MoveNames=@148
[ITEM]
IndexOfFirstTM=289
NumberOfHMs=8
NumberOfItems=376
NumberOfTMs=50
----------------------------------------------------------
TMData=@1B6930
ItemIMGData=@1AFC54
ItemData=@1C8
[ABILITY]
NumberOfAbilities=77
----------------------------------------------------------
AbilityDescriptionTable=@1C4
AbilityNames=@1C0
[POKEMON]
NumberOfPokemon=411
NumberOfMaxEvolutions=5
----------------------------------------------------------
PokemonAnimations=@128
PokemonShinyPal=@134
PokemonNormalPal=@130
PokemonBackSprites=@12C
PokemonFrontSprites=@2CAE0
MoveTutorCompatibility=@1B1FB0
TMHMCompatibility=@6E048
PokemonEvolutions=@6D140
PokemonMoveTable=@6930C
PokemonNames=@144
PokemonData=@1BC
[TRAINER]
NumberOfTrainers=742
NumberOfTrainerImages=92
NumberOfClassNames=66
----------------------------------------------------------
TrainerPaletteTable=@5DF80
TrainerImageTable=@5DF78
ClassMoneyLocation=@4E6A8
ClassNamesLocation=@183B4
TrainerData=@3587C
[MISC]
SizeOfBattleText=295
SizeOfPCText=356
SizeOfNatureNames=162
----------------------------------------------------------
BattleText=@16A228
PCText=@57E55C
NatureNames=@61F46C
Hola. Muy buenas las aportaciones sobre direcciones. Por qué no compilan todo en el post principal? Ánimo y suerte. Me gustaría a mi también probar levemente, aunque sea hacer un minihack en español. Lo que no he investigado la cantidad de espacio libre presente en el rom de RF o Rby... Bueno, buen día!
Hola. Muy buenas las aportaciones sobre direcciones. Por qué no compilan todo en el post principal? Ánimo y suerte. Me gustaría a mi también probar levemente, aunque sea hacer un minihack en español. Lo que no he investigado la cantidad de espacio libre presente en el rom de RF o Rby... Bueno, buen día!
Quisiera hacer mi aporte de investigación, localice casi por completo todos los localizadores de BPES para PGE (excepto NumberOfTilesInTilset); Ya pueden editar el orden de pokedex (tanto regional como nacional) a su gusto; Además les agrego la ubicación donde se define la cantidad de Pokémon en la pokedex regional (tanto la versión inglesa como española):
##########################################################
######################## READ ME #########################
##########################################################
# The symbol @ means that the offset is read dynamically from the ROM.
# Which means that even if you repointed a data, G3T will be able to find the new pointer without having you update this file, except if you did some extremely advanced ASM hacking. (Which is very rare even in the most heavily ASM hacked ROMs)
# You can still edit the offsets to make G3T go directly to the data's offset, like in most of the tools.
# You will still need to edit this file if you changed a table or a data's size. (Such as NumberOfMoves f.e.)
# Exemples of how to edit MoveData properly for an untouched English Fire Red ROM:
# - "MoveData=@1CC" (dynamic offset)
# - "MoveData=&H250C04" (direct offset, in hexadecimal)
# - "MoveData=2427908" (direct offset, in decimal)
##########################################################
######################## READ ME #########################
##########################################################
The format for this file is simple.
It is just a rom code followed by a list of pointers that need to be repointed if the size is bigger...
[ROM Code]=[pointer1,pointer2,...,pointerN]
Then it is ended by "eof" and everything after that is not read.
The second set of offsets is for type names.
HTE (que chulada de herramienta, casi no tuve editar nada, solo validar)
; Pokémon Esmeralda (Español)
[pokemon]
Count=412
Names=0x144
Ahora viene lo fuerte, después de una minado muy profundo logre que G3HS pueda leer BPES, es decir, que ya es posible agregar nuevos metodos de evolution (acabo de testear y jala al 100).
Afortunadamente la versión inglesa y española comparten los mismos localizadores (pointer), excepto la tabla Pokémon (luego les explico que show con ella) para la rutina para evolucionar si es macho, si es hembra o por movimiento.
Para ahorrarme la molestia de redactar como hacerlo paso por paso, usare la explicación textual de nuestro buen amigo Naren Jr. pero modificando los valores acorde al PBES y una que otra aclaración.
Para hacer este sistema deberemos expandir nuestra tabla de evoluciones, esta se encuentra en la dirección 0x6D198 y estando en esta dirección vamos a copiar 3C byte de longitud.
Al tenerle copiado vamos a buscar espacio libre donde colocarle, yo lo haré en E3D000, nos vamos a la dirección que escogieron, selecciona 3C byte de longitud y la pegan con Crtl+B.
Ahora vamos a ir a la dirección 0x6D194 donde se encuentra el viejo puntero de la tabla que acabamos de expandir (4 byte de longitud), aquí colocaremos nuestro nuevo offset permutado, en mi caso sería colocar 00 D0 E3 08; Cuando se dice permutado se agrega de esta manera: se inicia con el ultimo par byte de 0xE3D000, luego el segundo par de 0xE3D000, posterior el primer par byte de 0xE3D000 y se termina con 08 para indicar que es un pointer. Recuerden seleccionar 4 byte de longitud y posterior pegar.
Ahora vamos a ir a esta dirección 0x06D180 donde modificaremos el límite de métodos de evoluciones que permite el juego; En esta generación el limite son 14=0E (hexadecimal), como vamos agregar 3 nuevos métodos lo vamos aumentar a 17=11 (hexadecimal)
Lo que haremos ahora será meter las rutinas (hembra, macho, y Por movimiento):
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrb r2, [r3, #0x2]
mov r0, r8
bl decrypt2
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
blt exit
mov r0, r8
mov r1, #0xFF
ldr r0, [r0, #0x0]
and r1, r0
mov r0, r8
bl decrypt
mov r11, r0
pop {r0-r7}
mov r5, r11
ldr r2, pokemondata
mov r4, #0x1C
mul r5, r4
add r5, r5, r2
ldrb r5, [r5, #0x10]
cmp r1, r5
bge exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit: pop {r0-r7}
ldr r0, noevo
bx r0
decrypt: push {r0-r7}
mov r1, #0xB
ldr r2, decryptpoke
bx r2
decrypt2: push {r0-r7}
mov r1, #0x38
ldr r2, decryptpoke
bx r2
.align
levelcheckloc: .word 0x0806D32F
noevo: .word 0x0806D333
decryptpoke: .word 0x0806A519
pokemondata: .word 0x08326688
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrb r2, [r3, #0x2]
mov r0, r8
bl decrypt2
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
blt exit
mov r0, r8
mov r1, #0xFF
ldr r0, [r0, #0x0]
and r1, r0
mov r0, r8
bl decrypt
mov r11, r0
pop {r0-r7}
mov r5, r11
ldr r2, pokemondata
mov r4, #0x1C
mul r5, r4
add r5, r5, r2
ldrb r5, [r5, #0x10]
cmp r1, r5
blt exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit: pop {r0-r7}
ldr r0, noevo
bx r0
decrypt: push {r0-r7}
mov r1, #0xB
ldr r2, decryptpoke
bx r2
decrypt2: push {r0-r7}
mov r1, #0x38
ldr r2, decryptpoke
bx r2
.align
levelcheckloc: .word 0x0806D32F
noevo: .word 0x0806D333
decryptpoke: .word 0x0806A519
pokemondata: .word 0x08326688
.text
.align 2
.thumb
.thumb_func
.global Evomove
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
mov r5, #0x0
loop:
mov r1, #0xD
add r1, r1, r5
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
beq true
cmp r5, #0x3
beq exit
add r5, #0x1
b loop
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
true:
mov r9, r3
pop {r0-r7}
mov r1, r9
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x0806D32F
noevo: .word 0x0806D333
decryptpoke: .word 0x0806A519DC
Si expandieron su tabla de pokemon hay que modificar la última línea para la rutina macho y hembra, ejemplo: La pokemondata de la versión inglesa y española no comparten la misma direccion.
Ahora lo colocaremos en nuestra ROM, el offset que quieran yo lo insertaré en 0xE3D050 (Female), 0xE3D0D0 (Male) y 0xE3D150 (Move); No olviden primero seleccionar la longitud de bytes que tiene cada rutina y posterior pegar.
Ahora lo último que queda hacer es tomar esas direcciones 0xE3D050 (Female), 0xE3D0D0 (Male) y 0xE3D150 (Move) y permutarlas: En mi caso son: 50 D0 E3 08 (Female), D0 D0 E3 08 (Male), 50 D1 E3 08 (Move) y la insertaremos en la tabla que expandimos (En mi caso es 0xE3D000); Les recuerdo seleccionar la longitud de los byte necesarios (en este caso C bytes) y posterior pegar.
Y guardamos, ya después de esto no será necesario seguir con el HxD abierto.
Lo siguiente que haremos será abrir nuestro hack con GenIII Suit (G3HS) y esperar que nos cree nuestra ini (Para los despistados Gen Suit marca tu rom en el Offset FFFFFC colocando una numeración, para cuando abras la ini del programa sepas cuales datos son los tuyos.) una vez que ya este enumerado nuestro rom, abramos PokeRoms.ini y busquemos una enumeración que tenga BPES, posterior buscar evolutionmethods y evomethodsproperties:
En evolutionmethods vamos agregar el método evolución si es hembra, macho y por movimiento, se inicia primero con la Female porque fue la primera que agregamos en nuestra nueva tabla método evolutivo, posterior Male y por últimos Move
En evomethodsproperties vamos agregar la propiedad de evolución: Level (por subir de nivel), Item (por objeto), None (ahí sí ni idea), Move (por movimiento), Pokemon (podría suponer pero no estoy seguro), Location (ubicación); En este caso será ,Level,Level,Move
NOTA INFORMATIVA:
Si cambiaron el número de evoluciones por POKéMON usando G3HS, además de modificar la ubicación de la nueva tabla de Pokémon en la rutina Female y Male, hay que editar la rutina ya compilada según el numero de evolución por POKéMON:
8 evolutiones por POKéMON: Cambia F0 19 por 70 00
16 evolutiones por POKéMON: Cambia F0 19 por B0 00
32 evolutiones por POKéMON: Cambia F0 19 por F0 00
Aun no he testeado con el numero de evoluciones aumentado, pero la versión ingles así se modifica; Ahí me comenta si tuvieron éxito
Saludos y animo para hacer un ROM Hacks 100% en español.
Vamos con todo mi gente, ahora les voy a explicar cómo agregar el tipo Hada para la versión BPES , usando como referencia la explicación del buen amigo Jaizu; Anexo su link de explicación:
Aviso: Las imágenes no están redimensionadas. Para verlas en tamaño completo copiar la dirección la imagen o pusla Click Derecho > Ver imagen. Se autoajustan al diseño del foro para que no se deforme el tema. Créditos a MrDollSteak por todos los datos y tutorial original, el cual podéis...
whackahack.com
Cosas necesarias:
Una rom de Emerald
Un editor HEX, muy recomendablemente HxD
unLZ-GBA
NSE 2.X
Paint XP
¡ATENCION!
No voy agregar un nuevo tipo, sino más bien voy a sustituir el tipo (?); ¿Por qué? Primero y principal razón, no soy bueno en diseño gráfico y me da una señora pereza dominar el tema de las paletas, por eso el color del icono tipo Hada será azul alba marino (se hizo lo que se pudo); Y segundo, recorta bastante el proceso.
Les comparto la imagen que yo edite con el icono tipo HADA ya modificado:
Si quieren editar su propio icono de tipo Hada y jugar con las paletas, les explico como exportar la imagen para su edición y nada mas; Al igual que yo, no domina ese tema, les recomiendo ir al paso importar la imagen usando la imagen que les compartí.
Exportar imagen de icono de tipo: Abrimos el NSE 2.x y vamos a la función Navigate; Para abrirla ponemos el offset 0xD970EC. Hacemos que el width sea 4 y no ponemos nada en Offsets > palette; Hagan su magia (seria editar el icono ? por la palabra HADA y jugar con las paletas), una vez que terminen de editar, solo queda exportar la imagen como Bitmap.
Importar imagen de icono de tipo: Ahora abriremos unlz-gba y cargaremos nuestro ROM. Hay que importar la imagen con Import y posterior Write to Rom (solo debe estar palomeado Export Image). Antes de poner OK, analicen bien donde van localizar la imagen, yo recomiendo una localización con bastante espacio porque después de la imagen, vamos agregar varias tablas expandida a lado; En este tutorial vamos a usar 0xE3D1B0.
NOTA: Sin modificar la dirección Palette Offset
Cerramos el UNL-GBA, apuntamos nuestra dirección de la imagen en cualquier lado, teniendo cuidado de no perderla.
Ahora sigue lo tedioso pero les voy ahorrar mucha paja, abrimos nuestra ROM con un editor HEX, muy recomendado usar HxD.
Solo hay un puntero para la imagen de icono de tipo, lo cual nos facilita mucho las cosas. Nos vamos a la dirección 0x61F8D8 y cambiamos el puntero.
NOTA: Recuerda que los punteros, la dirección siempre esta permutada.
Dirección normal:
XX YY ZZ
Dirección permutada:
ZZ YY XX 08
Ejemplo, el offset en este tutorial es 0xE3D1B0, se modifica el puntero a B0 D1 E3 08.
Y listo, hemos terminado la edición la imagen del icono de tipo (agregar un nuevo tipo son varios paso más que no aplica en este tutorial), ahora sigue modificar la efectividad de los tipos.
Para empezar con ello vamos a la dirección 0x320F4C y seleccionamos 150 byte de longitud o usar Selección de bloque (HxD) de esta manera. Luego pegar en un espacio libre. Es recomendable pegarlos a lado de nuestra imagen para tener una secuencia, en mi caso será 0xE3DC40.
Os explico como leer la tabla de efectividad, hay que dividirla en tres par de bytes: XX YY ZZ
XX=ATACANTE (tipo)
YY=DEFENSOR (tipo)
ZZ=EFECTIVIDAD
Estos son los tipo de efectividad:
00 = Inmune
05 = Poco Efectivo
14 = Muy efectivo
NOTA: Les recuerdo, 09 originalmente seria (?) pero lo sustituimos por el tipo HADA
Si respectamos el canon efectividad actual, seria quitar que tipo acero ya no sea resistente al tipo siniestro y fantasma, es decir, quitar 11 08 05 y 07 08 05; Además de agregar el tipo HADA en la ecuación: contra que es efectivo, resistente, débil o nulo. Si vas aplicar tu juego, tus reglas, es decir crear tu propia tabla de efectividad, solo debes respectar que siempre termine con los bytes FE FE 00 00 07 00 01 07 00 FF FF 00; Si eres curioso, FE FE 00 00 07 00 01 07 00 esta relacionado con la inmunidad de tipo fantasma con los tipos normal y lucha, los anglos recomienda no tocar.
Les voy ahorrar la paja y les comparto como debe quedar:
Ahora que ya tenemos nuestra tabla efectividades expandida listas, solo nos queda repuntar la tabla original por la nuestra; Para ello pulsaremos Control + R. En buscar pondremos el puntero original, que es 4C 0F 32 08 y en Reemplazar por pondremos 40 DC E3 08 si están usando el offset del tutorial, y si no vuestro puntero, les recuerdo debe estar permutado. Le damos a Reemplazar Todo.
Ahora vamos a modificar los nombres de los tipos, al igual que la tabla efectividad, vamos a copiar la tabla de nombre tipo y expandirla; En este caso seria desde la dirección 0x32109C "Selección de bloque" con longitud 80. Y copiamos y lo pegamos a lado de nuestra tabla de efectividad expandida, en mi caso sería 0xE3DDC0.
Ahora les voy a explicar cómo leer y redactar los nombres de tipo.
Cada nombre de tipo tiene 7 par bytes de longitud. Tendremos que modificar (?) por el nombre HADA; Si me pregunta donde esta localizado el nombre tipo 09 en nuestra tabla nombre tipo expandida, usando la ubicación 0xE3DDC0 como referencia seria 0xE3DDFF.
C8 C9 CC C7 BB C6 FF C6 CF BD C2 BB FF 00 D0 C9 C6 BB BE AD FF D0 BF C8 BF C8 C9 FF CE C3 BF CC CC BB FF CC C9 BD BB FF 00 00 BC C3 BD C2 C9 FF 00 C0 BB C8 CE AD FF 00 BB BD BF CC C9 FF 00 C2 BB BE BB FF 00 00 C0 CF BF C1 C9 FF 00 BB C1 CF BB FF 00 00 CA C6 BB C8 CE BB FF BF C6 06 BD CE AD FF CA CD 5A CB AD FF 00 C2 C3 BF C6 C9 FF 00 BE CC BB C1 0E C8 FF CD C3 C8 C3 BF AD FF 00 00
A continuación, vamos a reemplazar, es decir, repuntar la vieja tabla de nombre de tipo (9C 10 32 08) por nuestra tabla (en mi caso C0 DD E3 08).
Casi lo tenemos, solo falta expandir dos tablas; Le toca la tabla 0x2F7968 y selección de bloque con longitud 90 y lo pegamos en espacio libre. En mi caso, a lado de la tabla de nombre tipo expandido, así que usaré el offset 0xE3DE50.
Si la separamos en bloques, siguen esta estructura: 06 DE E3 080A 00 00 00
Los primeros 5 bloques son el puntero (permutado) hacia el nombre de tipo, el 0A es la ID del tipo y el resto son simples 00 que tenemos que respetar.
En este paso es TOTALMENTE opcional pero servirá de referencia si deseas cambiar el nombre de todos los tipos en un futuro; Sencillamente hay que repuntar el nombre de cada tipo de la tabla vieja hacia la tabla nueva (0xE3DDC0).
9C 10 32 08 reemplazar todo por C0 DD E3 08 (NORMAL)
E2 10 32 08 reemplazar todo por 06 DE E3 08 (FUEGO)
E9 10 32 08 reemplazar todo por 0D DE E3 08 (AGUA)
F7 10 32 08 reemplazar todo por 1B DE E3 08 (ELECTRICO)
F0 10 32 08 reemplazar todo por 14 DE E3 08 (PLANTA)
05 11 32 08 reemplazar todo por 29 DE E3 08 (HIELO)
B8 10 32 08 reemplazar todo por DC DD E3 08 (TIERRA)
BF 10 32 08 reemplazar todo por E3 DD E3 08 (ROCA)
AA 10 32 08 reemplazar todo por CE DD E3 08 (VOLADOR)
FE 10 32 08 reemplazar todo por 22 DE E3 08 (PSIQUICO)
A3 10 32 08 reemplazar todo por C7 DD E3 08 (LUCHA)
B1 10 32 08 reemplazar todo por D5 DD E3 08 (VENENO)
C6 10 32 08 reemplazar todo por EA DD E3 08 (BICHO)
CD 10 32 08 reemplazar todo por F1 DD E3 08 (FANTASMA)
0C 11 32 08 reemplazar todo por 30 DE E3 08 (DRAGON)
D4 10 32 08 reemplazar todo por F8 DD E3 08 (ACERO)
13 11 32 08 reemplazar todo por 37 DE E3 08 (SINIESTRO)
Independientemente si desean o no hacerlo, notaran que el nombre del tipo 09 no esta en la tabla original, así que hay que agregarlo, si están usando el offset del tutorial seria así: FF DD E3 08 09 00 00 00
Una vez que tenemos que repuntar la vieja tabla (0x2F7968) por la nueva tabla, en este caso seria 0xE3DE50.
Nos falta una tabla y vamos hacer exactamente lo mismo; posición inicial 5729DC con selección de bloque con longitud 90; Y pegar a lado de la anterior tabla, en mi caso lo colocare en 0xE3DF00 (perdón si no pongo imagen de referencia pero cada comentario tiene un limite 10 imagenes)
En esta ocasión, solo vamos agregar esta línea:
69 B5 5E 08 FF DD E3 08
En negritas es la ubicación el nombre del tipo HADA; Una vez que tenemos nuestra nueva tabla expandida, simplemente falta repuntar/sustituir la tabla vieja por la nueva.
Por último, tenemos que hacer que el tipo HADA se vea en la Pokédex y para eso nos vamos a la ubicación 0x572A8E y cambiamos el 00 por un 09, que es la ID de nuestro tipo; Si en un futuro desean agregar un nuevo tipo se tendrá que expandir la tabla en otro lugar y repuntar (para estas alturas, ya son unos expertos, reemplazar todo 8E 2A 57 08 por la ubicación de la nueva tabla expandida).
Como paso final, la neta no se si es necesario o no (porque no agregamos un nuevo tipo) pero por si las moscas, vamos a las direcciones 0x572AA6 y 0x572AAE. Y en ellas encontrarás un 12, cámbialo por un 13 y finalizamos.
Hola gente, ahora le toca BPRS (ROM Pokémon Rojo Fuego en Español); Les comparto los INI de varias herramientas para que puedan editarlo y también les comparto la ubicación donde se define la cantidad de Pokémon en la pokedex regional (tanto en la versión inglesa y española):
Rojo fuego: 0x1069D0
Fire red: 0x106828
cambiar el byte 0x97 = 151 por la cantidad de pokémon de la dex regional (máximo 255 o 0xFF)
NT: se agradece al buen amigo Acimutque nos compartió el dato
PGE (Al igual que esmeralda, esta semi completo porque aun no he podido localizar los NumberOfTilesInTilset)
G3T (lo recomiendo sea su herramienta principal por agilidad y por la letra ñ)
##########################################################
######################## READ ME #########################
##########################################################
# The symbol @ means that the offset is read dynamically from the ROM.
# Which means that even if you repointed a data, G3T will be able to find the new pointer without having you update this file, except if you did some extremely advanced ASM hacking. (Which is very rare even in the most heavily ASM hacked ROMs)
# You can still edit the offsets to make G3T go directly to the data's offset, like in most of the tools.
# You will still need to edit this file if you changed a table or a data's size. (Such as NumberOfMoves f.e.)
# Exemples of how to edit MoveData properly for an untouched English Fire Red ROM:
# - "MoveData=@1CC" (dynamic offset)
# - "MoveData=&H250C04" (direct offset, in hexadecimal)
# - "MoveData=2427908" (direct offset, in decimal)
##########################################################
######################## READ ME #########################
##########################################################
The format for this file is simple.
It is just a rom code followed by a list of pointers that need to be repointed if the size is bigger...
[ROM Code]=[pointer1,pointer2,...,pointerN]
Then it is ended by "eof" and everything after that is not read.
The second set of offsets is for type names.
HPE
# Pokemon RojoFuego (Spanish)
[BPRS]
Version=0.9
AllowExpandPokemon=True
AllowExpandedEvolutions=True
ExpandFormat=FR
NumberOfPokemon=412
BaseStatsData=0x24FF4C
PokemonNames=0x24164C
EvolutionData=0x254F1C
NumberOfEvolutions=5
EvolutionTypes=None,Friendship,Friendship (Day),Friendship (Night),Level-Up,Trade,Trade (w/ Item),Stone,ATK > DEF,ATK = DEF,ATK < DEF,High Personality,Low Personality,Spawn a Second,Create Spawn,Beauty
MovesetData=0x258F7C
AttackNames=0x242800
NumberOfAttacks=355
TMCompatibilityData=0x24E390
TMData=0x454E84
NumberOfTMs=50
NumberOfHMs=8
PokedexData=0x44912C
PokedexFormat=FRLG
NationalDexOrder=0x24D7B6
NumberOfPokemonBetweenCelebiAndTreecko=25
NumberOfUnownAfter411=28
FootprintData=0x43A6C8
HasMoveTutors=True
MoveTutorData=0x4541D8
NumberOfMoveTutorAttacks=15
MoveTutorCompatibilityData=0x4541F6
MoveTutorCompatibilityLength=2
FrontSpriteData=0x230818
BackSpriteData=0x231CB8
RegularPaletteData=0x232A78
ShinyPaletteData=0x233838
IconSpriteData=0x3CE958
IconPaletteData=0x3CE8F8
IconData=0x3CF038
# This isn't ready quite yet~
EnemyYTable=0x230138
PlayerYTable=0x2315D8
EnemyAltitudeTable=0x235770
# If I ever do anything with this remains to be seen~
HoennCryData=0x24F19C
CryData=0x483210
TypeNames=0x24A90C
NumberOfTypes=18
AbilityNames=0x24B408
NumberOfAbilities=78
ItemData=0x3D4F50
NumberOfItems=375
G3HS
# Pokemon RojoFuego (Spanish)
[BPRS]
Version=0.9
AllowExpandPokemon=True
AllowExpandedEvolutions=True
ExpandFormat=FR
NumberOfPokemon=412
BaseStatsData=0x24FF4C
PokemonNames=0x24164C
EvolutionData=0x254F1C
NumberOfEvolutions=5
EvolutionTypes=None,Friendship,Friendship (Day),Friendship (Night),Level-Up,Trade,Trade (w/ Item),Stone,ATK > DEF,ATK = DEF,ATK < DEF,High Personality,Low Personality,Spawn a Second,Create Spawn,Beauty
MovesetData=0x258F7C
AttackNames=0x242800
NumberOfAttacks=355
TMCompatibilityData=0x24E390
TMData=0x454E84
NumberOfTMs=50
NumberOfHMs=8
PokedexData=0x44912C
PokedexFormat=FRLG
NationalDexOrder=0x24D7B6
NumberOfPokemonBetweenCelebiAndTreecko=25
NumberOfUnownAfter411=28
FootprintData=0x43A6C8
HasMoveTutors=True
MoveTutorData=0x4541D8
NumberOfMoveTutorAttacks=15
MoveTutorCompatibilityData=0x4541F6
MoveTutorCompatibilityLength=2
FrontSpriteData=0x230818
BackSpriteData=0x231CB8
RegularPaletteData=0x232A78
ShinyPaletteData=0x233838
IconSpriteData=0x3CE958
IconPaletteData=0x3CE8F8
IconData=0x3CF038
# This isn't ready quite yet~
EnemyYTable=0x230138
PlayerYTable=0x2315D8
EnemyAltitudeTable=0x235770
# If I ever do anything with this remains to be seen~
HoennCryData=0x24F19C
CryData=0x483210
TypeNames=0x24A90C
NumberOfTypes=18
AbilityNames=0x24B408
NumberOfAbilities=78
ItemData=0x3D4F50
NumberOfItems=375
HTE
; Pokémon RojoFuego (Español)
[pokemon]
Count=412
Names=0x144
Para ahorrarme la molestia de redactar como hacerlo paso por paso, usare la explicación textual de nuestro buen amigo Naren Jr. pero modificando los valores acorde al PBRS y una que otra aclaración.
Primero hay que expandir la tabla de evoluciones, esta se encuentra en la dirección 0x42EB0, en “Selección de bloque” vamos a seleccionar una longitud de 3C byte.
Al tenerle copiado vamos a buscar espacio libre donde colocarle, yo lo haré en 0x710E00, nos vamos a la dirección que escogieron, selecciona 3C byte de longitud y la pegan con Crtl+B.
Ahora vamos a ir a la dirección 0x042EAC donde se encuentra el viejo puntero de la tabla que acabamos de expandir (4 byte de longitud), aquí colocaremos nuestro nuevo offset permutado, en mi caso sería colocar 00 0E 71 08; Cuando se dice permutado se agrega de esta manera: se inicia con el último par byte de 0x710E00, luego el segundo par de 0x710E00, posterior el primer par byte de 0x710E00 y se termina con 08 para indicar que es un pointer. Recuerden seleccionar 4 byte de longitud y posterior pegar.
Ahora vamos a ir a esta dirección 0x042E96 donde modificaremos el límite de métodos de evoluciones que permite el juego; En esta generación el limite son 14=0E (hexadecimal), como vamos agregar 3 nuevos métodos lo vamos aumentar a 17=11 (hexadecimal)
Lo que haremos ahora será meter las rutinas (hembra, macho, y Por movimiento):
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrb r2, [r3, #0x2]
mov r0, r8
bl decrypt2
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
blt exit
mov r0, r8
mov r1, #0xFF
ldr r0, [r0, #0x0]
and r1, r0
mov r0, r8
bl decrypt
mov r11, r0
pop {r0-r7}
mov r5, r11
ldr r2, pokemondata
mov r4, #0x1C
mul r5, r4
add r5, r5, r2
ldrb r5, [r5, #0x10]
cmp r1, r5
bge exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit: pop {r0-r7}
ldr r0, noevo
bx r0
decrypt: push {r0-r7}
mov r1, #0xB
ldr r2, decryptpoke
bx r2
decrypt2: push {r0-r7}
mov r1, #0x38
ldr r2, decryptpoke
bx r2
.align
levelcheckloc: .word 0x08042FF9
noevo: .word 0x08042FFD
decryptpoke: .word 0x0803FAD5
pokemondata: .word 0x0824FF4C
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrb r2, [r3, #0x2]
mov r0, r8
bl decrypt2
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
blt exit
mov r0, r8
mov r1, #0xFF
ldr r0, [r0, #0x0]
and r1, r0
mov r0, r8
bl decrypt
mov r11, r0
pop {r0-r7}
mov r5, r11
ldr r2, pokemondata
mov r4, #0x1C
mul r5, r4
add r5, r5, r2
ldrb r5, [r5, #0x10]
cmp r1, r5
blt exit
mov r10, r3
pop {r0-r7}
mov r1, r10
ldr r0, levelcheckloc
bx r0
exit: pop {r0-r7}
ldr r0, noevo
bx r0
decrypt: push {r0-r7}
mov r1, #0xB
ldr r2, decryptpoke
bx r2
decrypt2: push {r0-r7}
mov r1, #0x38
ldr r2, decryptpoke
bx r2
.align
levelcheckloc: .word 0x08042FF9
noevo: .word 0x08042FFD
decryptpoke: .word 0x0803FAD5
pokemondata: .word 0x0824FF4C
.text
.align 2
.thumb
.thumb_func
.global Evomove
main:
push {r0-r7}
add r0, r6, r7
lsl r0, r0, #0x3
add r0, r2, r0
add r3, r0, r3
ldrh r2, [r3, #0x2]
mov r0, r8
mov r5, #0x0
loop:
mov r1, #0xD
add r1, r1, r5
bl decrypt
mov r11, r0
pop {r0-r7}
mov r1, r11
cmp r1, r2
beq true
cmp r5, #0x3
beq exit
add r5, #0x1
b loop
decrypt:
push {r0-r7}
ldr r2, decryptpoke
bx r2
true:
mov r9, r3
pop {r0-r7}
mov r1, r9
ldr r0, levelcheckloc
bx r0
exit:
pop {r0-r7}
ldr r0, noevo
bx r0
.align
levelcheckloc: .word 0x08042FF9
noevo: .word 0x08042FFD
decryptpoke: .word 0x0803FAD5
Si expandieron su tabla de pokemon hay que modificar la última línea para la rutina macho y hembra, ejemplo: La pokemondata de la versión inglesa y española no comparten la misma dirección.
Ahora lo colocaremos en nuestra ROM, el offset que quieran yo lo insertaré en 0x710E50 (Female), 0x710ED0 (Male) y 0x710F50 (Move); No olviden primero seleccionar la longitud de bytes que tiene cada rutina y posterior pegar.
Ahora lo último que queda hacer es tomar esas direcciones y permutarlas: En mi caso son: 50 0E 71 08 (Female), D0 0E 71 08 (Male), 50 0F 71 08 (Move) y la insertaremos en la tabla que expandimos (En mi caso es 0x710E00); Les recuerdo seleccionar la longitud de los byte necesarios (en este caso C bytes) y posterior pegar.
Y listo, porque el proceso de modificar evolutionmethods y evomethodsproperties, en el ini de G3HS (BPRS) que les compartir ya están agregados.
NOTA INFORMATIVA
Si cambiaron el número de evoluciones por POKéMON usando G3HS, además de modificar la ubicación de la nueva tabla de Pokémon en la rutina Female y Male, hay que editar la rutina ya compilada según el numero de evolución por POKéMON:
8 evolutiones por POKéMON: Cambia F0 19 por 70 00
16 evolutiones por POKéMON: Cambia F0 19 por B0 00
32 evolutiones por POKéMON: Cambia F0 19 por F0 00
Aún no he testeado con el número de evoluciones aumentado, pero la versión ingles así se modifica; Ahí me comenta si tuvieron éxito
PD: Pensaba hacer el tutorial como agregar el tipo hada pero el buen amigo Berserk1523 tiene un excelente, les comparto el link:
Introducción Muy buenas a todos gente! He decidido traerles la adaptación del tutorial de ShyRayq: https://web.archive.org/web/20160531010632/https://www.pokecommunity.com/showthread.php?t=313872 de PokeCommunity para Rojo Fuego, la traducción la podrán encontrar aquí...