Holi, el dia de hoy les traeré un tutorial simple y facil de entender.
El objetivo es crear un objeto en Pokémon Ruby, Emerald o Fire Red mediante el cual activaremos un script.
Antes de empezar, como siempre, tocan los creditos.
El creador de la rutina original que es para Fire Red fue Darthatron y la posteó justo aqui.
El que porteó la rutina a Pokémon Emerald fue Phenom2122 y la posteó justo aqui.
El que porteó la rutina a Pokémon Ruby fue karatekid552 y la posteó justo aqui.
Dicho eso, empecemos.
Requisitos:
-ROM de Pokémon Fire Red USA v1.0 / ROM de Pokémon Emerald USA / ROM de Pokémon Ruby USA v1.0
-Editor Hexadecimal de nuestra preferencia (Yo usaré mi amado HxD)
-Un editor de objetos (Yo usaré Item Manager)
-Una calculadora en modo programador (Yo usaré el sencillo calc.exe de toda la vida)
Opcionalmente tambien podemos usar un editor de texto para tomar notas (Yo usaré el buen notepad.exe)
Procedimiento:
1) Primero debemos crear nuestro objeto.
Los parametros mas relevantes son:
Nombre, Index Number, Pocket, Type y Field Usage.
En mi caso, este fue el resultado:
2) Con nuestro objeto ya creado, ahora debemos escribir el script al que invocará.
Tal y como la primera vez, yo escribí un script que me permita curar a mi equipo Pokémon.
3) Ya listos nuestro objeto y nuestro script, es hora de usar nuestro editor hexadecimal.
Lo primero que haremos será insertar en un offset vacio esta Rutina ASM Compilada:
Fire Red:
Emerald:
Ruby:
Como veran, la rutina tiene un "XX XX XX".
Eso lo reemplazarán con el offset donde hayan insertado su script, convertido en pointer.
¿Como convertir un offset en pointer? Simple y sencillo.
Tomamos nuestro offset, intercambiamos la posición de su primer y tercer par, añadimos un "08" al final y ya está.
Ejemplo: Yo inserté mi script en 802C28.
Asi que intercambio las posiciones del primer y el tercer par dando como resultado 28 2C 80
Para terminar añado un 08 resultando en 28 2C 80 08, ese es mi pointer.
En este caso, el 08 ya está incluido en la rutina por lo que no hace falta.
4) Con nuestra rutina ya insertada en nuestra ROM y dentro de ella nuestro script, toca volver al Item Manager.
Vamos al Field Usage del objeto y lo reemplazaremos por el offset donde insertamos la Rutina ASM Compilada +1, dejando intacto el 8 al inicio.
En mi caso, como mencioné antes, yo inserté la rutina en 71B850.
Por lo tanto, el Field Usage de mi objeto será: 871B851.
5) Guardamos y probamos.
Aqui mi resultado en las 3 ROMs.
Y eso es todo.
El objetivo es crear un objeto en Pokémon Ruby, Emerald o Fire Red mediante el cual activaremos un script.
Antes de empezar, como siempre, tocan los creditos.
El creador de la rutina original que es para Fire Red fue Darthatron y la posteó justo aqui.
El que porteó la rutina a Pokémon Emerald fue Phenom2122 y la posteó justo aqui.
El que porteó la rutina a Pokémon Ruby fue karatekid552 y la posteó justo aqui.
Dicho eso, empecemos.
Requisitos:
-ROM de Pokémon Fire Red USA v1.0 / ROM de Pokémon Emerald USA / ROM de Pokémon Ruby USA v1.0
-Editor Hexadecimal de nuestra preferencia (Yo usaré mi amado HxD)
-Un editor de objetos (Yo usaré Item Manager)
-Una calculadora en modo programador (Yo usaré el sencillo calc.exe de toda la vida)
Opcionalmente tambien podemos usar un editor de texto para tomar notas (Yo usaré el buen notepad.exe)
Procedimiento:
1) Primero debemos crear nuestro objeto.
Los parametros mas relevantes son:
Nombre, Index Number, Pocket, Type y Field Usage.
En mi caso, este fue el resultado:
2) Con nuestro objeto ya creado, ahora debemos escribir el script al que invocará.
Tal y como la primera vez, yo escribí un script que me permita curar a mi equipo Pokémon.
3) Ya listos nuestro objeto y nuestro script, es hora de usar nuestro editor hexadecimal.
Lo primero que haremos será insertar en un offset vacio esta Rutina ASM Compilada:
Fire Red:
10 B5 04 1C 78 46 13 30 0C 49 08 60 20 1C 0C 49 00 F0 10 F8 10 BC 01 BC 00 47 10 B5 04 1C 0A 48 05 49 00 F0 07 F8 20 1C 06 49 00 F0 03 F8 10 BC 01 BC 00 47 08 47 C0 46 E5 9A 06 08 98 99 03 02 3D 10 0A 08 09 75 07 08 XX XX XX 08
Emerald:
10 B5 04 1C 78 46 13 30 0C 49 08 60 20 1C 0C 49 00 F0 10 F8 10 BC 01 BC 00 47 10 B5 04 1C 0A 48 05 49 00 F0 07 F8 20 1C 06 49 00 F0 03 F8 10 BC 01 BC 00 47 08 47 C0 46 F9 8E 09 08 F4 A0 03 02 DD D0 0F 08 9D 90 0A 08 XX XX XX 08
Ruby:
10 B5 04 1C 78 46 13 30 0C 49 08 60 20 1C 0C 49 00 F0 10 F8 10 BC 01 BC 00 47 10 B5 04 1C 0A 48 05 49 00 F0 07 F8 20 1C 06 49 00 F0 03 F8 10 BC 01 BC 00 47 08 47 C0 46 B9 55 06 08 00 5D 00 03 51 90 0C 08 75 AB 07 08 XX XX XX 08
Como veran, la rutina tiene un "XX XX XX".
Eso lo reemplazarán con el offset donde hayan insertado su script, convertido en pointer.
¿Como convertir un offset en pointer? Simple y sencillo.
Tomamos nuestro offset, intercambiamos la posición de su primer y tercer par, añadimos un "08" al final y ya está.
Ejemplo: Yo inserté mi script en 802C28.
Asi que intercambio las posiciones del primer y el tercer par dando como resultado 28 2C 80
Para terminar añado un 08 resultando en 28 2C 80 08, ese es mi pointer.
En este caso, el 08 ya está incluido en la rutina por lo que no hace falta.
4) Con nuestra rutina ya insertada en nuestra ROM y dentro de ella nuestro script, toca volver al Item Manager.
Vamos al Field Usage del objeto y lo reemplazaremos por el offset donde insertamos la Rutina ASM Compilada +1, dejando intacto el 8 al inicio.
En mi caso, como mencioné antes, yo inserté la rutina en 71B850.
Por lo tanto, el Field Usage de mi objeto será: 871B851.
5) Guardamos y probamos.
Aqui mi resultado en las 3 ROMs.
Y eso es todo.
Post Original:
Holi.
Encontré hace un rato este precioso tutorial y quiero compartirlo con ustedes.
Antes de empezar, como siempre, los creditos totales van para Darthatron de PokeCommunity quien compartió su rutina justo aqui y tambien cabe aclarar que para el tutorial estaré utilizando FireRed.
Sin embargo, el usuario "Phenom2122" de PokeCommunity ha porteado la rutina a Pokémon Emerald justo aqui.
Ahora si, dicho esto...
¡Empecemos!
1) Primero, creamos un objeto en Item Manager.
Los parametros a rellenar son.
-Nombre del Objeto (En mi caso, "HEALER")
-Index Number (En mi caso, 34)
-Descripción (Opcional)
-Pocket (En mi caso, "Key Items")
Clickeamos en el Boton ">>" y nos aseguramos de que el Type sea el 02 Use-of-SELECT.
2) Una vez que tengamos nuestro objeto ya creado, escribiremos nuestro Script en XSE.
En mi caso, yo hice un script que ejecutará un Msgbox, luego el fadescreen 0x1, luego el Special 0x0, luego el fadescreen 0x0, luego el Fanfare de curación, luego el waitfanfare, luego otro msgbox mas, y fin.
Si, adivinaron, un Item que curará a tus Pokémon <3 .. (2OP4M3)
Anoten el offset del script ya compilado, en mi caso fue: 900182
3) Ahora, necesitaremos poner esta rutina ASM compilada en algun Offset Libre.
Anoten tambien ese offset libre porque será el Field Usage del Objeto.
En mi caso, la rutina irá en: 71A330
Fire Red:
Emerald:
4) Modificaremos los bytes "XX XX XX" con el Offset donde está nuestro script compilado, convertido en un Pointer.
Mark: ¡Espera, Espera, Espera! ¡Alto ahi, cerebrito!
¿¡Y como se pasa de Offset a Pointer?
Lunos: ¡Pues muy sencillo, Mark!
Primero, tomaremos nuestro offset, que repito, en mi caso fue el: 900182
Segundo, lo separamos en 3 parejas de 2 digitos cada uno.
En mi caso, 900182 quedaria en 90 01 82
Y en Tercero, lo daremos vuelta de este modo: "82 01 90"
Nota: Normalmente, se añade un "08" al final, pero como en este caso ya está añadido, pues nada.
5) Volvemos al Item Manager, abrimos nuestra ROM, vamos hacia nuestro objeto, pulsamos el Boton ">>" y nos centraremos en el Campo "Field Usage".
¿Recuerdas que te dije que guardases el Offset en el que ponias la Rutina ASM compilada?
Pues ahora lo necesitarás.
En mi caso, puse el codigo en el offset 71A330 como dije anteriormente.
Pues lo unico que tenemos que hacer es poner el offset +1 en el Field Usage.
¿Yo puse mi trozo de codigo en 71A330?
Pues entonces, el Field Usage quedará en "871A331"
-"8" al inicio porque asi funciona Item Manager.
-Y 71A331 porque 71A330 + 1 = 71A331
Y listo, está hecho.
¡Ahora solo nos queda darnos el objeto mediante GiveItem (O GivePokemon con el Objeto Equipado, da igual) y a probar!
Algunas imagenes del producto terminado:
Y como se que unos simples Msgbox en Imagen no demuestran mucho..
Aqui dejo el IPS.
ponganlo en una ROM Limpia de FireRed y vayan con el Youngster del Centro Pokemon de Ciudad Verde.
ADVERTENCIA:
Y bueno, eso ha sido todo.
Espero que les sea de utilidad.
Hasta luego <3
EDITO:
En lo posible, leanlo despacio porque podria ser un tanto confuso.
Si se necesita, quiza termine añadiendo imagenes en cada paso.
EDITO2:
¡Diantres!
He puesto "Registrar" en el titulo en lugar de "Registrando" >_< ...
Si un Moderador pudiese corregirlo, seria fenomenal <3
EDITO3 (02/08/2017):
Añadida una versión de la rutina compilada para Pokémon Emerald.
La de Fire Red NO funciona en Emerald.
Encontré hace un rato este precioso tutorial y quiero compartirlo con ustedes.
Antes de empezar, como siempre, los creditos totales van para Darthatron de PokeCommunity quien compartió su rutina justo aqui y tambien cabe aclarar que para el tutorial estaré utilizando FireRed.
Sin embargo, el usuario "Phenom2122" de PokeCommunity ha porteado la rutina a Pokémon Emerald justo aqui.
Ahora si, dicho esto...
¡Empecemos!
1) Primero, creamos un objeto en Item Manager.
Los parametros a rellenar son.
-Nombre del Objeto (En mi caso, "HEALER")
-Index Number (En mi caso, 34)
-Descripción (Opcional)
-Pocket (En mi caso, "Key Items")
Clickeamos en el Boton ">>" y nos aseguramos de que el Type sea el 02 Use-of-SELECT.
2) Una vez que tengamos nuestro objeto ya creado, escribiremos nuestro Script en XSE.
En mi caso, yo hice un script que ejecutará un Msgbox, luego el fadescreen 0x1, luego el Special 0x0, luego el fadescreen 0x0, luego el Fanfare de curación, luego el waitfanfare, luego otro msgbox mas, y fin.
Si, adivinaron, un Item que curará a tus Pokémon <3 .. (2OP4M3)
Anoten el offset del script ya compilado, en mi caso fue: 900182
3) Ahora, necesitaremos poner esta rutina ASM compilada en algun Offset Libre.
Anoten tambien ese offset libre porque será el Field Usage del Objeto.
En mi caso, la rutina irá en: 71A330
Fire Red:
Código:
10 B5 04 1C 78 46 13 30 0C 49 08 60 20 1C 0C 49 00 F0 10 F8 10 BC 01 BC 00 47 10 B5 04 1C 0A 48 05 49 00 F0 07 F8 20 1C 06 49 00 F0 03 F8 10 BC 01 BC 00 47 08 47 C0 46 E5 9A 06 08 98 99 03 02 3D 10 0A 08 09 75 07 08 XX XX XX 08
Código:
10 B5 04 1C 78 46 13 30 0C 49 08 60 20 1C 0C 49 00 F0 10 F8 10 BC 01 BC 00 47 10 B5 04 1C 0A 48 05 49 00 F0 07 F8 20 1C 06 49 00 F0 03 F8 10 BC 01 BC 00 47 08 47 C0 46 F9 8E 09 08 F4 A0 03 02 DD D0 0F 08 9D 90 0A 08 XX XX XX 08
Mark: ¡Espera, Espera, Espera! ¡Alto ahi, cerebrito!
¿¡Y como se pasa de Offset a Pointer?
Lunos: ¡Pues muy sencillo, Mark!
Primero, tomaremos nuestro offset, que repito, en mi caso fue el: 900182
Segundo, lo separamos en 3 parejas de 2 digitos cada uno.
En mi caso, 900182 quedaria en 90 01 82
Y en Tercero, lo daremos vuelta de este modo: "82 01 90"
Nota: Normalmente, se añade un "08" al final, pero como en este caso ya está añadido, pues nada.
5) Volvemos al Item Manager, abrimos nuestra ROM, vamos hacia nuestro objeto, pulsamos el Boton ">>" y nos centraremos en el Campo "Field Usage".
¿Recuerdas que te dije que guardases el Offset en el que ponias la Rutina ASM compilada?
Pues ahora lo necesitarás.
En mi caso, puse el codigo en el offset 71A330 como dije anteriormente.
Pues lo unico que tenemos que hacer es poner el offset +1 en el Field Usage.
¿Yo puse mi trozo de codigo en 71A330?
Pues entonces, el Field Usage quedará en "871A331"
-"8" al inicio porque asi funciona Item Manager.
-Y 71A331 porque 71A330 + 1 = 71A331
Y listo, está hecho.
¡Ahora solo nos queda darnos el objeto mediante GiveItem (O GivePokemon con el Objeto Equipado, da igual) y a probar!
Algunas imagenes del producto terminado:
Y como se que unos simples Msgbox en Imagen no demuestran mucho..
Aqui dejo el IPS.
ponganlo en una ROM Limpia de FireRed y vayan con el Youngster del Centro Pokemon de Ciudad Verde.
ADVERTENCIA:
Al parecer, algunos comandos podrian no funcionar.
Yo he usado el "lock" y arruina totalmente el objeto.
Asi que principalmente, jueguen un poco con eso.
Yo puedo confirmar que los comandos:
-Msgbox 0x5 y 0x6
-Fanfare 0x100
-Waitfanfare
-Fadescreen 0x1 y 0x0
-Compare LASTRESULT 0x1
-If 0x1 goto
-If 0x0 goto
Funcionan perfectisimamente.
Yo he usado el "lock" y arruina totalmente el objeto.
Asi que principalmente, jueguen un poco con eso.
Yo puedo confirmar que los comandos:
-Msgbox 0x5 y 0x6
-Fanfare 0x100
-Waitfanfare
-Fadescreen 0x1 y 0x0
-Compare LASTRESULT 0x1
-If 0x1 goto
-If 0x0 goto
Funcionan perfectisimamente.
Y bueno, eso ha sido todo.
Espero que les sea de utilidad.
Hasta luego <3
EDITO:
En lo posible, leanlo despacio porque podria ser un tanto confuso.
Si se necesita, quiza termine añadiendo imagenes en cada paso.
EDITO2:
¡Diantres!
He puesto "Registrar" en el titulo en lugar de "Registrando" >_< ...
Si un Moderador pudiese corregirlo, seria fenomenal <3
EDITO3 (02/08/2017):
Añadida una versión de la rutina compilada para Pokémon Emerald.
La de Fire Red NO funciona en Emerald.
Última edición: