FR y EM | Scripting | Wonder Trade

Avisos


Like Tree34Gracias
Respuesta
 
Herramientas Desplegado
  #11  
18/10/2017
Predeterminado Respuesta: FR | Scripting | Wonder Trade
Dicho por Lunos
Como dije, no me interesa que el Pokémon que el Jugador intercambie vaya a la guarderia, eso es lo que hacen el "special 0x176" y "cmdc3 0x2F".
Examiné muy por arriba el script de la guardería, y por lo que vi, me atrevo a decir que ese es el primer paso antes de destruir al pokémon; hacer que vaya a la guardería.
Por la siguiente razón:

No hay un comando o special que nos permita destruir Pokémon que se encuentran en el equipo del jugador, y si lo hay lo desconozco.
Por lo tanto, primero hay que quitarle el Pokémon al jugador, el resto es historia conocida supongo.
Discord: DrakoVinyl #3790
  #12  
18/10/2017
Corazón Respuesta: FR | Scripting | Wonder Trade
Dicho por ♠Subzero♠ Ver mensaje
Examiné muy por arriba el script de la guardería, y por lo que vi, me atrevo a decir que ese es el primer paso antes de destruir al pokémon; hacer que vaya a la guardería.
Es una posibilidad, sin lugar a dudas. El tema es que yo estoy buscando y leyendo un poco por aqui y por allá, pero no veo demasiada información para aprender el como llevar a cabo tu sugerencia de destruir al Pokémon depositado en la guarderia que se encuentra en la RAM.

EDITO: De hecho, llegué a preguntar en el Discord de PokeCommunity y parece que la unica forma de modificar datos que fueron añadidos en la RAM es mediante ASM, lo que significa que no existe forma de remover totalmente un Pokémon con los scripts que brinda XSE y que la ROM posee.

Aun asi, agradezco el intento de sugerencia, he leido varias cosas que nunca antes me habian interesado.

ON: Probaré el script en Emerald con correcciones menores. Si funciona correctamente, editaré el post principal correspondientemente.
EDITO2: Añadida la rutina compilada para Pokémon Emerald y el script de Wonder Trade adaptado a Emerald al post principal.
Gracias: SUBZER0

Última edición por Lunos; 18/10/2017 a las 08:57
  #13  
18/10/2017
Predeterminado Re: FR | Scripting | Wonder Trade
Error 13 callasm ;/
  #14  
18/10/2017
Predeterminado Respuesta: Re: FR | Scripting | Wonder Trade
Dicho por Aight Ver mensaje
Error 13 callasm ;/
Veo venir que has copiado el callasm 0x8FFFFFF+1 con el +1. Debes sumarle tú el uno, no dejarlo tal cual, al igual que también debes cambiar la dirección FFFFFF por donde tú hayas insertado la rutina.
Gracias: Lunos


  #15  
19/10/2017
Predeterminado Re: Respuesta: Re: FR | Scripting | Wonder Trade
Dicho por AaRóN Ver mensaje
Veo venir que has copiado el callasm 0x8FFFFFF+1 con el +1. Debes sumarle tú el uno, no dejarlo tal cual, al igual que también debes cambiar la dirección FFFFFF por donde tú hayas insertado la rutina.
gracias, depois que falo com o personagem, eu viro o personagem que falei > https://imgur.com/a/V86fp
mas depois entro numa casa e saio e volta ao normal. tem como resolver isso ?

gracias, después de que hablo con el personaje, veo al personaje que he hablado> https://imgur.com/a/V86fp
pero luego entro en una casa y salgo y vuelve a la normalidad. ¿tiene que resolver esto?
  #16  
19/10/2017
Corazón Respuesta: Re: Respuesta: Re: FR | Scripting | Wonder Trade
Dicho por Aight Ver mensaje
gracias, depois que falo com o personagem, eu viro o personagem que falei > https://imgur.com/a/V86fp
mas depois entro numa casa e saio e volta ao normal. tem como resolver isso ?

gracias, después de que hablo con el personaje, veo al personaje que he hablado> https://imgur.com/a/V86fp
pero luego entro en una casa y salgo y vuelve a la normalidad. ¿tiene que resolver esto?
Antes de implementar el Wonder Trade, ¿haz hecho algun otro cambio en tu ROM? ¿Has cambiado algunos tiles u OWs, por ejemplo?

Ademas de eso, ¿podrias abrir tu ROM en un emulador de GBA y decirme si en la introducción, salta la palabra "Presents" con letras verdes o no?


Si salen, significa que estás utilizando una ROM de Pokémon Fire Red v1.1, y ese es un problema.
Gracias: SUBZER0
  #17  
19/10/2017
Predeterminado Re: Respuesta: Re: Respuesta: Re: FR | Scripting | Wonder Trade
Dicho por Lunos Ver mensaje
Antes de implementar el Wonder Trade, ¿haz hecho algun otro cambio en tu ROM? ¿Has cambiado algunos tiles u OWs, por ejemplo?

Ademas de eso, ¿podrias abrir tu ROM en un emulador de GBA y decirme si en la introducción, salta la palabra "Presents" con letras verdes o no?


Si salen, significa que estás utilizando una ROM de Pokémon Fire Red v1.1, y ese es un problema.
gracias, he arreglado ya, ¿tiene cómo poner un nivel mínimo de pokémon para cambiar?
  #18  
20/10/2017
Corazón Respuesta: Re: Respuesta: Re: Respuesta: Re: FR | Scripting | Wonder Trade
Dicho por Aight Ver mensaje
gracias, he arreglado ya, ¿tiene cómo poner un nivel mínimo de pokémon para cambiar?
De ser posible, seguramente se necesite una Rutina ASM.
Yo busqué un poco y desafortunadamente no pude encontrar nada.
Gracias: SUBZER0
  #19  
30/10/2017
Predeterminado Respuesta: Re: Respuesta: Re: Respuesta: Re: FR | Scripting | Wonder Trade
Curioseando tu script (el de fire red, que es el que mas me interesa XD), @Lunos, se me ocurrieron un par de cosas para "mejorarlo" un poco, pero antes de ahondar en ese asunto, me gustaría mencionar dos cosas:

1- En tu script, hay unas lineas que resultan innecesarias (mas abajo las detallo).
2- Para aquellos que quieran usar el script en Rojo Fuego (ESP), decir que la rutina que elimina el Pokémon, es 100% funcional en dicha ROM.


Estas son las lineas que no es necesario que estén en el script:

Código:
#dynamic 0x71BBA0

#org @start
faceplayer
lockall
msgbox @#String1 0x5
compare 0x800D 0x1
if 0x1 goto @snippet1
msgbox @#String2 0x6
releaseall
end

#org @snippet1
countpokemon
compare 0x800D 0x6
if 0x1 goto @snippet2
msgbox @#String3 0x6
special 0x9F
waitstate
compare 0x8004 0x6
if 0x4 goto @snippet3
goto @snippet4

#org @snippet2
msgbox @#String4 0x6
releaseall
end

#org @snippet3
msgbox @#String2 0x6
releaseall
end

#org @snippet4
random 0x19C
compare 0x800D 0x0
if 0x1 goto @snippet4
compare 0x800D 0xFB
if 0x3 goto @snippet5
compare 0x800D 0x115
if 0x4 goto @snippet5
goto @snippet4

#org @snippet5
bufferpokemon 0x0 0x800D
showpokepic 0x800D 0xA 0x3
waitcry
givepokemon 0x800D 0x5 0x0 0x0 0x0 0x0
callasm 0x8FFFFFF+1
pause 0x13
fanfare 0x13E
msgbox @#String5 0x4
waitfanfare
closeonkeypress
hidepokepic
msgbox @#String6 0x5
compare 0x800D 0x1
if 0x1 call @snippet6
msgbox @#String2 0x6
releaseall
end

#org @snippet6
countpokemon
subvar 0x800D 0x1
copyvar 0x8004 0x800D
fadescreen 0x1
special 0x9E
waitstate
return

#org @#String1
= Wanna wonder trade?

#org @#String2
= Come back anytime.

#org @#String3
= Select the Pokémon you wanna trade.

#org @#String4
= I'm sorry, your team is full.\nCome back later.

#org @#String5
= [player] got a [buffer1]!

#org @#String6
= Wanna give it a nickname?

¿Por qué están demás?
Pues, ahí estas comprobando si el equipo del prota está completo. Sabiendo que este es un script de intercambio, no tiene mucho sentido ya que no importa si el equipo está lleno dado que cuando des un pokémon, vas a quedar con un espacio libre el cual va a ser llenado por el pokémon que recibirás. ¿Lo pillas?
Por cierto, no lo resalté en el script, pero es más acertado poner el callasm antes del givepokemon y no después (sobre todo si borras las lineas que te he marcado).
Además, te comento que tras el special 0x9E, tienes que poner lock y faceplayer, puesto que luego de salir de la pantalla de poner mote, el mini con el que estas hablando se "libera" de estos dos últimos comandos. Tenlo en cuenta si el NPC con que vas a hablar está caminando.

Ahora bien, las "mejoras" que le hice son las siguientes:

1- En tu script, existe una pequeña probabilidad de que el Pokémon que entregas, y el Pokémon que recibes, sean de la misma especie (por ejemplo, entregas un charizard, y recibes un charizard ¿Pa' ke quieres cambiarlo si vas a recibir uno igual?). Pues he añadido un par de lineas para que eso jamás pueda pasar.

2- ¿Que tal si no te gusta el Pokémon que vas a recibir?
En cuanto a eso, añadí la "opción" de que se pueda cancelar el intercambio.

Se me han ocurrido más cosas que añadirle, pero me parece ya mucho, y puede que el intercambio "prodigioso" quede muy "sobrecargado". Aunque, una opción que no estaría mal agregar es la de verificar si el pokémon que se obtiene luego del random, es uno de los que evolucionan mediante intercambio para así, hacerlo evolucionar.


Sin más que decir, dejo mi versión del script con todo lo que he dicho que le he agregado.

Código:
#dynamic 0x71BBA0
#org @inicio
lock
faceplayer
pause 0x14
applymovement LASTTALKED @move1
waitmovement 0x0
msgbox @msg1 MSG_YESNO
compare LASTRESULT 0x1
if 0x1 goto @snippet1
msgbox @msg8 MSG_NORMAL
release
end

#org @snippet1
msgbox @msg3 MSG_NORMAL
special 0x9F
waitstate
lockall
faceplayer
compare 0x8004 0x6
if 0x4 goto @snippet2
goto @snippet3

#org @snippet2
msgbox @msg8 MSG_NORMAL
release
end

#org @snippet3
random 0x19C
comparevars 0x8004 LASTRESULT
if 0x1 goto @snippet3
compare LASTRESULT 0x0
if 0x1 goto @snippet3
compare LASTRESULT 0xFB
if 0x3 goto @snippet4
compare LASTRESULT 0x115
if 0x4 goto @snippet4
goto @snippet3

#org @snippet4
bufferpartypokemon 0x1 0x8004
copyvar 0x8000 LASTRESULT
bufferpokemon 0x0 0x8000
showpokepic 0x8000 0xA 0x3
msgbox @msg4 MSG_YESNO
compare LASTRESULT 0x0
if 0x1 goto @snippet5
callasm 0xFFFFFF+1
givepokemon 0x8000 0x5 0x0 0x0 0x0 0x0
pause 0x13
fanfare 0x13E
msgbox @msg5 MSG_KEEPOPEN
waitfanfare
closeonkeypress
hidepokepic
msgbox @msg6 MSG_YESNO
compare LASTRESULT 0x1
if 0x1 call @snippet6
msgbox @msg2 MSG_NORMAL
release
end

#org @snippet5
hidepokepic
msgbox @msg7 MSG_YESNO
compare LASTRESULT 0x0
if 0x1 goto @snippet7
goto @snippet8

#org @snippet6
countpokemon
subvar LASTRESULT 0x1
copyvar 0x8004 LASTRESULT
fadescreen 0x1
special 0x9E
waitstate
lock
faceplayer
return

#org @snippet7
msgbox @msg8 MSG_NORMAL
release
end

#org @snippet8
msgbox @msg9 MSG_YESNO
compare LASTRESULT 0x1
if 0x1 goto @snippet1
goto @snippet3

#org @msg1
= ¿Quieres intercambiar un POKéMON?

#org @msg2
= ¡Vuelve cuando quieras!

#org @msg3
= Elige el POKéMON para\nintercambiar.

#org @msg4
= Entonces, ¿quieres cambiar tu\n[buffer2] por mi [buffer1]?

#org @msg5
= [player] obtuvo un [buffer1].

#org @msg6
= ¿Quieres ponerle un mote a\n[buffer1]?

#org @msg7
= ¿Quieres probar de nuevo?

#org @msg8
= Vale, ya veo...

#org @msg9
= ¡Excelente, buena decisión!\p¿Quieres elegir otro de tus\nPOKéMON para intercambiar?

#org @move1
#raw 0x62
#raw 0xFE


La diferencia no es mucha con respecto a tu script, pero el resultado es uno un poco más completo.
Igualmente, creo que a este tipo de scripts se le puede sacar mucho mas provecho.




Dicho por Lunos Ver mensaje
De ser posible, seguramente se necesite una Rutina ASM.
Yo busqué un poco y desafortunadamente no pude encontrar nada.
Si se quiere establecer un nivel mínimo para el Pokémon que va a dar el jugador, no es necesario ASM. Con los comandos del ROM se puede perfectamente.
concretamente, usarías la dirección de una variable dinámica (RAM), donde pones tu el nivel. Y, usando la dirección RAM de dicha variable, comparas el nivel (también "vía RAM") de cierto slot dentro del equipo.

Te dejo las direcciones RAM de donde se almacena el nivel de cada Pokémon dentro del equipo (en orden para no liarnos XD)


Slot 1:
0x20242D8

Slot 2:
0x202433C

Slot 3:
0x20243A0

Slot 4:
0x2024404

Slot 5:
0x2024468

Slot 6:
0x20244CC

Y si se quiere que el Pokémon que recibas tenga el mismo nivel que el Pokémon que das, ahí tendrás que combinar lo visto arriba, con lo que tu detallas en →este← tutorial.


Un saludo!
Discord: DrakoVinyl #3790

Última edición por SUBZER0; 30/10/2017 a las 15:13
  #20  
30/10/2017
Corazón Re: Respuesta: FR y EM | Scripting | Wonder Trade
Dicho por ♠Subzero♠ Ver mensaje
¿Por qué están demás?
Pues, ahí estas comprobando si el equipo del prota está completo. Sabiendo que este es un script de intercambio, no tiene mucho sentido ya que no importa si el equipo está lleno dado que cuando des un pokémon, vas a quedar con un espacio libre el cual va a ser llenado por el pokémon que recibirás. ¿Lo pillas?

Por cierto, no lo resalté en el script, pero es más acertado poner el callasm antes del givepokemon y no después (sobre todo si borras las lineas que te he marcado).
El callasm no funciona correctamente antes del givepokemon, por eso puse la comprobación del equipo de el Jugador. Eres libre de probarlo tú mismo, ponte 6 Pokémon y activa el script, perderás uno de tus Pokémon.

Dicho por ♠Subzero♠ Ver mensaje
1- En tu script, existe una pequeña probabilidad de que el Pokémon que entregas, y el Pokémon que recibes, sean de la misma especie (por ejemplo, entregas un charizard, y recibes un charizard ¿Pa' ke quieres cambiarlo si vas a recibir uno igual?). Pues he añadido un par de lineas para que eso jamás pueda pasar.
Rechazado, el punto del Intercambio Prodigioso es que el resultado sea aleatorio. Vos entregás un Pokémon y recibís uno a cambio sin saber cual Pokémon será. Cabe mencionar que no solo es logico que exista la posibilidad de recibir exactamente el mismo Pokémon que entregaste puesto que de nuevo, el intercambio es aleatorio, si no que tambien ocurre como tal en Pokémon X/Y (y recordemos que la función en X/Y es de Jugador a Jugador, no de Jugador a IA).

Dicho por ♠Subzero♠ Ver mensaje
2- ¿Que tal si no te gusta el Pokémon que vas a recibir?
En cuanto a eso, añadí la "opción" de que se pueda cancelar el intercambio.
Rechazado. Vos entregás un Pokémon y recibís uno a cambio sin saber cual Pokémon será, ese es el punto.

Dicho por ♠Subzero♠ Ver mensaje
una opción que no estaría mal agregar es la de verificar si el pokémon que se obtiene luego del random, es uno de los que evolucionan mediante intercambio para así, hacerlo evolucionar.
Esa si es una buena idea que no consideré, el tema está en que tendria que insertar otra rutina mas (la de forzar una evolución que posteó @jiangzhengwenjz justo aqui) y está el hecho de que quien quiera usar mi script, siempre lo puede expandir si lo vé necesario. Lo añadiré como una nota relevante al post principal.

Dicho por ♠Subzero♠ Ver mensaje
Además, te comento que tras el special 0x9E, tienes que poner lock y faceplayer, puesto que luego de salir de la pantalla de poner mote, el mini con el que estas hablando se "libera" de estos dos últimos comandos. Tenlo en cuenta si el NPC con que vas a hablar está caminando.
Como tal, la base que creé es lo suficientemente solida por si sola, quien decida usarla siempre puede encargarse de añadir ese tipo de detalles.

EDITO:
Dicho por ♠Subzero♠ Ver mensaje
Si se quiere establecer un nivel mínimo para el Pokémon que va a dar el jugador, no es necesario ASM. Con los comandos del ROM se puede perfectamente.
concretamente, usarías la dirección de una variable dinámica (RAM), donde pones tu el nivel. Y, usando la dirección RAM de dicha variable, comparas el nivel (también "vía RAM") de cierto slot dentro del equipo.

Te dejo las direcciones RAM de donde se almacena el nivel de cada Pokémon dentro del equipo (en orden para no liarnos XD)


Slot 1:
0x20242D8

Slot 2:
0x202433C

Slot 3:
0x20243A0

Slot 4:
0x2024404

Slot 5:
0x2024468

Slot 6:
0x20244CC

Y si se quiere que el Pokémon que recibas tenga el mismo nivel que el Pokémon que das, ahí tendrás que combinar lo visto arriba, con lo que tu detallas en →este← tutorial.


Un saludo!
A quien deberias estar citando es a @Aight, por cierto. La función de Intercambio Prodigioso no tiene un requisito de nivel por lo que yo no pienso implementar uno en mi base, y tampoco me gusta la idea de todas formas.
Gracias: SUBZER0

Última edición por Lunos; 30/10/2017 a las 15:56 Razón: Correcciones, Aclaraciones y coherencia.
Respuesta

Herramientas
Desplegado

Permisos para publicar mensajes
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los BB code están Activado
Los Emoticones están Activado
El código [IMG] está Activado
El Código HTML está Desactivado
Trackbacks are Activado
Pingbacks are Activado
Refbacks are Desactivado



Extra
Estilo clásico
La franja horaria es GMT +1. Ahora son las 22:06.