Buenas, soy nuevo aquí pero creo que puedo hacer una pequeña contribución.
Una de las cosas que mas me ha fastidiado de pokemon FR es que cuando capturas un pokemon para tu equipo, la única forma de saber si tiene buenos IVs es hacer muchas matemáticas, y si además no te conformas con saber cuales son sus IVs sino que quieres un pokemon perfecto, te puedes pasar meses criando... pero ¡venga ya! ¿No os gustaría que hubiera un cientifico que pueda hacer ingeniería qenética en vuestros pokemon?
Ahora esto es posible gracias al FRhackedEngine, una serie de parches que incluyen rutinas ASM para, entre otras cosas, desencriptar los datos de los pokemon y poder modificarlos. Para mas información, AQUÍ
Primero una breve explicacion:
Para este tutorial necesitaremos usar los specials 0x6 0x8 y 0x10 del FRHE
Special 0x6:
Descompila el pokemon del equipo que se encuentre en la posición guardada en la variable 0x8004. Si hay ya un pokemon descompilado, lo recompila.
Special2 0x[variable] 0x8:
Lee el IV del stat guardado en la variable 0x8005. y guarda el resultado en la variable especificada. Los id de los stat son:
Special 0x10:
Establece al IV del stat guardado en 0x8005 el valor guardado en 0x8006. Los ID de los stats son los mismos de arriba, y el valor de los IVs puede ir de 0 a 32 (0x0 - 0x1F)
Ejemplo
Ahora los 2 scripts que he prometido (tambien están adjuntos en .txt):
Lector de IVs
Perfeccionador de pokemon
Espero que me haya explicado bien :blush:
Por cierto, sois completamente libres de usar estos scripts en vuestros hacks si lo deseáis, no es necesario dar crédito (si quiereis podeis dar crédito a Thymocyte o Adenosin) pero si me gustaría que me avisarais de que lo vais a usar (siempre mola saber que has ayudado a alguien!)
Venga ánimo!
Una de las cosas que mas me ha fastidiado de pokemon FR es que cuando capturas un pokemon para tu equipo, la única forma de saber si tiene buenos IVs es hacer muchas matemáticas, y si además no te conformas con saber cuales son sus IVs sino que quieres un pokemon perfecto, te puedes pasar meses criando... pero ¡venga ya! ¿No os gustaría que hubiera un cientifico que pueda hacer ingeniería qenética en vuestros pokemon?
Ahora esto es posible gracias al FRhackedEngine, una serie de parches que incluyen rutinas ASM para, entre otras cosas, desencriptar los datos de los pokemon y poder modificarlos. Para mas información, AQUÍ
Primero una breve explicacion:
Para este tutorial necesitaremos usar los specials 0x6 0x8 y 0x10 del FRHE
Special 0x6:
Descompila el pokemon del equipo que se encuentre en la posición guardada en la variable 0x8004. Si hay ya un pokemon descompilado, lo recompila.
Special2 0x[variable] 0x8:
Lee el IV del stat guardado en la variable 0x8005. y guarda el resultado en la variable especificada. Los id de los stat son:
- 0x0 - PS
- 0x1 - Ataque
- 0x2 - Defensa
- 0x3 - Velocidad
- 0x4 - Ataque especial
- 0x5 - Defensa especial
Special 0x10:
Establece al IV del stat guardado en 0x8005 el valor guardado en 0x8006. Los ID de los stats son los mismos de arriba, y el valor de los IVs puede ir de 0 a 32 (0x0 - 0x1F)
Ejemplo
Descompilar el primer pokemon del equipo un pokemon, leer su IV de ataque y recompilarlo
setvar 0x8004 0x0 'posición 0 guardada en 0x8004 (variable leida por special 0x6)
special 0x06 'descompilar el pokemon en la posicion 0 del equipo
setvar 0x8005 0x1 'guardar el id del stat ataque en 0x8005 (variable leida por el special 0x8)
special2 0x8006 0x8 'leer el iv y guardarlo en la variable 0x8006 para luego hacer algo con ese valor
special 0x06 'recompilar el pokemon
setvar 0x8004 0x0 'posición 0 guardada en 0x8004 (variable leida por special 0x6)
special 0x06 'descompilar el pokemon en la posicion 0 del equipo
setvar 0x8005 0x1 'guardar el id del stat ataque en 0x8005 (variable leida por el special 0x8)
special2 0x8006 0x8 'leer el iv y guardarlo en la variable 0x8006 para luego hacer algo con ese valor
special 0x06 'recompilar el pokemon
Ahora los 2 scripts que he prometido (tambien están adjuntos en .txt):
Lector de IVs
#dynamic 0x800000
#org @start
lock
faceplayer
msgbox @m1 'soy el genetista bla bla
callstd 0x5
compare LASTRESULT 0x00
if 0x1 goto @cancelado
special 0x09f 'muestra la pantalla de elegir pokemon, el elegido va a 0x8004
waitstate 'espera a que elijas
compare 0x8004 0x6 'los sesultados pueden ir de 0x0 a 0x5, 0x6 es "salir", si elegiste 0x6, te manda a @cancelado
if 0x4 goto @cancelado
special 0x6 'descompilar el pokemon elegido (este especial es incluido por el FRHE)
msgbox @m_hp 'muestra el mensaje de "evaluemos el HP de tu pokemon"
callstd 0x4
setvar 0x8005 0x0 'cargar stat que queremos evalua
special2 0x8006 0x8 'leer el iv
compare 0x8006 31 'comparar el valor del iv con 31
if 0x1 call @v_perfect 'si es igual llamar a @v_perfect (pone la variable 0x8007 a 3)
compare 0x8006 30 'comparar el valor del iv con 30
if 0x0 call @v_bueno 'si esmenor llamar a @v_bueno (pone la variable 0x8007 a 2)
compare 0x8006 20 'comparar el valor del iv con 20
if 0x0 call @v_normal 'si esmenor llamar a @v_normal (pone la variable 0x8007 a 1)
compare 0x8006 10 'comparar el valor del iv con 10
if 0x0 call @v_malo 'si esmenor llamar a @v_malo (pone la variable 0x8007 a 0)
compare 0x8007 0x3
if 0x1 call @perfect
compare 0x8007 0x2
if 0x1 call @bueno
compare 0x8007 0x1
if 0x1 call @normal
compare 0x8007 0x0
if 0x1 call @malo 'comparar la variable 0x8007 con sus diferentes posibles valores y call el script que muestra el mensaje correspondiente
msgbox @m_atk 'como arriba pero para el ataque
callstd 0x4
setvar 0x8005 0x1 'cargar stat
special2 0x8006 0x8 'leer el iv
compare 0x8006 31
if 0x1 call @v_perfect
compare 0x8006 30
if 0x0 call @v_bueno
compare 0x8006 20
if 0x0 call @v_normal
compare 0x8006 10
if 0x0 call @v_malo
compare 0x8007 0x3
if 0x1 call @perfect
compare 0x8007 0x2
if 0x1 call @bueno
compare 0x8007 0x1
if 0x1 call @normal
compare 0x8007 0x0
if 0x1 call @malo
msgbox @m_def 'como arriba pero para el ataque
callstd 0x4
setvar 0x8005 0x2 'cargar stat
special2 0x8006 0x8 'leer el iv
compare 0x8006 31
if 0x1 call @v_perfect
compare 0x8006 30
if 0x0 call @v_bueno
compare 0x8006 20
if 0x0 call @v_normal
compare 0x8006 10
if 0x0 call @v_malo
compare 0x8007 0x3
if 0x1 call @perfect
compare 0x8007 0x2
if 0x1 call @bueno
compare 0x8007 0x1
if 0x1 call @normal
compare 0x8007 0x0
if 0x1 call @malo
msgbox @m_spd 'como arriba pero para el ataque
callstd 0x4
setvar 0x8005 0x3 'cargar stat
special2 0x8006 0x8 'leer el iv
compare 0x8006 31
if 0x1 call @v_perfect
compare 0x8006 30
if 0x0 call @v_bueno
compare 0x8006 20
if 0x0 call @v_normal
compare 0x8006 10
if 0x0 call @v_malo
compare 0x8007 0x3
if 0x1 call @perfect
compare 0x8007 0x2
if 0x1 call @bueno
compare 0x8007 0x1
if 0x1 call @normal
compare 0x8007 0x0
if 0x1 call @malo
msgbox @m_sa 'como arriba pero para el ataque
callstd 0x4
setvar 0x8005 0x4 'cargar stat
special2 0x8006 0x8 'leer el iv
compare 0x8006 31
if 0x1 call @v_perfect
compare 0x8006 30
if 0x0 call @v_bueno
compare 0x8006 20
if 0x0 call @v_normal
compare 0x8006 10
if 0x0 call @v_malo
compare 0x8007 0x3
if 0x1 call @perfect
compare 0x8007 0x2
if 0x1 call @bueno
compare 0x8007 0x1
if 0x1 call @normal
compare 0x8007 0x0
if 0x1 call @malo
msgbox @m_sd 'como arriba pero para el ataque
callstd 0x4
setvar 0x8005 0x5 'cargar stat
special2 0x8006 0x8 'leer el iv
compare 0x8006 31
if 0x1 call @v_perfect
compare 0x8006 30
if 0x0 call @v_bueno
compare 0x8006 20
if 0x0 call @v_normal
compare 0x8006 10
if 0x0 call @v_malo
compare 0x8007 0x3
if 0x1 call @perfect
compare 0x8007 0x2
if 0x1 call @bueno
compare 0x8007 0x1
if 0x1 call @normal
compare 0x8007 0x0
if 0x1 call @malo
special 0x6 'recompilar
release
end
#org @cancelado
msgbox @m2 'Bye!
callstd 0x4
release
end
#org @malo
msgbox @m_malo
callstd 0x4
return
#org @normal
msgbox @m_normal
callstd 0x4
return
#org @bueno
msgbox @m_bueno
callstd 0x4
return
#org @perfect
msgbox @m_perfect
callstd 0x4
return
#org @v_malo
setvar 0x8007 0x0
return
#org @v_normal
setvar 0x8007 0x1
return
#org @v_bueno
setvar 0x8007 0x2
return
#org @v_perfect
setvar 0x8007 0x3
return
'LOS TEXTOS ESTÁN EN INGLÉS PORQUE MI HACK ESTÁ EN INGLES (me da pereza cambiar todo el idioma)
#org @m1
= I'm a genetist! I can know your \npokemon potential! Do you want me to \pexamine any of your pokemon?
#org @m2
= Bye!
#org @m_hp
= Let's test your pokemon's HP...
#org @m_atk
= Let's test your pokemon's ATTACK...
#org @m_def
= Let's test your pokemon's DEFENCE...
#org @m_spd
= Let's test your pokemon's SPEED...
#org @m_sa
= Let's test your pokemon's SP.ATTACK...
#org @m_sd
= Let's test your pokemon's SP.DEFENCE...
#org @m_malo
= Your pokemon has quite BAD genes in \nthis stat, im sorry.
#org @m_normal
= Your pokemon has AVERAGE genes in \nthis stat
#org @m_bueno
= Your pokemon is quite GOOD in this \nstat!
#org @m_perfect
= Your pokemon's genes are PERFECT for \nthis stat!! Congratulations!
#org @start
lock
faceplayer
msgbox @m1 'soy el genetista bla bla
callstd 0x5
compare LASTRESULT 0x00
if 0x1 goto @cancelado
special 0x09f 'muestra la pantalla de elegir pokemon, el elegido va a 0x8004
waitstate 'espera a que elijas
compare 0x8004 0x6 'los sesultados pueden ir de 0x0 a 0x5, 0x6 es "salir", si elegiste 0x6, te manda a @cancelado
if 0x4 goto @cancelado
special 0x6 'descompilar el pokemon elegido (este especial es incluido por el FRHE)
msgbox @m_hp 'muestra el mensaje de "evaluemos el HP de tu pokemon"
callstd 0x4
setvar 0x8005 0x0 'cargar stat que queremos evalua
special2 0x8006 0x8 'leer el iv
compare 0x8006 31 'comparar el valor del iv con 31
if 0x1 call @v_perfect 'si es igual llamar a @v_perfect (pone la variable 0x8007 a 3)
compare 0x8006 30 'comparar el valor del iv con 30
if 0x0 call @v_bueno 'si esmenor llamar a @v_bueno (pone la variable 0x8007 a 2)
compare 0x8006 20 'comparar el valor del iv con 20
if 0x0 call @v_normal 'si esmenor llamar a @v_normal (pone la variable 0x8007 a 1)
compare 0x8006 10 'comparar el valor del iv con 10
if 0x0 call @v_malo 'si esmenor llamar a @v_malo (pone la variable 0x8007 a 0)
compare 0x8007 0x3
if 0x1 call @perfect
compare 0x8007 0x2
if 0x1 call @bueno
compare 0x8007 0x1
if 0x1 call @normal
compare 0x8007 0x0
if 0x1 call @malo 'comparar la variable 0x8007 con sus diferentes posibles valores y call el script que muestra el mensaje correspondiente
msgbox @m_atk 'como arriba pero para el ataque
callstd 0x4
setvar 0x8005 0x1 'cargar stat
special2 0x8006 0x8 'leer el iv
compare 0x8006 31
if 0x1 call @v_perfect
compare 0x8006 30
if 0x0 call @v_bueno
compare 0x8006 20
if 0x0 call @v_normal
compare 0x8006 10
if 0x0 call @v_malo
compare 0x8007 0x3
if 0x1 call @perfect
compare 0x8007 0x2
if 0x1 call @bueno
compare 0x8007 0x1
if 0x1 call @normal
compare 0x8007 0x0
if 0x1 call @malo
msgbox @m_def 'como arriba pero para el ataque
callstd 0x4
setvar 0x8005 0x2 'cargar stat
special2 0x8006 0x8 'leer el iv
compare 0x8006 31
if 0x1 call @v_perfect
compare 0x8006 30
if 0x0 call @v_bueno
compare 0x8006 20
if 0x0 call @v_normal
compare 0x8006 10
if 0x0 call @v_malo
compare 0x8007 0x3
if 0x1 call @perfect
compare 0x8007 0x2
if 0x1 call @bueno
compare 0x8007 0x1
if 0x1 call @normal
compare 0x8007 0x0
if 0x1 call @malo
msgbox @m_spd 'como arriba pero para el ataque
callstd 0x4
setvar 0x8005 0x3 'cargar stat
special2 0x8006 0x8 'leer el iv
compare 0x8006 31
if 0x1 call @v_perfect
compare 0x8006 30
if 0x0 call @v_bueno
compare 0x8006 20
if 0x0 call @v_normal
compare 0x8006 10
if 0x0 call @v_malo
compare 0x8007 0x3
if 0x1 call @perfect
compare 0x8007 0x2
if 0x1 call @bueno
compare 0x8007 0x1
if 0x1 call @normal
compare 0x8007 0x0
if 0x1 call @malo
msgbox @m_sa 'como arriba pero para el ataque
callstd 0x4
setvar 0x8005 0x4 'cargar stat
special2 0x8006 0x8 'leer el iv
compare 0x8006 31
if 0x1 call @v_perfect
compare 0x8006 30
if 0x0 call @v_bueno
compare 0x8006 20
if 0x0 call @v_normal
compare 0x8006 10
if 0x0 call @v_malo
compare 0x8007 0x3
if 0x1 call @perfect
compare 0x8007 0x2
if 0x1 call @bueno
compare 0x8007 0x1
if 0x1 call @normal
compare 0x8007 0x0
if 0x1 call @malo
msgbox @m_sd 'como arriba pero para el ataque
callstd 0x4
setvar 0x8005 0x5 'cargar stat
special2 0x8006 0x8 'leer el iv
compare 0x8006 31
if 0x1 call @v_perfect
compare 0x8006 30
if 0x0 call @v_bueno
compare 0x8006 20
if 0x0 call @v_normal
compare 0x8006 10
if 0x0 call @v_malo
compare 0x8007 0x3
if 0x1 call @perfect
compare 0x8007 0x2
if 0x1 call @bueno
compare 0x8007 0x1
if 0x1 call @normal
compare 0x8007 0x0
if 0x1 call @malo
special 0x6 'recompilar
release
end
#org @cancelado
msgbox @m2 'Bye!
callstd 0x4
release
end
#org @malo
msgbox @m_malo
callstd 0x4
return
#org @normal
msgbox @m_normal
callstd 0x4
return
#org @bueno
msgbox @m_bueno
callstd 0x4
return
#org @perfect
msgbox @m_perfect
callstd 0x4
return
#org @v_malo
setvar 0x8007 0x0
return
#org @v_normal
setvar 0x8007 0x1
return
#org @v_bueno
setvar 0x8007 0x2
return
#org @v_perfect
setvar 0x8007 0x3
return
'LOS TEXTOS ESTÁN EN INGLÉS PORQUE MI HACK ESTÁ EN INGLES (me da pereza cambiar todo el idioma)
#org @m1
= I'm a genetist! I can know your \npokemon potential! Do you want me to \pexamine any of your pokemon?
#org @m2
= Bye!
#org @m_hp
= Let's test your pokemon's HP...
#org @m_atk
= Let's test your pokemon's ATTACK...
#org @m_def
= Let's test your pokemon's DEFENCE...
#org @m_spd
= Let's test your pokemon's SPEED...
#org @m_sa
= Let's test your pokemon's SP.ATTACK...
#org @m_sd
= Let's test your pokemon's SP.DEFENCE...
#org @m_malo
= Your pokemon has quite BAD genes in \nthis stat, im sorry.
#org @m_normal
= Your pokemon has AVERAGE genes in \nthis stat
#org @m_bueno
= Your pokemon is quite GOOD in this \nstat!
#org @m_perfect
= Your pokemon's genes are PERFECT for \nthis stat!! Congratulations!
Perfeccionador de pokemon
#dynamic 0x800000
#org @start
lock
faceplayer
msgbox @m1 'soy el genetista bla bla
callstd 0x5
compare LASTRESULT 0x00
if 0x1 goto @cancelado
msgbox @m3 'Bye!
callstd 0x4
special 0x09f 'elegir pokemon, el elegido va a 0x8004
waitstate
compare 0x8004 0x6
if 0x4 goto @cancelado
showmoney 0x0 0x0 0x0
msgbox @m4 'esto te costara 60000 pavos bla bla...
callstd 0x5
compare LASTRESULT 0x00
if 0x1 goto @cancelado 'si elijes no pagar, salir
checkmoney 60000 0x0 'ver si tienes pasta
compare LASTRESULT 0x0
if 0x1 goto @poor 'si no tienes, decirte que te largues
paymoney 60000 0x0 'pagar
updatemoney 0x0 0x0 0x0 'reflejar los cambios en la caja de dinero
special 0x6 'descompilar el poke
setvar 0x8005 0x0 'poner el iv de PS en la var 0x8005
setvar 0x8006 31 'poner el valor maximo en la var 0x8006
special 0x10 'ejecutar el cambio del valor de iv
setvar 0x8005 0x1 'lo mismo que arriba para los demas stats
setvar 0x8006 31
special 0x10
setvar 0x8005 0x2
setvar 0x8006 31
special 0x10
setvar 0x8005 0x3
setvar 0x8006 31
special 0x10
setvar 0x8005 0x4
setvar 0x8006 31
special 0x10
setvar 0x8005 0x5
setvar 0x8006 31
special 0x10
special 0x6 'recompilar
hidemoney 0x0 0x0 'ocultar la pasta
msgbox @m5 'Bueno empecemos!
callstd 0x4
fadescreen 0x1 'fade para que parezca que el cientifico hace algo aunque el script ya lo ha hecho todo ¬¬
pause 0x90
fadescreen 0x0
msgbox @m6 'fin del script normal
callstd 0x4
release
end
#org @cancelado
msgbox @m2 'fin del scriptsi canclas
callstd 0x4
hidemoney 0x0 0x0
release
end
#org @poor
msgbox @mpoor 'fin del scriptsi eres pobre
callstd 0x4
hidemoney 0x0 0x0
release
end
'strings
#org @m1
= Hey! Did you know pokemon genes can \nbe modified? It's dangerous, \pexpensive and pokemon usually don't \nlike it, but I can rise one of your \ppokemon into
perfection!!! \nDo you want to try?
#org @m3
= Which pokemon should I modify?
#org @m4
= The whole proccess will cost 60000[$]\nDo we have a deal?
#org @m5
= Ok, let's start!
#org @m6
= Finished! Your pokemon is now PERFECT!
#org @mpoor
= Oh, im sorry but you cant afford this.
#org @m2
= Bye!
#org @start
lock
faceplayer
msgbox @m1 'soy el genetista bla bla
callstd 0x5
compare LASTRESULT 0x00
if 0x1 goto @cancelado
msgbox @m3 'Bye!
callstd 0x4
special 0x09f 'elegir pokemon, el elegido va a 0x8004
waitstate
compare 0x8004 0x6
if 0x4 goto @cancelado
showmoney 0x0 0x0 0x0
msgbox @m4 'esto te costara 60000 pavos bla bla...
callstd 0x5
compare LASTRESULT 0x00
if 0x1 goto @cancelado 'si elijes no pagar, salir
checkmoney 60000 0x0 'ver si tienes pasta
compare LASTRESULT 0x0
if 0x1 goto @poor 'si no tienes, decirte que te largues
paymoney 60000 0x0 'pagar
updatemoney 0x0 0x0 0x0 'reflejar los cambios en la caja de dinero
special 0x6 'descompilar el poke
setvar 0x8005 0x0 'poner el iv de PS en la var 0x8005
setvar 0x8006 31 'poner el valor maximo en la var 0x8006
special 0x10 'ejecutar el cambio del valor de iv
setvar 0x8005 0x1 'lo mismo que arriba para los demas stats
setvar 0x8006 31
special 0x10
setvar 0x8005 0x2
setvar 0x8006 31
special 0x10
setvar 0x8005 0x3
setvar 0x8006 31
special 0x10
setvar 0x8005 0x4
setvar 0x8006 31
special 0x10
setvar 0x8005 0x5
setvar 0x8006 31
special 0x10
special 0x6 'recompilar
hidemoney 0x0 0x0 'ocultar la pasta
msgbox @m5 'Bueno empecemos!
callstd 0x4
fadescreen 0x1 'fade para que parezca que el cientifico hace algo aunque el script ya lo ha hecho todo ¬¬
pause 0x90
fadescreen 0x0
msgbox @m6 'fin del script normal
callstd 0x4
release
end
#org @cancelado
msgbox @m2 'fin del scriptsi canclas
callstd 0x4
hidemoney 0x0 0x0
release
end
#org @poor
msgbox @mpoor 'fin del scriptsi eres pobre
callstd 0x4
hidemoney 0x0 0x0
release
end
'strings
#org @m1
= Hey! Did you know pokemon genes can \nbe modified? It's dangerous, \pexpensive and pokemon usually don't \nlike it, but I can rise one of your \ppokemon into
perfection!!! \nDo you want to try?
#org @m3
= Which pokemon should I modify?
#org @m4
= The whole proccess will cost 60000[$]\nDo we have a deal?
#org @m5
= Ok, let's start!
#org @m6
= Finished! Your pokemon is now PERFECT!
#org @mpoor
= Oh, im sorry but you cant afford this.
#org @m2
= Bye!
Espero que me haya explicado bien :blush:
Por cierto, sois completamente libres de usar estos scripts en vuestros hacks si lo deseáis, no es necesario dar crédito (si quiereis podeis dar crédito a Thymocyte o Adenosin) pero si me gustaría que me avisarais de que lo vais a usar (siempre mola saber que has ayudado a alguien!)
Venga ánimo!
Última edición por un moderador: