Registrarse

FR - ¿Cómo crear un script de intercambio prodigioso?

Estado
Cerrado para nuevas respuestas.
¡Buenas!
Para empezar, soy nueva en el foro (no quiere decir que sea nueva en el Rom Hacking, es más, tengo varios conocimientos sobre esto).
Se me ocurrió la idea (no quiere decir que no esté inventado antes xD) de crear un script donde al hablar con alguien se pudiese hacer un intercambio donde el Pokémon, mote, EO y ID de el Pokémon que recibieses fuesen completamente aleatorios. Encontré un tutorial, lástima que era para RPG Maker.
No sé si alguien lo ha intentado hacer, si alguien lo ha conseguido... Me agradecería muchísimo que me aclaráseis cómo hacerlo, ya que no sé.

Muchas gracias de antemano!
 

Bugrhak

A long time ago I used to call myself "Subzero".
¡Buenas!
Para empezar, soy nueva en el foro (no quiere decir que sea nueva en el Rom Hacking, es más, tengo varios conocimientos sobre esto).
Se me ocurrió la idea (no quiere decir que no esté inventado antes xD) de crear un script donde al hablar con alguien se pudiese hacer un intercambio donde el Pokémon, mote, EO y ID de el Pokémon que recibieses fuesen completamente aleatorios. Encontré un tutorial, lástima que era para RPG Maker.
No sé si alguien lo ha intentado hacer, si alguien lo ha conseguido... Me agradecería muchísimo que me aclaráseis cómo hacerlo, ya que no sé.

Muchas gracias de antemano!
Bueno, te respondo a tu duda citando un ejemplo de un trader de FR.

Código:
#dynamic 0x800000
#org @start
lock
faceplayer
setvar 0x8008 0x0 '---Ve al numero "1" luego del script'---
call @snippet1
checkflag 0x248      '----ve al numero "2" luego del script'---
if 0x1 goto @snippet2
msgbox [MENTION=29127]String[/MENTION]1 0x5
compare LASTRESULT 0x0
if 0x1 goto @snippet3
call @snippet4
compare 0x8004 0x6
if 0x4 goto @snippet3
call @snippet5
comparevars LASTRESULT 0x8009
if 0x5 goto @snippet6
call @snippet7
msgbox [MENTION=29127]String[/MENTION]2 0x4
setflag 0x248
release
end

#org @snippet1
copyvar 0x8004 0x8008
special2 LASTRESULT 0xFC
copyvar 0x8009 LASTRESULT
return

#org @snippet2
msgbox [MENTION=29127]String[/MENTION]3 0x4
release
end

#org @snippet3
msgbox [MENTION=29127]String[/MENTION]4 0x4
release
end

#org @snippet4
special 0x9F
waitstate
lock
faceplayer
copyvar 0x800A 0x8004
return


#org @snippet5
copyvar 0x8005 0x800A
special2 LASTRESULT 0xFF
copyvar 0x800B LASTRESULT
return

#org @snippet6
bufferpokemon 0x0 0x8009
msgbox [MENTION=29127]String[/MENTION]5 0x4
release
end

#org @snippet7
copyvar 0x8004 0x8008
copyvar 0x8005 0x800A
special 0xFD
special 0xFE
waitstate
lock
faceplayer
return

#org [MENTION=29127]String[/MENTION]1
= I'm looking for the POKéMON\n[buffer1]!\pWanna trade one for my\n[buffer2]?  '----ve al numero "3" luego del script'---

#org [MENTION=29127]String[/MENTION]2
= Hey, thanks!

#org [MENTION=29127]String[/MENTION]3
= Isn't my old [buffer2] great?

#org [MENTION=29127]String[/MENTION]4
= Awww!\nOh, well[.]

#org [MENTION=29127]String[/MENTION]5
= What?\nThat's no [buffer1]!
1: La variable 0x8008 (usada en el setvar) indica que trader es el que se ejecutará, es decir, el trader 0,1,2,3,4....,20...
siendo su valor, el nro de trader propiamente dicho.

¿Numero de trader?
En fire red tenemos un total de 9 traders (wooow, es muy poco), y el numero de trader corresponde al trader que ejecutaremos de entre esos 9 que tenemos.
Para ver y configurar los traders vas a tener que valerte de la herramienta "Trader advanced" (puedes hacerlo mediante hex, pero dudo que sepas donde se encuentran los datos, y si no tienes mucha experiencia NO TE RECOMIENDO HACERLO) allí puedes editar el nombre del trader que te intercambió el pokémon, el nombre del pokémon que tiene el que te dieron, los status base, el pokemon que te da, el poquemon que debes darle, la naturaleza, etc.
He dicho que hay un total de 9 traders, la misma herramienta ya mencionada te permite añadir mas, dezconosco si hay un limite, pero supongo que es tantos como el valor maximo de la variable 8008 (valor maximo de la variable= 0xFFFF) pero no creo que sea necesario añadir muchos, con 20-30 debería bastarte ;)
Recuerda que las variables "8000" son "dynamicas" y se resetean al entrar a un mapa, abrir un menu, etc, por eso se pone el setvar ante todo lo que venga después en el script.


2: En este script se usa una flag, tiene que ser una flag que no hayas usado, esa flag se usa para que una vez que te haya cambiado el pokémon, te pregunte "¿como esta mi pokémon?" ahi tu le dices que lo has matao.
¿Que por que usa una flag y no una variable para salga un mensaje luego del intercambio?
Pues bien, usa una flag porque en este caso sencillamente sale mas "barato" que usar una variable. ¿por que?
Por 2 razones que no explicaré:
Razón 1: Las flags estan activadas o desactivadas, y se suelen usar una sola vez cada una.
razon 2: Las variables tienen valores, con dichos valores podemos hacer como 65535 scripts y si usaramos una variable, tendríamos que mantenerla siempre el mismo valor, ya que si le cambiamos el valor, el trader se volverá a ejecutar como la primera vez. Si dejasemos la variable con un mismo valor estariamos matando 65534 posibilidades de hacer otros scripts (que dura es la "bida" :( )

3: Lo que voy a explicar en este punto son los buffer's:
Como se ve hay 2 buffers, el [buffer1] seria el que dice nuestro pokemon, en otras palabras dice que pokemon debemos cambiar nosotros,
El [buffer2] indica el pokemon de "la otra persona".
No es necesario cargar en los buffers el nombre de cada pokémon, eso ya lo hace el trader por si solo.
¿Por que?
Porque por decirlo de alguna manera, esos buffers se "decencriptan" de los datos del trader en cuestion (Me es bastant facil de entenderlo, pero dificil de explicar).

Bueno, en lo que al resto de lo que a la estructura del script respecta, lo que hace es abrir la "party" para que selecciones un pokemon, compara si es ese pokémon, si lo se ejecuta un special (obviamente estoy resumiendo el proceso) que muestra los pokes pasandose de consola en consola y tal, y si en el momento que abre la "party" y tu seleccionas un pokémon y no es el que se requiere te dirá "hey, este no es el que quiero". Y por supuesto, luego cuando buelves a hablar te pregunta que tal está el poke que antes era de el...

-----------------------------------

Espero que con esto te sea suficiente, te dejo el resto a ti, para que imbestigues, y para que así te pique ese bichito de la curiosidad que llevas dentro :awesome: .
La verdad que la estructura del script es bastante sencilla y para los trades originales siempre se mantiene la misma estructura, lo unico que cambia es el valor que se le da a la var 0x8008 (que ya expliqué para que se usa) y la flag.
Te recuerdo que puedes hacer un script "especial" que no solo sea un simple intercambio de pokes y ya, si no que tambien puedes adicionarle mas cosas tal y como lo harías con un trainerbattle que se ejecuta junto a un trozo de "historia".

Pues nada, ojalá te sirva de algo lo que he redactado (y que no sea en vano)...
Que mas decirte, aprende, scriptea, romhackea, diviértete, y no dudes en preguntar lo que no sabes (pero por favor que no sean cosas tontas que ya fueron solucionadas en 345679 post de dudas :V como suele pasar).

Hasta otra colewha (colega :v)
Salu2 :cool::cool::cool:

PD: Si necesitan la herramienta Trader Advanced pidanla en el subforo de herramientas (en el tema de pedidos de herramientas) no en el tema de la duda, por si alguno la kiere, yo la tengo ;)pero es solo mia :B D: g
 

Cheve

MoonLover~
Miembro de honor
¡Hola! Sé que ésto está ya casi resuelto.

Yo no tenía NPI de que era un intercambio prodigioso, así que lo tuve que investigar.
¡Vaya cosas que inventan los de Game Freak!
Lo que ha propuesto el compañero aquí arriba es bastante factible y lo veo muy bien, aunque seguramente es tedioso hacer todos esos cambios con la herramienta.

No te voy a dar un script hecho, por falta de tiempo, más que nada, pero si puedes hecharle una ojeada al comando random, con el que puedes randomizar tanto la especie, el nivel, etc de los pokémon sin cargar tantos datos.
La pega es que tienes que controlar que no salgan legendarios /Si asi lo quieres/ y no tendrás las animaciones del intercambio.
Lo de seleccionar que pokémon cambiar no es nada complicado, son un/os specials.

Bueno, espero que te sirva de algo.
Salu2!
 
Estado
Cerrado para nuevas respuestas.
Arriba