Registrarse

[Scripting] Arboles de miel

Zik

Usuario Habitual
Que tal gente.
Aquí un tutorial o mas bien una explicación de como hacer un script parecido al los de Pokemon Diamante o Perla. ¿A cual me refiero?, pues como el titulo lo dice al de la miel en los arboles.
Obviamente no sera igual pero la intención de crearlo es lo que cuenta no....? xP

Bueno empecemos, pero antes que nada si eres novato en esto de scripts y no entiendes muy bien los comandos todavía, esto se te hará un poco dificultoso, hasta creo que los scripters de nivel medio y uno que otro de nivel alto se confundirán.(Yo no soy de nivel alto pero bueno xD.)



Primero que nada explicare dos formas de hacerlo, una sirve para RUBY y ESMERALDA y la otra para FIRE RED(Aunque la de FIRE RED tanbien sirve para RUBY y ESMERALDA).

1º Forma (RUBY y ESMERALDA)

Bueno asi debe de ir el script.
'---------------
#org 0x(Escojamos una dirección libre "Dir1")
checkdailyflags
checkflag 0x(Escojamos una flag que este libre)
if 0x1 goto 0x(Dir2)
compare 0x(Escojemos una variable libre) 0x1
if 0x1 goto 0x(Dir3)
msgbox 0x(Dir4) MSG_KEEPOPEN '"Este parece un buen arbol para pon..."
checkitem 0x48 0x1
compare LASTRESULT 0x0
if 0x1 goto 0x(Dir5)
msgbox 0x(Dir6) MSG_YESNO '"¿Quieres poner miel?"
compare LASTRESULT 0x1
if 0x1 call 0x(Dir7)
compare LASTRESULT 0x0
if 0x1 goto 0x(Dir8)
msgbox 0x(Dir9) MSG_FACE '"Bueno ahora solo hay que esperar."
setflag 0x(La misma flag que habíamos escojido)
end

'---------------
#org 0x(Dir2)
msgbox 0x(Dir10) MSG_FACE '"Aun no hay nada."
end

'---------------
#org 0x(Dir3)
setvar 0x(La variable que escojimos al principio) 0x0
msgbox 0x(Dir11) MSG_FACE '"¡Genial! parace que la miel atrajo..."
random 0x4
copyvar 0x(Escojemos otra variable) LASTRESULT
compare 0x(Aquí va la misma variable que acabamos de escojer) 0x0
if 0x1 goto 0x(Dir12)
compare 0x(Aquí igual) 0x1
if 0x1 goto 0x(Dir13)
compare 0x(La misma) 0x2
if 0x1 goto 0x(Dir14)
compare 0x(Y otra vez ponen la misma) 0x3
if 0x1 goto 0x(Dir15)
end

'---------------
#org 0x(Dir5)
msgbox 0x(Dir16) MSG_FACE '"Lastima que no tenga."
end

'---------------
#org 0x(Dir7)
removeitem 0x48 0x1
bufferitem 0x0 0x48
msgbox 0x(Dir17) MSG_FACE '"[player] puso [buffer1] sobre el arbol."
sound 0x46
pause 0x30
addvar 0x(La variable que escojimos al principio) 0x1
return

'---------------
#org 0x(Dir8)
msgbox 0x(Dir18) MSG_FACE '"Mejor la uso en otro momento."
end

'---------------
#org 0x(Dir12)
wildbattle 0xC 0xA 0x0
end

'---------------
#org 0x(Dir13)
wildbattle 0xF 0xA 0x0
end


'---------------
#org 0x(Dir14)
wildbattle 0x7F 0xA 0x0
end


'---------------
#org 0x(Dir15)
wildbattle 0xD6 0xA 0x0
end



'---------
' Strings
'---------
#org 0x(Dir4)
= Este parece un buen arbol para poner miel.

#org 0x(Dir6)
= ¿Quieres poner miel?

#org 0x(Dir9)
= Bueno ahora solo hay que esperar.

#org 0x(Dir10)
= Aun no hay nada.

#org 0x(Dir11)
= ¡Genial! parace que la miel atrajo un pokmon.

#org 0x(Dir16)
= Lastima que no tenga.

#org 0x(Dir17)
= [player] puso [buffer1] sobre el arbol.

#org 0x(Dir18)
= Mejor la uso en otro momento.

( O _o)
Lo se....
Hasta a mi me confunde y eso que yo hice el script..... xD
Pero tranquilos explicare para que sirve cada comando que hay en el script.
NOTA: Los "Dir1, Dir2, Dir3....." significan que deben poner una direccion libre, les digo esto para que no se confundan. :)

Empezemos:

checkdailyflags
checkflag 0x
if 0x1 goto 0x(Dir2)
El comando "checkdailyflags" Sirve para hacer que el evento se repita diariamente(Para tener mas informacion y saber como usar este comando dale clic Aqui).
El "checkflag" pues como su nombre lo dice revisara si la flag esta activada o no, en caso de que este activada ahi es donde entra en funcion el "if 0x1 goto", que nos mandara al la direccion donde esta lo que pasara mientras no se cumpla el dia que viene siendo esta parte del script:
#org 0x(Dir2)
msgbox 0x(Dir10) MSG_FACE '"Aun no hay nada."
end
----------------------------------------------------

compare 0x(variable libre) 0x1
if 0x1 goto 0x(Dir3)
El "compare" revisara si la variable que escojimos tiene el valor "1" y en caso de que lo tenga el "if 0x1 goto" nos mandara a esta parte del script:
#org 0x(Dir3)
setvar 0x(La variable que escojimos al principio) 0x0
msgbox 0x(Dir11) MSG_FACE '"¡Genial! parace que la miel atrajo..."
random 0x4
copyvar 0x(Escojemos otra variable) LASTRESULT
compare 0x(Aquí va la misma variable que acabamos de escojer) 0x0
if 0x1 goto 0x(Dir12)
compare 0x(Aquí igual) 0x1
if 0x1 goto 0x(Dir13)
compare 0x(La misma) 0x2
if 0x1 goto 0x(Dir14)
compare 0x(Y otra vez ponen la misma) 0x3
if 0x1 goto 0x(Dir15)
end
----------------------------------------------------

msgbox 0x(Dir4) MSG_KEEPOPEN
Esto es un simple msbox 0x(Direccion libre) 0x2
Es para un simple mensage como este "Este parece un buen arbol para poner miel."

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

checkitem 0x48 0x1
compare LASTRESULT 0x0
if 0x1 goto 0x
El "checkitem" revisara si tenemos el item que vamos a utilizar en este caso "La miel", pero como en RUBY, ESMERALDA o FIRE RED no existe la miel, tendran que editar algun item existente o crear uno nuevo( hay espacio libre para agregar nuevos items y herramientas que sirven para editar y/o agregar items, solo es cuestion de que se las ingienen). En mi caso yo agregue el item.
NOTA: El "checkitem es muy parecido a un "giveitem" y va asi "checkitem 0x(Item a checar) 0x(Cantidad que se checara)
El "compare LASTRESULT 0x0" compara si el valor generado anteriormente es 0(eso ocurre si no tenemos el item) y el "if 0x1 goto" nos mandara, en caso de que no tengamos el item a esta parte del script:
#org 0x(Dir5)
msgbox 0x(Dir16) MSG_FACE '"Lastima que no tenga."
end

Que es lo que quieres que diga en caso de que no tenga el item.
----------------------------------------------------

msgbox 0x(Dir6) MSG_YESNO '"¿Quieres poner miel?"
compare LASTRESULT 0x1
if 0x1 call 0x(Dir7)
compare LASTRESULT 0x0
if 0x1 goto 0x(Dir8)
Ahora aqui aplicaremos un msgbox pero con el cuadro "YES/NO"(para usarlo solo pongan "msgbox 0x(Direccion libre) 0x5")
El "compare LASTRESULT 0x1" Se encarga de comparar si el valor generado anteriormente es "1"(Eso ocurre si escojemos SI) y como dije entre parentesis si ecojemos SI el "if 0x1 call" llamara a esta parte del script:
#org 0x(Dir7)
removeitem 0x48 0x1
bufferitem 0x0 0x48
msgbox 0x(Dir17) MSG_FACE '"[player] puso [buffer1] sobre el arbol."
sound 0x46
pause 0x30
addvar 0x(La variable que escojimos al principio) 0x1
return

Para no explicar mas, en caso de escojer "NO" el "compare LASTRESULT 0x0" y el "if 0x1 goto" funcionaran igual que el anterior solo que estos en vez de llamar nos mandaran a esta parte del script:
#org 0x(Dir8)
msgbox 0x(Dir18) MSG_FACE '"Mejor la uso en otro momento."
end
Que es un mensaje de lo que dice el jugador si escogemos "NO"

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

msgbox 0x(Dir9) MSG_FACE '"Bueno ahora solo hay que esperar."
setflag 0x(La misma flag que habíamos escojido)

Si escojimos "SI" despues de que llamaron a esa parte del script, el msgbox es un simple mensaje para poner lo que quieres que diga despues de usar la miel por ejemplo: '"Bueno ahora solo hay que esperar." y el "setflag 0x" activa la flag que aviamos usado al principio.


Parte del script: "Usando la miel"
Ahora explicare esta parte del script:
#org 0x(Dir7)
removeitem 0x48 0x1
bufferitem 0x0 0x48
msgbox 0x(Dir17) MSG_FACE '"[player] puso [buffer1] sobre el arbol."
sound 0x46
pause 0x30
addvar 0x(La variable que escojimos al principio) 0x1
return

removeitem 0x48 0x1
Este comando como el nombre lo dice, solo nos quita el item que vamos a usar(en este caso la miel) y se usa asi "removeitem 0x(item a remover) 0x(cantidad que se quitara)"
----------------------------------------------------

bufferitem 0x0 0x48
Este comando es opcional, solo sirve para cuando hagamos un msgbox en vez de poner "miel" ponemos "[buffer1]" y cuando ocurra el msgbox aparecera "Miel".
Hay otros estilos de "buffer", pero se los explicare en otra ocacion.
----------------------------------------------------

msgbox 0x(Dir17) MSG_FACE '"[player] puso [buffer1] sobre el arbol."
Otro msgbox simple para poner un mensaje simple como este "Player puso miel sobre el arbol o ect.
----------------------------------------------------

sound 0x46
pause 0x30
Un simple "sound" para darle un poco mas de vida al script(en este caso use el sound 0x46 que es sonido que haces cuando caminas sobre el agua)
Y el "pause", pues para que se vea mejor el script xD
----------------------------------------------------

addvar 0x(La variable que escojimos al principio) 0x1
Este es el que hace el truco para cuando pase un dia en vez de que ocurra lo mismo ocurra otra cosa, si se acuerdan al principio del script estaba ese "compare" que checaba si la variable que habiamos escojido tenia el valor "1" nos mandaba a otra direccion.
Al principio no ocurre nada ya que el valor de la variable es "0" pero este "addvar" le suma uno a esa variable, asi cuando ocurra otra vez el script nos mandara a esta parte del script:
#org 0x(Dir3)
setvar 0x(La variable que escojimos al principio) 0x0
msgbox 0x(Dir11) MSG_FACE '"¡Genial! parace que la miel atrajo..."
random 0x4
copyvar 0x(Escojemos otra variable) LASTRESULT
compare 0x(Aquí va la misma variable que acabamos de escojer) 0x0
if 0x1 goto 0x(Dir12)
compare 0x(Aquí igual) 0x1
if 0x1 goto 0x(Dir13)
compare 0x(La misma) 0x2
if 0x1 goto 0x(Dir14)
compare 0x(Y otra vez ponen la misma) 0x3
if 0x1 goto 0x(Dir15)
end
----------------------------------------------------

return
Solo sirve para regresar al script principal.
(recuenden que este script fue llamado, por lo tanto en vez de poner "end" ponen "return")

Parte del script: "La miel atrajo un pokemon"

Ahora explicare esta parte del script:
#org 0x(Dir3)
setvar 0x(La variable que escojimos al principio) 0x0
msgbox 0x(Dir11) MSG_FACE '"¡Genial! parace que la miel atrajo..."
random 0x4
copyvar 0x(Escojemos otra variable) LASTRESULT
compare 0x(Aquí va la misma variable que acabamos de escojer) 0x0
if 0x1 goto 0x(Dir12)
compare 0x(Aquí igual) 0x1
if 0x1 goto 0x(Dir13)
compare 0x(La misma) 0x2
if 0x1 goto 0x(Dir14)
compare 0x(Y otra vez ponen la misma) 0x3
if 0x1 goto 0x(Dir15)
end

setvar 0x(La variable que escojimos al principio) 0x0
Este comando volverá a asignar el valor "0" a la variable que habíamos escogido al principio, esto es para que el script vuelva a estar como antes y podamos utilizarlo normalmente otra vez.
----------------------------------------------------

msgbox 0x(Dir11) MSG_FACE '"¡Genial! parace que la miel atrajo..."
Esto es un simple msgbox para poner ese mensaje como "La miel atrajo un pokemon" o ect.
----------------------------------------------------

random 0x4
copyvar 0x(Escojemos otra variable) LASTRESULT
compare 0x(Aquí va la misma variable que acabamos de escojer) 0x0
if 0x1 goto 0x(Dir12)
compare 0x(Aquí igual) 0x1
if 0x1 goto 0x(Dir13)
compare 0x(La misma) 0x2
if 0x1 goto 0x(Dir14)
compare 0x(Y otra vez ponen la misma) 0x3
if 0x1 goto 0x(Dir15)
El comando "random" hace el truco de que pueda salir uno u otro pokemon dependiendo
de cuantos pokemons diferentes quieren que salgan.
El "copyvar" sirve para copiar el valor que genere random a una nueva variable libre que escojamos, por eso esta ese "LASTRESULT" ahí.
Y los cuatro "compare" sirven para que nos manden a una distinta dirección dependiendo de que valor aya generado random, que viene siendo esta parte del script:
'---------------
#org 0x(Dir12)
wildbattle 0xC 0xA 0x0
end

'---------------
#org 0x(Dir13)
wildbattle 0xF 0xA 0x0
end


'---------------
#org 0x(Dir14)
wildbattle 0x7F 0xA 0x0
end


'---------------
#org 0x(Dir15)
wildbattle 0xD6 0xA 0x0
end

Si no sabes usar o no tienes idea de que es el comando random dale clic aqui, es un tutorial donde explico como usar ese comando(La tercera forma de uso es la que uso en este script)

Y bueno ya después de que nos envió a alguna de las cuatro direcciones que puse solo deben poner un simple wildbattle para que luchen contra un pokemon( los cuatro pokemons que yo elegí que pudieran salir fueron "Heracross", "Butterfre", "Bedrill" y "Pinsir" no me acuerdo como se escriben pero bueno, luego edito. xD


Bueno y así eh terminado de explicar la primera forma de usarlo, si los confundí mas con la explicación haganmelo saber xD. Y perdón si hubo errores ortográficos

Luego edito con la otra forma que sirve para FIRE RED y traeré vídeos para que vean como funciona el script. :D
 

Jaizu

Decomp user
RE: Miel y Pokemons....

Es genial que lo expliques, yo tenía pensado hacer uno, pero mío, vamos no me gusta copiar y pegar scripts, pero aún así algunas tips de aquí me ayudarán a comprenderlo mejor :B
Más Gracias para ti =D
 

ZeKro

Aioh con er corasón
RE: Miel y Pokemons....

Un buen tutorial si señor! =)
Y bien explicado! Por lo menos, lo he entendido, y eso que no soy demasiado experto en scripts... xD
La verdad es que es una buena idea lo del script de miel, pero solo tengo una pega :
Pones la estructura del script cuando ya está compilado, por eso, no lo entiendo al 100%. Me lio con los msg box sobre todo, por que no sé de que tipo habría que ponerlos, aun que me lo imagino! xD

Buen tutorial, como ya he dicho! =)
Sigue aportando, que ya he visto algunos tutoriales sobre scripts tuyos, como el de eventos diarios!(Mucho más facil de entender, en mi opinion.)
 

fm~

Llámame FM.
RE: Miel y Pokemons....

[align=center]Excelente!

El tuto está fantastico, la explicación no es de las mejores pero es entendible para los que tienen paciencia y conocimientos medios xB

Gracias, me ayudará mucho =D

PD: Llevas +1 Repu por siempre ayudarnos con tus tutoriales fantasticos.
[/align]
 
RE: Miel y Pokemons....

buen tuto, no conocía el comando "checkdialyflag" en "mis tiempos" eso no existía jaja

para eventos diarios se usaba el Cm2D y una flag libre, pero bueno supongo que debe funcionar igual.

También recuerdo que el comando "random" podías usarlo sin el "copyvar", solo hacías:

random 0x4
compare LASTRESULT 0x0
If 0x1 goto 0x
compare LASTRESULT 0x1
If 0x1 goto 0x
compare LASTRESULT 0x2
If 0x1 goto 0x
compare LASTRESULT 0x3
If 0x1 goto 0x

y un consejo, para no usar tantos "wildbattle" puedes usar, al menos recuerdo que solo en Ruby/Saphiro, el "special 0xAB" este activa los wildbattles que puedes colocar en el cabezal de los mapas con AM en "Árboles", y para que te salga un mensaje cuando no aparezcan Pokémon salvajes solo pones:

special 0xAB
compare LASTRESULT 0x0
If 0x1 goto 0x
end

Es una idea en general de lo que pueden hacer, claro pueden cambiar "miel" o los "Arboles" por otras cosas, todo depende de la imaginación de cada quien.

Ya me dio ganas de hacer varios scripts de estos jaja.
Buen aporte de tutorial Zik.
Saludos.
 

Zik

Usuario Habitual
RE: Miel y Pokemons....

08D3, yo tambien conocia al comando checkdailyflags como "cmd2", pero ya sabes el tiempo pasa y con la actualizacion de XSE el nombre tambien cambia xD

083D dijo:
y un consejo, para no usar tantos "wildbattle" puedes usar, al menos recuerdo que solo en Ruby/Saphiro, el "special 0xAB" este activa los wildbattles que puedes colocar en el cabezal de los mapas con AM en "Árboles", y para que te salga un mensaje cuando no aparezcan Pokémon salvajes solo pones:

special 0xAB
compare LASTRESULT 0x0
If 0x1 goto 0x
end
Lo de random me di cuenta de que podía hacer eso esta mañana xD, pero te agradezco ese dato, del que no sabia nada era de ese special que mencionaste.

Pero bueno primero que nada no hago este tutorial para que lo copien exactamente igual, lo hice para que se dieran una idea de como hacerlo y como dijo 083D pueden darle otros usos, solo es cuestión de usar la imaginación.

No eh tenido tiempo de poner como hacerlo en fire red, pero aqui les pongo un video para que vean como seria, como fire red no tiene el comando checkdailyflags esta es una manera que se me ocurrio:

 
Última edición por un moderador:

.Neon

Usuario
RE: Miel y Pokemons....

Muy buen tuto!
No sabia que tenia como hacer algo parecido al de DPP jeje
Bueno, no soy bueno con scripts, así que eso va servir para quien ya tenga algun conocimento mejor que el mio xD

Espero ver más tutoriales ZIK!

Saludos
 

zaux

Héroe de WaH
RE: Miel y Pokemons....

[align=center]Increíble!
Realmente un gran aporte!
Y más cuando es para FR también, ojala luego traigas el script para FR.
Grandioso aporte, gracias!

Nos Vemos!
[/align]
 

Kal!ser

Vuelve el lobito
RE: Miel y Pokemons....

Vaya, es un tuto estupendo! La verdad es que yo no soy muy imaginativo con los scripts xD es una suerte que tengamos scripters como tú, que hacen falta!
Sobre el tuto, muy bien explicado, el tema no es muy corriente, y está bien tenerlo a mano para tomarlo como referencia para scripts de una índole similar.

Pues eso, creo que te has ganado una repu y un apoyo! X)
 

Milotix

Hacker Rom desde 2007
RE: Miel y Pokemons....

Yo había hecho un sistema parecido en el cobalto pero sin la comprobación del día, igual, buen tuto, bien explicado.

PD: Yo sigo usando el cmd2 y los códigos de colores con números y letras largas, no actualice el XSE =D
 
RE: Miel y Pokemons....

Vaya, me parece bastante util y genial, lo acabo de calar y funcionó! Muchas gracias por el tutorial, sera mu útil para ponerle algo nuevo a mi juego! ^w^
 

Angel Asakura

Héroe Eón
Miembro de honor
RE: Miel y Pokemons....

La verdad es que está genial, quizás lo use para mi hack.
Muy buen tutorial amigo!
 
RE: Miel y Pokemons....

Que buen tuto, se ve muy útil y muy ingenioso el incorporarlo a los hacks de GBA, que buen aporte, felicidades y gracias.
 

squirtlemon

Principiante en YouTube
Re: GBA | Scripting | Miel y Pokemons....

no entiendo muy bien la parte de la "direccion" libre, Cuales son las dirreciones libres de Fire Red?
 

DrakoVinyl

Profesional de WaH
Respuesta: Re: GBA | Scripting | Miel y Pokemons....

no entiendo muy bien la parte de la "direccion" libre, Cuales son las dirreciones libres de Fire Red?
Puedes usar free space finder para buscar espacio libre.

En fire red el espacio libre empieza alrededor del offset 0x730000 (tal vez un poco antes).

Con un editor hexadecimal (Puede ser HxD, WinHex32 o el que quieras) busca lugares con muchos FFs juntos. Eso es espacio libre.

Aquí tienes algo para aprender más si no estas familiarizado con el hexadecimal u editores hex.

https://whackahack.com/foro/t-34687/guia-todo-sobre-sistema-hexadecimal-orientado-al-rom-hacking
 
Arriba