tuts_gba
Thread Id: 8621
Thread Name: GBA | Scripting | Script de nivel - 02 Validates Values (fácilmente)
#0
Javi4315♪ 13374
Bueno, esta vez os traigo un tutorial sobre cómo hacer un script de nivel fácilmente (o por lo menos, a mí me parece este método mucho más fácil que el del tutorial de Baro en la web). Este es el método mediante el que he hecho todos mis scripts de nivel y me funciona a la perfección. Así que lo compartiré con todos vosotros con el objetivo de facilitaros las cosas. Espero que este tutorial os sirva.

Pequeña explicación:

Un script de nivel es un script que se ejecuta justo al entrar en un mapa. La sintaxis del script podría decirse que es igual a la del script de gatillo haciendo uso de variables. No hay nada más que decir al respecto xD.

¿Qué necesito?

Sólo necesitas dos herramientas (tres si utilizas pokescript), Advance map y XSE. Si haces los script con pokescript, pues obviamente necesitarás también pokescript xD.

¿Cómo lo hago?

Esta es la parte larga e interesante. Iré mostrando imágenes para su perfecta comprensión.

En primer lugar, vamos al mapa en el que queremos que se ejecute nuestro script de nivel y ponemos un script (la S con fondo verde en advance map). Este script lo debemos poner en un lugar donde no lo podamos pisar, ya que si lo pisamos, actuará como un script de gatillo. De cualquier forma, eso sólo es necesario hacerlo si vamos a ponerle una condición a nuestro script, es decir, si no queremos que ese script no se ejecute hasta que no haya sucedido algo. Así que deberíamos tener algo así:



Ya debemos tener nuestro script, pero si no lo tenemos, pues lo hacemos xD. Es necesario que pongamos una variable. Es recomendable empezar desde la 40FF e ir bajando. Así que haremos uso del comando "setvar". Lo que debemos hacer es poner en el script (justo antes del release) "setvar 0x(variable) 0x(valor)". En este caso, pondremos "setvar 0x40FF 0x1". 40FF es la variable que hemos utilizado para el script y el 0x1 es para sumarle un valor a la variable para que no se vuelva a ejecutar. Esto se comprenderá mejor más adelante cuando explique las condiciones.

Bien, cuando ya tengamos nuestro script compilado, se lo asignamos al script de advance map. Debería quedar algo así:



Como en un script de gatillo, es necesario poner 0003 en "Desconocido". En "Var number" debéis poner la variable. Cómo ya tenía utilizadas en ese rom las variables 40FF, 40FE, 40FD y 40FC, utilizo la 40FB, pero si no habéis utilizado ninguna, empezad por la 40FF. "Var value" lo dejáis así, porque se ejecutará la primera vez que entréis en el mapa. Ya explicaré como hacer que no sea la primera vez que entras en el mapa. El segundo "Desconocido" no lo toquéis, lo dejáis como está. Y en "Script offset" ponéis el offset que os ha dado al compilar el script.

Bien, ahora váis a "Ver cabezal" y váis a "Map script". Tenéis que poner algo así:



En primer lugar, debéis borrar todos los scripts (o como mínimo los de tipo 02, que será el tipo de script de nivel que haremos) dándole a "remove". Después, pulsamos en "Add" y añadimos un script de tipo 02. Cuando lo tengamos, ponemos el offset de nuestro script en "Script offset 2" y la variable utilizada en "Flag". Cuando lo hayamos hecho, le damos a "Save map scripts" y nos aparecerá otro offset distinto en "Script offset".

Ahora lo que debemos hacer es pulsar ctrl+H para la vista profesional del cabezal y vamos a "Opciones del mapa". Tendremos que ver algo así:



Ya simplemente copiamos el offset que hay donde dice "Map script offset". Como podéis ver, en mi caso es "71DD68". Ahora abrimos el XSE y cargamos el rom. Ponemos el offset y le damos a "decompilar" (icono del destornillador y la llave inglesa). Después, marcamos script de nivel (icono de la llave inglesa) y le damos a "compilar" (icono del engranaje).

Y ya está, tenemos nuestro script de nivel.

¿Cómo pongo una condición?

Con poner una condición me refiero a hacer que nuestro script de nivel se ejecute cuando haya sucedido una cosa. Para eso simplemente tenemos que jugar con el valor de nuestra variable. Por ejemplo, si utilizamos la variable "40FF" en vez de poner "0" como valor en el script (de advance map) y en el cabezal (esto cuando estamos configurando nuestro script) ponemos "1".

Ahora lo que debemos hacer es ir al otro script. El otro script es el que hará que después de ejecutarse, se ejecute el script de nivel al entrar en el mapa (en el que hayamos puesto el script de nivel). En este otro script, debemos utilizar el comando "setvar" de nuevo. Lo que tenemos que hacer es sumarle un valor a nuestra variable. Es decir, ponemos "setvar 0x40FF 0x1". Así, el valor de la variable "40FF" es el mismo que el que pusimos en el script (de advance map) y en el cabezal cuando configuramos nuestro script. Al coincidir el valor de la variables, se ejecutará el script.

Pero recordad que para que no se repita el script de nivel, tendremos que poner "setvar 0x40FF 0x2". El 0x2 porque ya utilizamos el 0x1.
_____________________

Eso es todo. Si al principio no os sale o no lo entendéis bien, practicando seguro que os sale.

Bueno, espero que esta forma de hacer scripts de nivel os guste y os resulte más fácil hacerlo así. Espero haber ayudado.

Cualquier duda o problema que tengáis posteadla e intentaré ayudaros en todo lo que pueda.

Saludos!!

PD: El tutorial ha sido totalmente redactado por mí y las imágenes son todas mías. Lo digo por si acaso xD.

PD2: Si queréis un video demostrando que el script funciona, decídmelo y lo subo ;D.
#1
ObscureSideMt2 14003
Tú eres feo,el tutu es feo y XSE es feo :PBroma!genial tutu javi! ;D ya el otro
tutu(takepokemon) stava genial! este tambien esta super bueno!ayudaras muchas personas...incluso a mi espero que sigas aciendo tutus de estos ;D Qué tal si posteas un tutu de Entrada/salida del rom? ;D es que los de eing no se entienden :P esto se merece +gracias ;D

Salu2 y no aportes más aporta más!
#2
Keen 24906
Hola ché!, bueno primero que nada "¡Buen Tutorial, está bien explicado...!", bueno, pero...

el titulo debería ser "Script de Nivel - 02 Validates Value" (Que es parecido al Script de gatillo) por que hay muchos Tipos de Script de nivel, y solo explicaste este (Aunque todos son parecidos...) pero bueno, se agradece el aporte y lo bien explicado que está ^.^.


Por eso el "+Gracias"


Salu2! n_n
#3
Javi4315♪ 13374
Iniciado por Ken

Hola ché!, bueno primero que nada "¡Buen Tutorial, está bien explicado...!", bueno, pero...

el titulo debería ser "Script de Nivel - 02 Validates Value" (Que es parecido al Script de gatillo) por que hay muchos Tipos de Script de nivel, y solo explicaste este (Aunque todos son parecidos...) pero bueno, se agradece el aporte y lo bien explicado que está ^.^.


Por eso el "+Gracias"


Salu2! n_n


Mm, sí, creo que tienes razón, le cambiaré el título al tema :D
#4
Ray Laé Àlfori 0
¡Wow, muchas gracias! Precisamente estos últimos días me he estado rompiendo la cabeza, buscando un tutorial comprensible para aprender a hacer esto, porque hasta ahora no había necesitado scripts de nivel. Tu tutorial me va que ni pintado, se entiende perfectamente. Cuando tenga tiempo, lo probaré con mi hack. Genial aporte ^_^
#5
SoulEater 26861
Entendi todo menos lo de la condicion, si lo podes explicar con alguna imagen me serviria mucho :D
#6
Javi4315♪ 13374
Iniciado por SoulEater
Entendi todo menos lo de la condicion, si lo podes explicar con alguna imagen me serviria mucho :D


No hay ninguna imagen que explique eso, diría yo xD

Bueno, a ver... El script de nivel se ejecuta al entrar en un mapa sólo si la variable indicada tiene el valor indicado. Es decir, si en el número de variable ponemos "0x40FF" y el valor "0x0", el script se ejecutará siempre que la variable 0x40FF tenga el valor 0x0. En el momento que tenga un valor distinto no se ejecutará. Por eso, al final del script se pone un setvar, para darle otro valor a la variable y que no se repita el script. Precisamente por eso, porque ahora la variable tiene otro valor.

Por defecto, la variable 0x40FF tiene el valor 0x0. Así que si en vez de poner en el valor 0x0 le ponemos 0x1, al entrar no se ejecutará el script. Porque la variable no tiene ese valor. Pero si en otro script hacemos que la variable tenga ese valor mediante un setvar, entonces sí se ejecutará. Es importante que hasta este punto lo entiendas bien.

Por eso, si quieres que el script no se ejecute (aunque entres al mapa) hasta un momento determinado, pones el valor 0x1 y hasta que en otro script, el que sea, no pongas un "setvar 0x40FF 0x1", la variable no tendrá el valor 0x1 y, por ello, no se ejecutará. Pero si haces ese setvar y le das el valor 0x1, entonces sí se ejecutará.

Sé que puede resultar un poco lioso, pero espero que hayas entendido algo al menos xD
#7
Loony Boo♪ 12263
Aporto un vídeo, de paso, puede solucionar el problema de las letras chinas:

YouTube Video

¿Qué puedo decir? Tu método es rudimentario. No se necesita crear una casilla para un script de gatillo si quieres crear un script de nivel, es tan fácil como irte a la última pestaña que te ofrece el programa y agregar nuevos scripts de nivel:



Y ya que hablas sobre descompilar y volver a compilar el script de nivel (map script offset), espero que al menos sepas por qué lo haces, y te voy a decir que no siempre funciona. Por lo visto, en el script de nivel, hay un molesto error que suele presentarse de la siguiente manera:

compare 0x(variable) 0xFFFF

Lo normal es que el valor marcado en negrita sea el responsable del problema de las letras chinas, bloqueos o incluso repeticiones del script de nivel. Cuando vayas a compilar de nuevo el script de nivel, debes de cambiar el valor marcado en negrita por el siguiente (sin las comillas): "0".

Para ser una persona experta en scripts, en este tutorial me has decepcionado.
#8
SoulEater 26861
Iniciado por Javi4315♪
No hay ninguna imagen que explique eso, diría yo xD

Bueno, a ver... El script de nivel se ejecuta al entrar en un mapa sólo si la variable indicada tiene el valor indicado. Es decir, si en el número de variable ponemos "0x40FF" y el valor "0x0", el script se ejecutará siempre que la variable 0x40FF tenga el valor 0x0. En el momento que tenga un valor distinto no se ejecutará. Por eso, al final del script se pone un setvar, para darle otro valor a la variable y que no se repita el script. Precisamente por eso, porque ahora la variable tiene otro valor.

Por defecto, la variable 0x40FF tiene el valor 0x0. Así que si en vez de poner en el valor 0x0 le ponemos 0x1, al entrar no se ejecutará el script. Porque la variable no tiene ese valor. Pero si en otro script hacemos que la variable tenga ese valor mediante un setvar, entonces sí se ejecutará. Es importante que hasta este punto lo entiendas bien.

Por eso, si quieres que el script no se ejecute (aunque entres al mapa) hasta un momento determinado, pones el valor 0x1 y hasta que en otro script, el que sea, no pongas un "setvar 0x40FF 0x1", la variable no tendrá el valor 0x1 y, por ello, no se ejecutará. Pero si haces ese setvar y le das el valor 0x1, entonces sí se ejecutará.

Sé que puede resultar un poco lioso, pero espero que hayas entendido algo al menos xD


Muchas gracias por la ayuda, ya entendi, ahora voy a probar :awesome:
#9
Javi4315♪ 13374
Iniciado por Ŀord Кaktusツ
Aporto un vídeo, de paso, puede solucionar el problema de las letras chinas:

YouTube Video

¿Qué puedo decir? Tu método es rudimentario. No se necesita crear una casilla para un script de gatillo si quieres crear un script de nivel, es tan fácil como irte a la última pestaña que te ofrece el programa y agregar nuevos scripts de nivel:



Y ya que hablas sobre descompilar y volver a compilar el script de nivel (map script offset), espero que al menos sepas por qué lo haces, y te voy a decir que no siempre funciona. Por lo visto, en el script de nivel, hay un molesto error que suele presentarse de la siguiente manera:

compare 0x(variable) 0xFFFF

Lo normal es que el valor marcado en negrita sea el responsable del problema de las letras chinas, bloqueos o incluso repeticiones del script de nivel. Cuando vayas a compilar de nuevo el script de nivel, debes de cambiar el valor marcado en negrita por el siguiente (sin las comillas): "0".

Para ser una persona experta en scripts, en este tutorial me has decepcionado.


Guau! Qué crítica más... ¿Inesperada?

Vamos por partes... ¿Es rudimentario porque se pone un script de gatillo? Sólo es una forma de hacer el script. Es decir, un script de nivel (02) es exactamente igual que uno de gatillo pero con la única diferencia de que se ejecuta al entrar al mapa. Para los nuevos, es más fácil hacerlo como si fuera un simple script de gatillo y luego configurar el script de nivel. Simplemente es una forma de comprenderlo.

Y no, siempre funciona, otra cosa es que se produzca un ligero error que haya que subsanar. Pero eso que cuentas es una trola muy gorda, amigo mío ¿Un compare? ¿De dónde sale eso? ¿Siempre se va a comparar la variable al valor 0? Es verdad que a veces aparece como FFFF y hay que cambiarlo, pero no tiene nada que ver con eso, simplemente cierra los datos del script, que son tipo, puntero y eso para terminar. De hecho, fíjate, es un #raw, no un #raw word.

Y no, soy un aficionado a esto. No soy un experto en nada y mucho menos en scripts. Pero lo del compare sí que me ha decepcionado a mí.


#10
Loony Boo♪ 12263
Iniciado por Javi4315♪
Guau! Qué crítica más... ¿Inesperada?

Vamos por partes... ¿Es rudimentario porque se pone un script de gatillo? Sólo es una forma de hacer el script. Es decir, un script de nivel (02) es exactamente igual que uno de gatillo pero con la única diferencia de que se ejecuta al entrar al mapa. Para los nuevos, es más fácil hacerlo como si fuera un simple script de gatillo y luego configurar el script de nivel. Simplemente es una forma de comprenderlo.

Y no, siempre funciona, otra cosa es que se produzca un ligero error que haya que subsanar. Pero eso que cuentas es una trola muy gorda, amigo mío ¿Un compare? ¿De dónde sale eso? ¿Siempre se va a comparar la variable al valor 0? Es verdad que a veces aparece como FFFF y hay que cambiarlo, pero no tiene nada que ver con eso, simplemente cierra los datos del script, que son tipo, puntero y eso para terminar. De hecho, fíjate, es un #raw, no un #raw word.

Y no, soy un aficionado a esto. No soy un experto en nada y mucho menos en scripts. Pero lo del compare sí que me ha decepcionado a mí.



Está bien, mis disculpas, no me había fijado en la fecha del tutorial. Pero esto no nos debe hacer entrar en tensión, al fin y al cabo, he aportado datos y diversos detalles que consideraba importantes, y aunque he tenido una metedura de pata con el asunto del "compare", sí que estimaba necesario que indicaras el cambio de este valor: FFFF, al valor correcto (de otra forma, estarías compilando lo mismo y de haber errores, no se solucionarían).

Valga la redundancia, mis disculpas si he sido un poco agresivo, espero que este pequeño debate ayude a que este manual sea más completo, tanto para los recién llegados como para los que frecuentaban el foro pero necesitan aprender sobre la materia.