tuts_gba
Thread Id: 26010
Thread Name: GBA | Scripts | Todo lo que debes saber sobre scripts Actualizado 14/03
#0
Jonouchi~ 27699
Hola a todos! Espero que esteis bien :D
Traigo este tutorial ya que he visto mucho novato ultimamente, y como algunos sabrán, los que se creen los muy muy los tratan como el forro xC
Agradezco a [MENTION=25910]oscar1234[/MENTION] (De nuevo jajaja) por impulsarme a crearlo :D

Pues, ¡Aqui podeis aprender!

Trataré de hacerlo lo mayormente entendible para ustedes, aqui vereis muchos comandos y cosas básicas para aprender y ser un buen scripter, sé que ya hay un chillón de tutoriales sobre scripts pero me da igual, mientras pueda aportar mi granito de arena yo feliz :)

Bueno, sin más charla, empecemos!:
Un error que cometía yo y creo que algunos más era que no sabiamos compilar bien un script, pues bien, lo que debeis hacer es abrir el XSE vacío y Abrir (Archivo, Abrir...) luego de eso, abres tu Rom en la cual compilarás el script, luego que tengas completo tu script, debes clickar el icono de los engranajes azules y te saldrá el multicompilador, que nos dará el offset de nuestro script 'u'
Los comandos fundamentales

Cuando digo los comandos fundamentales, estoy hablando de la estrutura del script. Todas las "claves" escritas en una linea son comandos, debeis recordar que una línea no puede tener más de un comando, ya que por ejemplo, si pones un Wildbattle al lado de un Giveitem,el script se echará a perder.

La estructura más fácil y más común es esta:
#dynamic 0x800000 - Dynamic: Esto da a entender que buscará una dirección dinámica o offset a partir de la dirección 0x800000, no hay más ciencia (Hay otras formas, pero repito que es la más usada)

#org @inicio Esto es importante, cuando era novato, no tenia ni la más minima idea de para que servia el @msg, pero es un puntero, los punteros son aquellos que te buscan la dirección automaticamente
Lock[
Faceplayer-El comando lock sirve para bloquear al mini (Persona) en el que esté el script, y Faceplayer para que dicho mini mire al jugador.
Msgbox @Mensaje 0x6 -Msgbox es el comando que muestra el mensaje del script, siempre debe ir el puntero al medio, o se bugeará, puede utilizarse más de una vez EN DISTINTAS LÍNEAS.
Release-Indica que el Mini ya puede volver a moverse
End- Indica que el script ha finalizado.


¿Facil no? Pues todo tipo de script debe incluir estos comandos, eso si, si son scrits de gatillo (Que ya explicaré) o simplemente postes o carteles, ahi ustedes decorais a su gusto.
Todo script debe incluir al menos el #Dynamic 0x800000, el #org @inicio y el End
PD: Se puede utilizar cualquier palabra en cualquier puntero :)

Comandos Útiles

Con comandos útiles, me refiero a aquellos que se usan para algo especial, por ejemplo, para cuando te dan un Pokémon (GivePokémon) o un objeto (GiveItem), los explicaré ahora:
"GivePokémon"
Ëste bonito comando sirve para recibir un Pokémon, sólo te lo dan, pero yo os daré los requisitos para que quede bonito y os explicaré obviamente :D

Haber, hagámos que le hablamos a un anciano, y este nos dice cualquier pendejada que nos salga de la mente, y nos dé un Bulbasaur, debeis seguir éste esqema:

#dynamic 0x800000

#org @inicio
lock
faceplayer
checkflag 0x/Flag\ - Aqui comprueba si una flag está usada (0x1) o no (0x0)'
If 0x1 goto @script - If (Si) 0x1 (Es lenguaje del XSE, si está activada) goto (Irá hacia) @Script (Si está activada, se ejecutan los sucesos del @script, que es donde te dan a tu Pokemon.
Msgbox @msgafter 0x6 (Este es el mensaje ue te dirá cuando le hables luego de recibirlo.
Release
End

#org @inicio2 (en este tipo de scripts, debes crear dos parrafos, ya que estos usan una flag (No es necesario del todo en alguno casos))
l
lock
faceplayer
msgbox @msgscript 0x6
givepokemon 0xPokémon 0xNv del Pokémon 0xItem 0x0 0x0 0x0 (Este es el script usado para que te den el Pokémon)
textcolor 0x2 (Comando nuevo, cambia el color de las letras de la MSGBOX en el caso de 0x2 sería negro
msgbox @obtained 0x6 Mensaje que nos dice \v\h01 (Jugador) obtuvo un POKéMON! (El puntero sigue siendo a elección y el texto igual)
fanfare 0x13E Fanfare es para cuando se ejecuta el sonidito y waitfanfare es para que este se termine de reproducir, o que se espera a que este termine para continuar el script.
waitfanfare
setflag 0x|FlagAnterior| Este comando sirve para que un script no se repita, desactiva o activa una flag, dependiendo de ella.
release
end

#Org @msgafter
= Cualquier cosa

#org @msgscript
= qui va lo que dicen antes de entregartelo, para hacerlo perfecto, usa CTRL + T, que es el ajuste de linea ;)


GiveItem y GiveEgg es lo mismo, sólo que con menos parametros:

GiveItem 0xNº del Item 0xCantidad 0xTipo de Mensaje
GiveEgg 0xNº Del Pokémon

Como sabeis, soy buen samaritano xD Ai que aqui os dejo las direcciones:




¿Que son las Flags y las variables?

Muy fácil, empecemos por Flags, son basicamente interruptores, es decir, que se "apagan o se prenden" o más bien se activan y desactivan.
´Las flag tienen una familia or asi decirlo de comandos, está el Checkflag, que se utiliza para comprobar una, el If 0x1/0x0 goto @?, el cual sirve para que nos mande al puntero (@?), el Setflag que sirve para ativar o desactivar una de estas, bastante simple, la mayoria las usa para cosas como los gives, pero tambien sirve para que el texto, accion o lo que sea varie, es decir, que el resultado no siempre sea el mismo, aqui otro ejemplo de giveegg:
'---------------
#org 0x810835
checkflag 0x211
if 0x1 goto 0x8810868
lock
faceplayer
msgbox 0x881089F MSG_NORMAL '"¡Hola, soy ROSA!\p¡Yo cuido de est..."
giveegg 0x183
fanfare 0x13E
textcolor 0x2
msgbox 0x8810A29 MSG_NORMAL '"¡[player] obvtuvo un HUEVO\nMISTER..."
textcolor 0x1
msgbox 0x8810A4C MSG_NORMAL '"ROSA: Pues bien.\pQuizá me taches ..."
setflag 0x211
release
end

'---------------
#org 0x810868
lock
faceplayer
msgbox 0x8810875 MSG_NORMAL '"ROSA: ¿Que tal va el HUEVO que te\..."
release
end


'---------
' Strings
'---------
#org 0x81089F
= ¡Hola, soy ROSA!\p¡Yo cuido de estos POKéMON!.\pHe encontrado un HUEVO POKéMON\ncerca de PUEBLO LAVANDA...\pUna prima me dijo que allí, los\nROCKET hacían cacería de los\lPOKéMON si razón alguna...\pMe apena mucho eso...\pPues... a lo que iba.\nPor las POKé BALLS que tienes,\lpuedo deducir que eres\lENTRENADOR...\p¡He oído que los HUEVOS eclosionan\nmás rápido en oompañía de uno!.\pPor eso, te lo doy.

#org 0x810A29
= ¡[player] obvtuvo un HUEVO\nMISTERIOSO!

#org 0x810A4C
= ROSA: Pues bien.\pQuizá me taches de loca pero...\p¡Por tu mirada sé que el POKéMON\nde aquel huevo crecerá muy bien\ljunto a tí!.

#org 0x810875
= ROSA: ¿Que tal va el HUEVO que te\ndí?.


Variables
Gracias a Moon And Sun. Las variables son como una alcancía, o como un banco, en resumen, puedes agregarle o restarle un valor, este generalmente es predeterminado en 0, aunque obviamente podeis agregar condiciones, ¿Como y que son las condiciones? Muy fácil, las condiciones son requisitos, por ejemplo, que un script no se ejecute hasta despues de tener un objeto, simplemente el valor 0 de la variable (Que es el preeterminado) la cambias a cualquiera, no sé, 1, 2 cualquiera desde el A-Map.
Cuando tengas ese valor, vas al script de lo neesario (Por ejemplo, el objeto) y agregas Setvar 0xVar 0xValor (1, 2, etc) Y eso sería.


Cabe destacar que el script SetFlag/Var se puede usar cuando quieras, es decir, si quiero un script donde haya un paso bloqueado, con la variable 40FF, y yo quiero que luego de la Liga ese paso sea habilitado, solo debo agregar el SetVar 0x40FF 0x1 en algun script final, si no me entendeis pues solo me avisais por MP o perfil ;)

Script Varios
Con esto me refiero a aquellos scripts que adornan nuestro script y lo enriquecen en cuanto a belleza jaja
Por ejemplo, si queremos hacer una pausa para que el script no "corra" or ai decirlo y "camine" para esto ponemos el comando Pause 0x|Segundos| se supone que los segundos de la pausa debeis ponerlo en Hexadecimal, por ejemplo, si quiero que espere 1 segundo, pongo 0x20

Playsong: Se utiliza para reproducir una canción/song, estas se encuentran en A-Map. Lo que la diferencia de Fadesong es que esta va de golpe, por ejemplo, si queremos hacer un silencio suspensivo (Como el que se presencia al hablarle a Rojo (GSC) debemos poner el PlaySong 0x0

Fadesong: Éste comando es como Playsong, pero éste tiene el efecto de transición, asi como cuando entramos a una ciudad, pues la canción de la ruta se va y viene la de la ciudad. Las canciones en a-Map :3

ApplyMovement: Éste maravilloso comando sirve para hacer que un mini haga un movimiento, saltar, caminar, etc, tambien los signos de interrogacion.
El comando se utiliza igual que los msgboxs, deben estar en eta estructura:

Applymovement 0x|persona| @mov1
Como es normal, debeis poner los movimintos al final, donde están los mensajes, debeis hacer lo mismo que si fuera msgbox...Y usar el puntero del movimiento. La herramienta move it! es la que sirve, las otras, al menos a mi no me han convencido del todo, asi que os la paso
Move it! - Télécharger - 4shared - Alexander Taliercio
Cuando lo abrais, ya sabran que no tiene mucha ciencia ;)
Cuando completeis sus movimientos, debeis finalizarlo metiendose en Especiales y darle a Finalizar Movimientos, luego los copias y los pegas al final, donde en vez de ir un msgbox deberia ir un applymovement.

Luego de ese applymovement debeis colocar el comando "Waitmovement 0x|persona|, pronto os enseñaré unos truquitos jejeje

Fanfare: Ya lo hemos visto, reproduce un sonido por algunos segundos determinados, debe usarse antes de waitfanfare

Setdooropened/Setdoorclosed: Setdooropened sirve para abrir una uerta que se encuentre en el mapa. Sirve para que los applymovement y warps (Pronto) estén más currados, porque si no el mini pasaría por encima de la puerta y se ve muy feo, la estructura es esta
Setdooropened 0xX 0xY (X e Y son las coordinadas, debes posicionarte en la puerta que quieres que se abra y anotar/memorizar las coordinadas, el XSE la toma automaticamente y el A-Map hace el resto ;) )
Setdoorclosed hace lo mismo, pero a diferencia, la puerta se cierra.

Doorchange: (Agradeco a [MENTION=18653]ReoNeky[/MENTION], ya que antes no sabía de la existencia de este comando :D )

Este comando se utiliza seguido de Setdoorclosed/opened, sirve para hacer que la animación se ejecute corretamente, sin bugs ni nada, y es como un waitmsg o waitmovement, pero para las puertas.
Sugiero que luego de este comando o antes del Setdooropened/closed pongas el Sound 0x9(Sound reproduce un sonido)

Cry: Sirve para reproducir el grito de un Pokémon (Muuuy pocos no lo sabrán, pero es el sonido que emiten en una batalla)
La estructura:
Cry 0x|Pokémon| 0x|Efecto|
Quizá pronto actualice con éstos efectos, aunque tendría que probarlos todos u.u

Showpokepic: Este comando muestra una imagen de un Pokémon, en cuestión su sprite, su estructura es esta:
Showpokepic 0x|Especie del Pokémon| 0xX 0xY (Coordinadas de la pantalla) Segun he visto, en Fr el grito del Pokémon suena automaticamente, asi que cuidado si intentais usar mugshots.
Cuando querais que la fotografia desaparezca, usais Hidepokepic.

Trainerbttle y WildBattle
empecemos con trainerbattle, como su nombre indica, este comando ejecuta una batalla con un entrenador, no es muy dificil, debeis usar A-Trainer o PET, pero sólo para ver la ID de los trainers (Segun veo, A-Trainer la mayoria tiene virus, y PET tiene bugs :X)
Pero da igual, la estructura es esta:
Trainerbattle 0x|Tipo de batalla| 0x|trainer| 0x0 @texto de desafio @texto de derrota
Si mal no recuerdo, los tipos de batalla son dos, 0x0, el cual no deja qe el script continue (Ya que esto se utiliza para los trainers de rutas) y el 0x3, el cual si permite que siga el script (Batallas especiales). El resto es cosa de nuestras amigas las flags ;)

En Wildbattle ejecuta una batalla con un Pokémon Salvaje, la estructura es esta:
Wildbattle 0x\especie del pokemon\ 0x\nivel\ 0x|item|
Como ya sabeis, los pokemon y los items etán arriba ;) Y sigue siendo trabajo de las flags el resto.

Scripts de Gatillo
¿Que es un script de gatillo?, Es un script que se ejecuta al pisarlo, es también como un botó que al pisarlo ocurre algo, en este caso un script, ¿Como hacerlo? Muy facil.
Primero que nada , tienes que crear un script obviamente en A-Map, abajo donde dice "Organizador de Eventos" le agregas un Script más, luego lo situas donde quieres que ocurra dicho script, luego de eso, clickas el evento del script y te fijas que tenga el "Deconocido" en 0003, también debes agregar una variable en Var Number, una desde la 4000 hasta la 4FFF (Gracias a [MENTION=28187]Sceptile9[/MENTION] :D )
Luego, creas tu script y el offset que nos dé el multicompilador lo copiamos y pegamos en nuestro evento, recuerda que en el momento que quieras puees usar el comando Setvar 0x|La variable que usaste, para desactivarlo| y también el valor de dicha variable

Scripts de Nivel
¿Que son los scripts de nivel? Muy facil, son aquellos scripts que se ejecutan en un mapa especifico al entrar en ellos, como cuando estamos en la Liga y automaticamente nos dirige hacia el campeon.
(Gracias a [MENTION=13374]Javi4315♪[/MENTION] por enseñarme a hacer estos scripts :) )
Es bastante sencillo, primero, debeis crear un script de gatillo común (Con el desconocido en 0003, la variable y todo).
Luego de tenerlo completo nos vamos al cabezal del mapa y nos aseguramos de que no haya ningun script de tipo 02, ya que se podria mezclar, si es asi lo borramos. Ya borrado, creamos un script de nivel tipo 02, le asignamos el offset del script de gatillo, y OJO ahi el A-Map tiene un error, la flag es la variable del script y ponen la variable y el valor de esta.
(Gracias a [MENTION=26309]Sayer D. Hierba[/MENTION])
Luego de guardarlo todo, apretamos CTRL+H para ver el cabezal de forma profesional y copiamos el Map Script Offset, lo pegamos en la barra del XSE donde siempre van a parar nestros offsets (al lado de la calculadora Hex) y lo pegamos alli, cuando estemos ahi, apretamos el icono de la llave inglesa (Script de nivel) y lo descompilamos, luego de eso, veremos muchos comandos raros jaja, pero nos fijaremos en los #raw word 0x? se supone que todos estos comandos de los que terminan un parrafo, deben estar en 0, si hay uno en, no sé FFFF debes cambiarlo a 0.

Agradezco a Buzz Lejía por la información. No es necesario del todo que dicho script de gatillo se encuentre en el mapa, solo debes comprobar que salga bien y usarlo en el cabezal, ya que SIEMPRE pero SIEMPRE la Rom te identificará cualquier offset.

Algunos Trucos
Aqui pondré algunos trucos sobre el scripting, algunos os los podeis ingeniar, el scripting e como la literatura o el lenguaje el resultado lo creas tu o en este caso EL EFECTO lo creas tu. Pues bien :D

¿Como hacer para que dos minis se muevan al mismo tiempo?

Muuy fácil, para esto, necesitamos el famoso waitmovement, bien, primero como es natural, creais vuestros comandos #raws y los applymovments.
Luego simplemente vas primer applymovement (Obviamente, aquellos que se siguen o se mueven, etc, ahi donde está el waitmovement, generalmente el numero del mini que ustedes ponen es el del mini que se mueve, pero aqui es diferente, poneis el numero del mini que le seguira. Por ejemplo:
Applymovement 0xFF
Waitmovement 0x1
Applymovement 0x1
Waitmovement 0x1

Y eso vendria siendo :D

¿Como asignarle una canción o song a un Pokémon Salvaje? (Gracias infinitas a [MENTION=26275]HollowRoxas[/MENTION] jajaj)

Muy fácil, no hay más que añadir, si queremos asignarsela a un Pokémon Legendario o un Pokémon raro debemos agregar esto:

setwildbattle 0x(Pokemon) 0x(Nivel) 0x(Item)
special 0x138
playsong 0x(Música) 0x27


Eso es todo, de momento iré actualizando los trucos que vaya encontrando
Espero que hayais aprendido con lo poco :D
Pues me he esforzado de todos modos en hacerlo, aunque es mi primer tutorial y quizá no me supe explicar en alguna parte xD
Pero cualquier cosa que no entendaís, os doy clase particular por MP o perfil ;)
Nah, pero me dicen cualquier cosa jajaja
Saluuudos!!!
#1
Brock 25910
Gran tuto, voy a empezar a jugetear con scrits colega :)
gracias por subirlo
es muy bueno, nos vemos
#2
Cheve_X 15014
Variables
Las variables son lo mismo, pero se utiliza en un Script de Gatillo.
Por lo que sé, las variables tienen dos comandos, el Compare, que tiene el mismo fin del Checkflag, sirve para saber si la Var está activada, también le sigue el If si no me equivoco....
También se usa el Setvar 0xValor, tiene el mismo fin del Setflag, el cual desactiva o activa una flag, lo unico diferente es que aqui se cambia un valor.

Cabe destacar que el script SetFlag/Var se puede usar cuando quieras, es decir, si quiero un script donde haya un paso bloqueado, con la variable 40FF, y yo quiero que luego de la Liga ese paso sea habilitado, solo debo agregar el SetVar 0x40FF 0x1

En ésto te equivocas colega... Es más complejo que eso, puedes leerte mi tutorial para entenderlo mejor. Las variable pueden contener valores son como "alcancías", y puedes sumar y restar con sus valores para hacer distintas cosas... :)
#3
Loony Boo♪ 12263
Vale, varias cosas:



Y por lo demás pues decir que aunque eres lo que se puede decir un iniciado en la materia pues te lo has currado bastante, sigues las estructuras de forma limpia y lógica (uso correcto de waitmovement, tuviste en cuenta los efectos de lock al usar redirecciones, etc.) y explicas cosas esenciales, seguro que si tomas en cuenta lo que te dije anteriormente, conseguirás hacer que tu tutorial sea aún más completo.

Gracias por tu redacción.
#4
Jonouchi~ 27699
He actualizado ;)

Gracias por la información Moon y Gudi xD
También he agragado unos trucos, iré actualizando más trucos, [MENTION=12263]Boozz Lejía♪[/MENTION] Puedo ir actualizando un tuto? Gracias de antemano :D
Y gracias a todos por comentar y sus +gracias, cuando pueda veré si puedo ayudaros en algo más :D

D: si, me como muchas letras jajaj
#5
Loony Boo♪ 12263
Yo soy de esos que dice que se puede mejorar con el tiempo, y esto aplica también a los tutoriales, así que mientras no hagas burradas lo puedes actualizar tantas veces como se te antoje. Y bueno, está bastante más completo que antes, aunque sigue sin estar del todo claro el apartado de las variables (puedo echarte una mano si lo deseas, contacta conmigo por Mensajería Privada), pero por lo demás está todo bien. Y ahora te dejaré otro pequeño consejo:



Buen trabajo ;)

PD: Edito, y dicho sea de paso [MENTION=27699]Alexander---[/MENTION], sé que el "truquito" del waitmovement lo colocaste en plan "resumen", es decir, a estas alturas el rom hacker que lee debe sobreentender cuáles son los parámetros que se colocan; pero yo te aconsejaría que, aunque fuese un ejemplo, coloques todos los parámetros de los applymovement con el fin de evitar malinterpretaciones y confusiones varias (en otras palabras, "no te comas los offsets").
#6
G0LD_ZTHVARD0X! 27515
Increible, muy bien explicado, a pesar que aun eres novato tu tutorial esta muy bien estructurado, veo que tienes futuro en el scripteo, sigue asi, y ves lo que siempre digo, cuando aprendes a scriptear ya no quieres parar, con tu tuto aprendi como se usan las variables (en el de Ciro no le entendi a eso) y veo que no es nada del otro mundo (ni muy diferente a como se hace en GBC)

Saludos!!! (scripter profesional under construccion)
#7
Decidme_un_nick_4315♪Kuchiki 28197
Me encanta :D
Muy buen tutorial! Mis felicitaciones :)
No he entendido muy bien lo de:
Iniciado por Alexander---
¿Como hacer para que dos minis se muevan al mismo tiempo?

Muuy fácil, para esto, necesitamos el famoso waitmovement, bien, primero como es natural, creais vuestros comandos #raws y los applymovments.
Luego simplemente vas primer applymovement (Obviamente, aquellos que se siguen o se mueven, etc, ahi donde está el waitmovement, generalmente el numero del mini que ustedes ponen es el del mini que se mueve, pero aqui es diferente, poneis el numero del mini que le seguira. Por ejemplo:(yo digo, ¿Y dónde acaba la paréntesis? Aún eso no entiendo xD)
[quote]Applymovement 0xFF
Waitmovement 0x1
Applymovement 0x1
Waitmovement 0x1

Y eso vendria siendo :D[/quote] Pero bueno, sigue así!
Salu2
#8
Megascep_9 Kuchiki 28187
WTF?

Esta super, gracias por esto...

Para que vean que ser un novato no
detiene a nadie XD.

Suerte y...

Saludos
#9
Brock 25910
Yo lo dije en su momento y lo sigo diciendo, este chaval llegara lejos con los scripts,

el tuto esta mejor explicado ahora, con las recoemndaciones y consejos de los otros user, asi que cada vez que se vaya actualizando, ire comentando mas (si, soy pesado ,)

y eso, e estado leyendo por encima el tuto y como dije antes, voy a empezar poco a poco a ir avanzando en este mundillo

gracias de nuevo :)