Registrarse

[Otros] E | Estabilizando Pokémon Emerald

Lunos

Enfrentando a La Organización
Miembro insignia
Holi. Este tutorial lo encontré hace un tiempo y olvidé traerlo hasta aqui, principalmente son tweaks para Pokémon Emerald.
Con este tutorial obtendremos un montonazo de espacio libre y nos aseguraremos de que Advance Map no nos pueda joder nuestra ROM, cosa que al parecer pasa bastante seguido con Emerald.
Antes de empezar y como siempre, los creditos el dia de hoy van para Sky0fBlades de PHO por crear el tutorial y postearlo justo aqui.
Dicho eso, empecemos.

Requisitos:
-Advance Map
-ROM de Pokémon Emerald
-Editor Hexadecimal a preferencia (Como siempre, yo usaré mi amado HxD)
-XSE

Tweak #1 - Corrigiendo el .ini de Advance Map

Explicación:
Con la ayuda de DiegoIsAwesome, creador de Pokémon Crystal Dust y moderador de /r/PokemonROMHacks, Sky0fBlades pudo descubrir que Pokémon Emerald utiliza los bytes 0xFF Y 0x00 para marcar las zonas de espacio vacio.
(por lo regular, Ruby y Fire Red solo utilizan 0xFF)
Sin embargo, LOS VERDADEROS bytes de espacio vacio se encuentran en ciertas zonas muy especificas de la ROM, zonas que naturalmente mencionaré en esta guia

Como muchos sabran, Advance Map busca por defecto las zonas de espacio vacio desde el offset 0x6B0000 especificamente, en Pokémon Emerald.
Ese offset NO posee espacio vacio lo que dará como resultado la corrupción de varios de los instrumentos usados por la musica del juego, causando que varias notas suenen de forma aleatoria como "beep".
Por lo general, este problema no se descubre hasta que es demasiado tarde para arreglarlo y es permanente, una vez que pasa ya no puede ser corregido.

Hay varias formas de evitar este problema, una de ellas es modificar el offset en el que A-Map busca espacio vacio por defecto en Pokémon Emerald, reemplazandolo por las zonas que tienen VERDADERO espacio vacio, tales como:
De 0x9C0B20 a 0xAFFFFF
De 0xB98B30 a 0xBFFFFF
De 0xD3CEA0 a 0xD437EF
De 0xDE4018 a 0xE3CF48
De 0xE3CF64 hasta el final.
Quizá hayan mas, pero eso es todo lo que Sky encontró de momento.

Corrigiendo el problema:
1) En tu carpeta de Advance Map, abre la carpeta "ini". En ella, abre el archivo "AdvanceMap.ini".
2) Con un editor de texto, usa Ctrl+F/Ctrl+B y busca "version:bpe".
3) Hecho eso, haz los siguientes cambios:
*En la linea SuchByte=$00 cambia $00 por $FF
*En la linea SuchBeginn=$6B0000 cambia $6B0000 por el offset desde el que Advance Map buscará espacio vacio de ahora en mas.
4) Guarda los cambios.

Hecho eso, Advance Map ya no podrá reemplazar ningun espacio ya usado por la ROM, pero incluso tras hacer estos cambios, al añadir nuevos datos de Pokémon Salvajes o incluso mapas nuevos (Sky no está muy seguro sobre esto) se seguirán sobreescribiendo los bytes incorrectos.

Tweak #2 - Hacer usable los espacios vacios 0x00

Explicación:
Aqui convertiremos ciertos bloques de espacio vacio en nuestra ROM, que en lugar de usar 0xFF como deberian utilizan 0x00.

Corrigiendo el problema:
En esta parte del tutorial voy a explicar el proceso especificamente hecho con HxD.
1) Abre tu ROM de Pokémon Emerald en HxD
2) Vé a Edit > Select Block
3) En Start Offset pon 9C0B20 y en End Offset pon AFFFFF
Al hacer esto, HxD seleccionará automaticamente todos los bytes que se encuentren entre esos dos offsets.
4) Haz click derecho en el bloque seleccionado y luego Fill Selection
5) Cambia "00" por "FF" en donde dice "Fill Pattern of Pass - Hex-values"
6) Click en "Ok"
7) Repite exactamente los mismos pasos para los offsets:
DE4018 a E3CF48
B98B30 a BFFFFB
Y D3CEA0 a D437EF
8) Guarda los cambios y listo.

Tweak #3 - Consejos a la hora de escribir tus scripts para Emerald en XSE

Explicación:
Tras los dos tweaks anteriores, lo que sigue te ayudará un monton. Si haz escrito scripts antes, sabes que por lo general estos se compilan en un offset "dinamico". Sin embargo, si quieres saber la definición exacta, aqui está escrita por HackMew en su guia sobre scripting en XSE:
HackMew dijo:
#dynamic elige el offset que el compilador usará para buscar espacio vacio en tu ROM para asi poder insertar tu script.

Uso:
#dynamic Offset

Ejemplo:
#dynamic 0x720000

Con ese comando, el compilador empezará a buscar espacio vacio a partir del offset 0x720000.
Tras haber habilitado un monton de espacio vacio con los anteriores cambios que hicimos en HxD, ahora tenemos muchos mas Bytes FF con los que trabajar en nuestra ROM de Pokémon Emerald, al igual que la posibilidad de usar un Offset Dinamico mucho mas elevado en la lista de offsets que 0xE3CF64, que es 0x9C0B20.

Ahora, lo que lo facilitará todo, es usar un comando similar a #dynamic pero que cumple una función diferente. Este se llama #freespace 0xFF.
Usalo al inicio de cada script para hacer que busque un cierto patrón de bytes. En este caso, el comando buscará bytes 0xFF, algo que nos podemos permitir tras el Tweak #2.

Aqui un rapido ejemplo de como se usa el comando:
Código:
[CENTER][B]#freespace 0xFF
#dynamic 0x9C0B20[/B]
#org @start
lock
faceplayer
msgbox @1 0x4
closeonkeypress
release
end

#org @1
= Holi![/CENTER]

Advertencias

-Si utilizas la version hecha por ZodiacDaGreat de la herramienta Day & Night, recuerda configurarlo de modo que utilize un offset que tú no hayas usado para un script o cualquier otra cosa. Por defecto, el programa usa el offset 0xAF0000, lo cual por supuesto es bueno ya que por defecto es espacio vacio en la ROM; pero si tú ya usaste ese espacio para algun script o lo que sea, la herramienta naturalmente lo sobreescribirá. Tenlo presente.

-Si utilizas el Tileset Animation Editor de Lu-Ho, asegurate de hacer exactamente los mismos cambios explicados en el Tweak #1 referente al archivo "AdvanceMap.ini", debido a que TAE tambien usa la misma base para sus ".ini".

Descargas
1) Parche de Estabilización.
Nota: Este parche aplica lo explicado en el Tweak #2.

2) Lunar IPS.

Y eso fue todo.
 
Última edición:

H.B.P

Emperador Kaktiácero
Miembro de honor
Respuesta: GBA | Otros | Estabilizando Pokémon Emerald

Ya había publicado temas de este estilo hace unos años, pero desde que Fire Red se ha convertido en la regla general del Rom Hacking en Pokémon GBA, con semejante cantidad de recursos y rom bases disponibles, ya no le veo ventajas a usar Emerald como rom base. No obstante, esos trucos de los que hablas son esenciales para todo rom hacker que esté dispuesto a echarle el guante y tu tema recoge los trucos incluso con más detalles, así que gracias por traerlos.
 
Respuesta: E | Otros | Estabilizando Pokémon Emerald

Primero que todo, disculpad si esto es considerado revivir un post muy antiguo.

Bueno, la verdad es que este post me ha parecido demasiado bueno. He estado trabajando en una rom de Esmeralda hace más de 1 año y hace poco me he enterado de este fix. Mi duda es: ¿Este método funciona también para las versiones españolas de Esmeralda?
 

Jaizu

Usuario mítico
Respuesta: E | Otros | Estabilizando Pokémon Emerald

Primero que todo, disculpad si esto es considerado revivir un post muy antiguo.

Bueno, la verdad es que este post me ha parecido demasiado bueno. He estado trabajando en una rom de Esmeralda hace más de 1 año y hace poco me he enterado de este fix. Mi duda es: ¿Este método funciona también para las versiones españolas de Esmeralda?
Sinceramente deberías hacerlo con HEX, te ayudará a entender conceptos básicos del editor de HEX, cómo seleccionar bloques y reemplazarlos. Para saber si es compatible solo tienes que abrir la ROM española y mirar si el espacio de esos offsets tiene datos o no.
 

deidara9216

Profesional de WaH
Aloha gente, bueno se que quizá esto sea un poco tarde de comentar pero desde C2FFA0 asta D51DC8 tiene el uso de las animaciones de icon Pokémon.
 

lwol12

Usuario de platino
Holi. Este tutorial lo encontré hace un tiempo y olvidé traerlo hasta aqui, principalmente son tweaks para Pokémon Emerald.
Con este tutorial obtendremos un montonazo de espacio libre y nos aseguraremos de que Advance Map no nos pueda joder nuestra ROM, cosa que al parecer pasa bastante seguido con Emerald.
Antes de empezar y como siempre, los creditos el dia de hoy van para Sky0fBlades de PHO por crear el tutorial y postearlo justo aqui.
Dicho eso, empecemos.

Requisitos:
-Advance Map
-ROM de Pokémon Emerald
-Editor Hexadecimal a preferencia (Como siempre, yo usaré mi amado HxD)
-XSE

Tweak #1 - Corrigiendo el .ini de Advance Map

Explicación:
Con la ayuda de DiegoIsAwesome, creador de Pokémon Crystal Dust y moderador de /r/PokemonROMHacks, Sky0fBlades pudo descubrir que Pokémon Emerald utiliza los bytes 0xFF Y 0x00 para marcar las zonas de espacio vacio.
(por lo regular, Ruby y Fire Red solo utilizan 0xFF)
Sin embargo, LOS VERDADEROS bytes de espacio vacio se encuentran en ciertas zonas muy especificas de la ROM, zonas que naturalmente mencionaré en esta guia

Como muchos sabran, Advance Map busca por defecto las zonas de espacio vacio desde el offset 0x6B0000 especificamente, en Pokémon Emerald.
Ese offset NO posee espacio vacio lo que dará como resultado la corrupción de varios de los instrumentos usados por la musica del juego, causando que varias notas suenen de forma aleatoria como "beep".
Por lo general, este problema no se descubre hasta que es demasiado tarde para arreglarlo y es permanente, una vez que pasa ya no puede ser corregido.

Hay varias formas de evitar este problema, una de ellas es modificar el offset en el que A-Map busca espacio vacio por defecto en Pokémon Emerald, reemplazandolo por las zonas que tienen VERDADERO espacio vacio, tales como:
De 0x9C0B20 a 0xAFFFFF
De 0xB98B30 a 0xBFFFFF
De 0xD3CEA0 a 0xD437EF
De 0xDE4018 a 0xE3CF48
De 0xE3CF64 hasta el final.
Quizá hayan mas, pero eso es todo lo que Sky encontró de momento.

Corrigiendo el problema:
1) En tu carpeta de Advance Map, abre la carpeta "ini". En ella, abre el archivo "AdvanceMap.ini".
2) Con un editor de texto, usa Ctrl+F/Ctrl+B y busca "version:bpe".
3) Hecho eso, haz los siguientes cambios:
*En la linea SuchByte=$00 cambia $00 por $FF
*En la linea SuchBeginn=$6B0000 cambia $6B0000 por el offset desde el que Advance Map buscará espacio vacio de ahora en mas.
4) Guarda los cambios.

Hecho eso, Advance Map ya no podrá reemplazar ningun espacio ya usado por la ROM, pero incluso tras hacer estos cambios, al añadir nuevos datos de Pokémon Salvajes o incluso mapas nuevos (Sky no está muy seguro sobre esto) se seguirán sobreescribiendo los bytes incorrectos.

Tweak #2 - Hacer usable los espacios vacios 0x00

Explicación:
Aqui convertiremos ciertos bloques de espacio vacio en nuestra ROM, que en lugar de usar 0xFF como deberian utilizan 0x00.

Corrigiendo el problema:
En esta parte del tutorial voy a explicar el proceso especificamente hecho con HxD.
1) Abre tu ROM de Pokémon Emerald en HxD
2) Vé a Edit > Select Block
3) En Start Offset pon 9C0B20 y en End Offset pon AFFFFF
Al hacer esto, HxD seleccionará automaticamente todos los bytes que se encuentren entre esos dos offsets.
4) Haz click derecho en el bloque seleccionado y luego Fill Selection
5) Cambia "00" por "FF" en donde dice "Fill Pattern of Pass - Hex-values"
6) Click en "Ok"
7) Repite exactamente los mismos pasos para los offsets:
DE4018 a E3CF48
B98B30
a BFFFFB
Y D3CEA0 a D437EF
8) Guarda los cambios y listo.

Tweak #3 - Consejos a la hora de escribir tus scripts para Emerald en XSE

Explicación:
Tras los dos tweaks anteriores, lo que sigue te ayudará un monton. Si haz escrito scripts antes, sabes que por lo general estos se compilan en un offset "dinamico". Sin embargo, si quieres saber la definición exacta, aqui está escrita por HackMew en su guia sobre scripting en XSE:


Tras haber habilitado un monton de espacio vacio con los anteriores cambios que hicimos en HxD, ahora tenemos muchos mas Bytes FF con los que trabajar en nuestra ROM de Pokémon Emerald, al igual que la posibilidad de usar un Offset Dinamico mucho mas elevado en la lista de offsets que 0xE3CF64, que es 0x9C0B20.

Ahora, lo que lo facilitará todo, es usar un comando similar a #dynamic pero que cumple una función diferente. Este se llama #freespace 0xFF.
Usalo al inicio de cada script para hacer que busque un cierto patrón de bytes. En este caso, el comando buscará bytes 0xFF, algo que nos podemos permitir tras el Tweak #2.

Aqui un rapido ejemplo de como se usa el comando:
Código:
[CENTER][B]#freespace 0xFF
#dynamic 0x9C0B20[/B]
#org @start
lock
faceplayer
msgbox @1 0x4
closeonkeypress
release
end

#org @1
= Holi![/CENTER]

Advertencias

-Si utilizas la version hecha por ZodiacDaGreat de la herramienta Day & Night, recuerda configurarlo de modo que utilize un offset que tú no hayas usado para un script o cualquier otra cosa. Por defecto, el programa usa el offset 0xAF0000, lo cual por supuesto es bueno ya que por defecto es espacio vacio en la ROM; pero si tú ya usaste ese espacio para algun script o lo que sea, la herramienta naturalmente lo sobreescribirá. Tenlo presente.

-Si utilizas el Tileset Animation Editor de Lu-Ho, asegurate de hacer exactamente los mismos cambios explicados en el Tweak #1 referente al archivo "AdvanceMap.ini", debido a que TAE tambien usa la misma base para sus ".ini".

Descargas
1) Parche de Estabilización.
Nota: Este parche aplica lo explicado en el Tweak #2.

2) Lunar IPS.

Y eso fue todo.
Muchas gracias, estaba buscando los offsets libres para esmeralda , me has solucionado muchisimo, sirve para esmeralda español no???
 
Última edición:

lwol12

Usuario de platino
Alguien podría ayudarme a hacer esto? No me sale se me buguea el script cada vez que lo pongo
 

Lunos

Enfrentando a La Organización
Miembro insignia
Alguien podría ayudarme a hacer esto? No me sale se me buguea el script cada vez que lo pongo
Esa parte del tutorial está un poco desactualizada.
Hoy en dia no se necesita usar #freespace 0xFF cuando podés sencillamente usar el Unofficial XSE de Gamer2020 que lo maneja automaticamente.

Dicho eso, si un script te da error, seguramente no tenga nada que ver con los contenidos de este tutorial.
 

lwol12

Usuario de platino
Ah bien, puede ser que esté haciendo algo mal, lo he intentado de mil formas pero me sigue saliendo un pequeño bug de sonido, gracias por contestarme y por guiarme un poco , ese XSE es uno especial para este caso? Hmm vale, no volveré a poner el comando #freespace , pero los 2 pasos anteriores debo hacerlo igualmente? lo de liberar espacio en la rom y eso del advance map? O con este nuevo XSE no es necesario? Mil gracias!
 

lwol12

Usuario de platino
vaya tela lo que me acabas de solucionar con esto en serio, muchas gracias, no sabia ya qué hacer jajaja
 

lwol12

Usuario de platino
Tengo otra duda xD

#dynamic 0x800000
#org @inicio
lock
faceplayer
checkflag 0x2002
msgbox @empieza 0x6
wildbattle 0xnumero de pkmn 0xnivel 0xobjeto
msgbox @perder 0x6
hidesprite 0xnº de persona en Advance Map
setflag 0x2002
release
end

#org @empieza
Apretar Ctrl + T (Lo que dice cuando le hablamos)

#org @perder
Apretar Ctrl + T (Lo que dice cuando pierde)


Eso está así correcto? ha sido el script que he utilizado siempre y me ha funcionado, pero tengo que cambiar algo en especial para esmeralda? como por ejemplo el #dynamic 0x800000 , tiene que ser otro numero? o el XSE me lo busca automaticamente y poniendo ese vale?xD

Lo que quiero es añadir 9 pokemon capturables con script de Wildbattle
 

Lunos

Enfrentando a La Organización
Miembro insignia
Ah bien, puede ser que esté haciendo algo mal, lo he intentado de mil formas pero me sigue saliendo un pequeño bug de sonido, gracias por contestarme y por guiarme un poco , ese XSE es uno especial para este caso? Hmm vale, no volveré a poner el comando #freespace , pero los 2 pasos anteriores debo hacerlo igualmente? lo de liberar espacio en la rom y eso del advance map? O con este nuevo XSE no es necesario? Mil gracias!
Liberar espacio en la ROM y ajustar el .ini de AMap de por sí no son necesarios. Son cosas opcionales que se hacen para obtener espacio en la ROM de forma gratuita, y para que AMap tenga menos chances de arruinarte la ROM. El uso de XSE, sea el oficial o el de Gamer2020, no está relacionado de ninguna manera.
Tengo otra duda xD

#dynamic 0x800000
#org @inicio
lock
faceplayer
checkflag 0x2002
msgbox @empieza 0x6
wildbattle 0xnumero de pkmn 0xnivel 0xobjeto
msgbox @perder 0x6
hidesprite 0xnº de persona en Advance Map
setflag 0x2002
release
end

#org @empieza
Apretar Ctrl + T (Lo que dice cuando le hablamos)

#org @perder
Apretar Ctrl + T (Lo que dice cuando pierde)


Eso está así correcto? ha sido el script que he utilizado siempre y me ha funcionado, pero tengo que cambiar algo en especial para esmeralda? como por ejemplo el #dynamic 0x800000 , tiene que ser otro numero? o el XSE me lo busca automaticamente y poniendo ese vale?xD

Lo que quiero es añadir 9 pokemon capturables con script de Wildbattle
La sintaxis de los scripts es literalmente la misma de siempre. La unica diferencia es que, usando el XSE de Gamer2020, no necesitás añadir la directiva #freespace 0xFF a la hora de escribir scripts para Pokémon Esmeralda.

Dicho eso, el script está correcto en su mayoria. El unico error que veo es el uso de una flag inexistente.
No hay una flag 0x2002 a menos de que hayas expandido las flags.
Por cierto, ten en cuenta que este tutorial es especificamente para la versión en Ingles.
El hecho de que me hables de "Pokémon Esmeralda" me hace pensar que estás usando una ROM Europea.
En dicho caso, aplicar este tutorial corre bajo tu propio riesgo.

Por ultimo creo que cabe mencionar que este no es un tema como para hacer preguntas sobre scripts de overworld.
Para ese tipo de dudas, lo correcto es irte a la sección de Dudas sobre ROM Hacking GBA Binario y hacer un tema ahí.
 

lwol12

Usuario de platino
Vale muchas gracias por todo , sí, estoy usando una rom española, tengo esperanza de que funcione xD, lo de la Flag es una que viene por defecto en el texto como ejemplo, la que uso es 0x2A para uno de los pokémon, hasta ahora es la unica que me ha funcionado sin ningun tipo de bug, o almenos hasta donde he testeado, ningun bug de sonido, ni de pantalla ni grafico ni nada, por lo que añadiré solo ese pokémon y los demas los pondré que salgan en diferentes rutas, porque probé mas direcciones con más pokémon y ya si que me dieron bug grafico, se me distorsiono la pantalla XD, pero bueno con poder poner a 1 es suficiente
 
Última edición:
Arriba