8501-GBA_|_Scripting_|_\[Pokémon_específico]_Script_de_"Takepokemon"_v2.0
#8
Javi4315♪ 13374
Solución para Ruby
___________________________
Bueno, hace algún tiempo surgió la duda de si se podía entregar un pokémon específico. Efectivemente, se puede (¿Qué cómo lo sé? Bueno, ¿Si no lo supiera vendría a explicar cómo se hace? xDD).

Creí que la mejor forma de hacerlo era combinando el script de la guardería (más concretamente el del anterior takepokémon) y el de algún tradeo del juego original. Eso me llevó a investigarlo y bueno, fui haciendo cambios, pruebas, etc, hasta que al final llegué a una conclusión: No se necesita para nada el script del tradeo.

Sí, porque, investigando el script del tradeo pude darme cuenta de que tan sólo se necesita un poco de... emm... ¿Astucia? (No se me ocurre otra cosa ahora mismo xD) para modificar un poco el anterior script (el del takepokémon) haciendo uso de unas variables y bueno, dió resultado.

Pero bueno, vamos a verlo más a fondo.

¿Tienes 1 minuto y 18 segundos?

Si dispones de ese tiempo, entonces échale un ojo al video de demostración:

YouTube Video

El script


#org @comienzo
lock
faceplayer
setvar 0x4060 0x19 => Escogemos una variable y guardamos el valor del pokémon (ver *1)
msgbox @1 MSG_YESNO => Nos pregunta si queremos darle el pokémon (no necesario)
compare LASTRESULT 0x1 => Comprueba el resultado del MSG_YESNO
if 0x1 goto @continuar => Si hemos dicho "Yes" va a @continuar
msgbox @2 MSG_NORMAL => Lo que dice si elegimos "No"
release
end

#org @continuar
fadescreen 0x1
special 0xBC => Abre el menú pokémon
waitstate
compare 0x8004 0x6 => Comprueba si hemos salido del menú o pulsado "B"
if 0x4 goto @salir => Si hemos hecho lo anterior, va a @salir
special2 0x8005 0xBA => Comprueba cual es el pokémon elegido
copyvar 0x4061 0x8005 => Elegimos una variable y guardamos el valor de la 8005 (ver *2)
bufferpokemon 0x0 0x8005 => Guarda el nombre del pokémon en
comparevars 0x4060 0x4061 => Compara si ambas variables tienen el mismo valor (ver *3)
if 0x1 goto @dar => Si tienen el mismo valor va a @dar
msgbox @3 MSG_NORMAL => Lo que nos dice si es otro Pokémon
release
end

#org @salir
msgbox @4 MSG_NORMAL => Lo que nos dice habíamos pulsado B o salido del menú
release
end

#org @dar
msgbox @5 MSG_NORMAL => Lo que dice si damos el pokémon especificado
special 0x176
cmdc3 0x2F => Este comando y el de arriba nos quitan al pokémon del menú
release
end

#org @1
= [player], recuerdas que prometiste\ndarme un PIKACHU ¿Verdad?\pBueno, ¿Has venido a dármelo?

#org @2
= Bueno, vale, pero ya sabes que me\nlo tienes que dar.

#org @3
= Jeje, eso es un , no un\nPIKACHU.

#org @4
= ¿No me lo vas a dar?\pBueno, lo que quieras, pero ya\nsabes que me lo debes.

#org @5
= ¡Un Pikachu!\pGracias, [player], sabes que me\nencantan los PIKACHU.


Bueno, ahora explicaré algunas cosas:

*1. Hay que elegir una varible que se pueda utilizar (preferentemente de la 0x40FF hacia atrás). Yo he escogido la variable 0x4060 a la que le he asignado el valor 0x19 ¿Por qué? Porque pikachu tiene el número 25, que en hexadecimal es el 19. Entonces, lo que debemos hacer es guardar en la varible a nuestro pokémon.

*2. Ahora elegimos otra variable, en mi caso, la 0x4061. Lo que debemos hacer es copiar el valor de la variable 0x8005 a nuestra nueva variable. Esto lo hacemos porque la varible 0x8005 acaba de comprobar cuál es el pokémon elegido, entonces nos da la posibilidad de escribir su valor en otra variable para que no perdamos dicha información.

*3. Muy bien, ahora tenemos guardado el valor hexadecimal del pokémon que queremos que se entregue en una variable (0x4060) y el valor del pokémon que hemos entregado en otra (0x4061). Entonces, lo único que hay que hacer ahora es comparar ambas variables con el comando "comparevars" de XSE. Si resulta que ambas variables tienen el mismo valor ¿Qué pasa? Pues que habremos entregado el pokémon que queríamos que fuese entregado.

¡Y ya está!

Bueno, pues eso es todo. Supongo que estará bien explicado xD. No obstante, si tenéis cualquier duda, problema, sugerencia, etc, no dudéis en postear ;D

Saludos!!

PD: Cosarara, eso es ASM ¿No? xD.
PD2: Perdón por la mala calidad del video...