tuts_gba
Thread Id: 8501
Thread Name: GBA | Scripting | [Pokémon específico] Script de "Takepokemon" v2.0
#0
Javi4315♪ 13374
¡Ir a la versión 2.0!
___________________________
¿Qué tal? Bueno pues vengo a traerles un pequeño tutorial sobre cómo hacer un script de takepokemon (por llamarlo así, ya que consiste en dar uno de nuestros pokémon). Pero antes de comenzar la explicación, pondré un video mostrando el script (disculpen por la baja calidad del video xD):

YouTube Video

Bien, empecemos con la explicación. Esta tarde he entrado en wah y he visto qué había nuevo. En el foro de dudas, me he encontrado con un tema en el que se preguntaba si existía un comando contrario al givepokémon (es decir, que en vez de darte un pokémon, te lo quite), a lo que Eing ha respondido:

Para quitar los pokémon del equipo, puedes hacerlo de dos formas, una usando ASM, que si no sabes no te recomendaria hacerla, y la otra es usando el script de la guardería, pero a tu estilo, es decir en sí solo copia la sintáxis del script.


Y, aunque esto ya lo sabía (lo que pasa es que nunca me había dado por investigar el script de la guardería), hoy me he dispuesto a hacerlo. Así que he abierto el script de la guardería y me he encontrado con esto:



Un script un tanto largo xD, aun así me he puesto a leer y he identificado la parte que realmente nos interesa (está en negrita). Esa parte es simplemente la que tenemos que manipular para hacer nuestro script. Así que aquí dejo el script y su pequeña explicación para XSE y para pokescript:





Ese sería el cuerpo del script, pero podéis jugar con los comandos para hacer un script más complejo.

Bueno, creo que está bien explicado y es un tutorial interesante (aunque haya gente que sepa hacerlo xD). Así que espero que os guste y si tienen alguna duda o problema no duden en preguntar.

Por cierto, pueden hacer que se muestre el nombre del pokémon que vayan a entregar usando (como si utilizaran [rival] para que se muestre el nombre del rival)

IMPORTANTE: Se me había olvidado decirlo, sólo lo he probado en fire red, no sé si en ruby funcionará. De todas formas pronto lo comprobaré.
#1
Gut_Bro 14808
Orale!!

Muy bueno, y útil, te doy un + por el trabajo tan bueno :awesome:
De seguro le va a servir a muchos, y bueno, en FR hay 2 guarderías una bajo ciudad celeste y la otra en la isla quarta, así no se 'desperdiciaría' la segunda guardería xD.

¡Muy bueno, me gustó!:)
#2
vediel 12331
men este script convinado con un give o otros comandos seria un gran script algo como una especie de torneo donde pierdes un pokemon si pierdes una batalla o ganas uno poke si ganas la batalla seria genial un script asi :awesome: el lio serai hacerlo a la perfeccion '¬¬ ;) gracias men te lo mereses
#3
trifindo 12318
Gran descubrimiento, tío.:heart:

Te mereces un Gracias +1 y REPU+1. :D

Sigue así.:D
#4
goldos 14928
demasiado bueo y util ese script\
muy pero muy bueno
me sera de ayuda en mi hack rom
ejej
tengo una idet
jaja
graccias man
+gracias en e rimer post
:heart: me encano ese script
jejeje
#5
Loony Boo♪ 12263
Una excelente investigación, aunque ya había visto este método en Pokecommunity, pero igualmente está bien. He apreciado unos diversos comandos, entre ellos, un subvar, tengo la corazonada de que se podría borrar el Pokémon con la combinación apropiada, tal vez me ponga a investigar el comando yo también.

Saludos.
#6
Javi4315♪ 13374
Iniciado por Dark_Moltres

Una excelente investigación, aunque ya había visto este método en Pokecommunity, pero igualmente está bien. He apreciado unos diversos comandos, entre ellos, un subvar, tengo la corazonada de que se podría borrar el Pokémon con la combinación apropiada, tal vez me ponga a investigar el comando yo también.

Saludos.


¿Un subvar? Supuestamente eso de borrar el pokémon debería estar aquí (creo yo), que es cuando te entrega el pokemon:



La verdad es que esa parte no la miré, sólo me centré en la parte en la que tú das el pokémon. Si no estoy muy ocupado mañana y tengo ganas xD quizás lo mire. De todas formas, si lo averiguas, pues lo posteas :P

Saludos!!
#7
cosarara97 12296
Creo que el pollito El boo el Capitán Pollo se refería a esto:
http://www.pokecommunity.com/showthread.php?t=206138
:awesome:
#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...
#9
Zesk12 16124
HOMBRE MUCHISIMAS GRACIAS JAVI:furia: !!!!!! Parece que mi duda te llevo a encontrar algo muchisimo mejor !!!! te agradesco y a probarlo en mi room !!!! :D
#10
Gut_Bro 14808
¡Qué ingenio el tuyo!

Me sorprendes y me vuelves a sorprender, hombre! deberías aportarles ideas para los nuevos juegos o algo asi jajaja :D
#11
Javi4315♪ 13374
Simplemente quiero decir que se puede hacer en ruby y el script es exactamente el mismo (casi). En ruby hay un problema de que al entrar al menú queda inutilizado el efecto del "lock", no sé por qué, pero me imagino que poniendo algunos lockalls en los lugares apropiados se arreglará. No voy a entrar en eso porque se sale del tutorial.

Bueno, lo único que hay que hacer para que funcione en ruby es cambiar un comando. El "special 0x176" por "special 0xBB" y debería funcionar perfectamente.
#12
MasterBlack 25118
Gracias Javi4315♪ esto sin duda es algo lo cual muchos encontraban como un obstáculo para seguir su historia al pie de la letra, incluyéndome XD, la ¿mala calidad del video? eso no importa lo que importa es la calidad del scrip, me agrada que no sea en ASM (no se mucho de esto) Así que GRACIAS.

SuerT
#13
RedMort 26611
Me va perfectamente en ruby.
Solo una cosa, lo edite porque quiero que te quite directamente cierto pokemon, no que elijas tu, entonces lo deje asi:

#dynamic 0x800000

#org @comienzo
lock
faceplayer
setvar 0x40DD 0x9B
msgbox @5 MSG_NORMAL
special 0xBB
cmdc3 0x2F
setvar 0x40DC 0x9B
special 0xBB
cmdc3 0x2F
release
end

#org @5
= Dame tu cyndaquil!

Porque quiero quitarle 2 cyndaquils, pero lo que me ocurre es que me quita los 2 primeros pokes de mi equipo, sea cuales sean.
¿Que comando me falta para que me quite solo los cyndaquils? :S
#14
Javi4315♪ 13374
Iniciado por RedMort
Me va perfectamente en ruby.
Solo una cosa, lo edite porque quiero que te quite directamente cierto pokemon, no que elijas tu, entonces lo deje asi:

#dynamic 0x800000

#org @comienzo
lock
faceplayer
setvar 0x40DD 0x9B
msgbox @5 MSG_NORMAL
special 0xBB
cmdc3 0x2F
setvar 0x40DC 0x9B
special 0xBB
cmdc3 0x2F
release
end

#org @5
= Dame tu cyndaquil!

Porque quiero quitarle 2 cyndaquils, pero lo que me ocurre es que me quita los 2 primeros pokes de mi equipo, sea cuales sean.
¿Que comando me falta para que me quite solo los cyndaquils? :S


El problema radica en cómo determinar la posición del Cyndaquil en el equipo. Es decir, de la otra forma se determina porque tú lo eliges, pero de otra forma ¿Cómo conseguimos hacer eso? Quizás puedas tratar de comprobar cada pokémon del equipo y en caso de que sea Cyndaquil eliminarlo. Pero ahora mismo no sabría cómo comprobar eso sin abrir el menú...
#15
RedMort 26611
te refieres a hacer bufferpartypokemon para comprobar si tienes a cyndaquil y ponerle el takepokemon al if 0x1?
Lo probare, si me sale ya edito :)
#16
Natsu Dragneel 23919
Este script es mejor si el Si o no porque puede simular un robo.
El team rocket no te pregunta si te puede robar los pokemon, jajaja.
Me gusta el Script talvez lo use.
#17
Donelem 26989
Gracias por el tutorial :)
#18
Javi4315♪ 13374
Iniciado por AlphaYOmega
Este script es mejor si el Si o no porque puede simular un robo.
El team rocket no te pregunta si te puede robar los pokemon, jajaja.
Me gusta el Script talvez lo use.


Supongo que sabrás que el yes/no lo puedes quitar ¿Verdad? xDD
De todas formas es difícil simular un robo, tienes que seleccionar al pokémon, con lo cual, si lo quieres hacer sin seleccionarlo, la cosa se complica. Pero bueno, es cuestión de estudiarlo y se encuentra la solución.