Registrarse

[Scripting] Script de nivel - 02 Validates Values (fácilmente)

Javi4315

Babyface
Miembro de honor
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.
 
Última edición por un moderador:
RE: Script de nivel (fácilmente)

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!
 

Awuis

Usuario mítico
RE: Script de nivel (fácilmente)

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á ^.^.

[align=center]Por eso el "+Gracias"[/align]

Salu2! n_n
 

Javi4315

Babyface
Miembro de honor
RE: Script de nivel (fácilmente)

Ken dijo:
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á ^.^.

[align=center]Por eso el "+Gracias"[/align]

Salu2! n_n
Mm, sí, creo que tienes razón, le cambiaré el título al tema :D
 
R

Ray Laé Àlfori

Invitado
¡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 ^_^
 

Javi4315

Babyface
Miembro de honor
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
 

H.B.P

Emperador Kaktiácero
Miembro de honor
Aporto un vídeo, de paso, puede solucionar el problema de las letras chinas:



¿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.
 

SoulEater

Creciendo...
Javi4315♪;192114 dijo:
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:
 

Javi4315

Babyface
Miembro de honor
Ŀord Кaktusツ;192129 dijo:
Aporto un vídeo, de paso, puede solucionar el problema de las letras chinas:



¿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í.

Este tutorial data de diciembre de 2010, empecé en el rom hacking en julio de ese mismo año. De que los tutoriales de la web estaban obsoletos, como tú sabes, y tuve que aprender en pokecommunity, en inglés, claro. Y de que usaba pokescript y sólo utilizaba XSE para decompilar el script de nivel (me estoy acordando ahora del comando "jingle" para los scripts de nivel, fíjate). Aún así estás ante un tutorial que ha servido a mucha gente y del que no tengo quejas salvo la tuya. Pídeme algo más.

Y por cierto, a estas alturas creas un tema en dudas y cualquiera te resuelve el problema de las letras chinas. Eso está ya más que superado.
 

H.B.P

Emperador Kaktiácero
Miembro de honor
Javi4315♪;192158 dijo:
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í.

Este tutorial data de diciembre de 2010, empecé en el rom hacking en julio de ese mismo año. De que los tutoriales de la web estaban obsoletos, como tú sabes, y tuve que aprender en pokecommunity, en inglés, claro. Y de que usaba pokescript y sólo utilizaba XSE para decompilar el script de nivel (me estoy acordando ahora del comando "jingle" para los scripts de nivel, fíjate). Aún así estás ante un tutorial que ha servido a mucha gente y del que no tengo quejas salvo la tuya. Pídeme algo más.

Y por cierto, a estas alturas creas un tema en dudas y cualquiera te resuelve el problema de las letras chinas. Eso está ya más que superado.
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.
 

Naren Jr.

Puto amo
Usuario de Platino
Respuesta: GBA | Scripting | Script de nivel - 02 Validates Values (fácilmente)

¡Oh todopoderoso @Javi4315♪ ser de gran conocimiento y sabiduría, ¿quiero saber una cosa en este tipo de scripts pueden ir Applymovement y los demas comandos? he hecho uno pero al entrar al mapa, pero este no se ejecuta, y no es mucho solo son unos textbox y un applymovement solo eso, agradecería tu ayuda amigo!


un saludo
 

CelticFrostie

Sexador de pollos
¡Oh todopoderoso @Javi4315♪ ser de gran conocimiento y sabiduría, ¿quiero saber una cosa en este tipo de scripts pueden ir Applymovement y los demas comandos? he hecho uno pero al entrar al mapa, pero este no se ejecuta, y no es mucho solo son unos textbox y un applymovement solo eso, agradecería tu ayuda amigo!


un saludo
Claro que pueden ir esos comandos xD
Pero sé mas específico, pasa el code, qué pasa al entrar al mapa, etc.
 

Naren Jr.

Puto amo
Usuario de Platino
Respuesta: GBA | Scripting | Script de nivel - 02 Validates Values (fácilmente)

Señor @flame de gran conocimiento aquí esta mi code:

#dynamic 0x800000

#org @inicio
lockall
applymovement 0x1 @mov1
waitmovement 0x1
msgbox @1 0x2
applymovement 0x1 @mov2
waitmovement 0x1
msgbox @2 0x2
setvar 0x40FF 0x1
releaseall
end

#org @mov1
#raw 0x65 'Doble Exclamación (!!)
#raw 0xFE 'Finalizar Movimientos

#org @1
= MAMÁ: ¡vh01 TE HAS DESPERTADO\nTARDE!

#org @mov2
#raw 0x13 'Paso Derecha
#raw 0x13 'Paso Derecha
#raw 0x13 'Paso Derecha
#raw 0x13 'Paso Derecha
#raw 0x13 'Paso Derecha
#raw 0x13 'Paso Derecha
#raw 0x13 'Paso Derecha
#raw 0x1 'Mirar Arriba
#raw 0xFE 'Finalizar Movimientos

#org @2
= MAMÁ: ¡Ve a donde el profesor\ndebiste estar a las 7 y son las 10\lde la mañana ve rapido hijo!

el codigo no se me ejecuta, borro todos los scripts del mapa y no ocurre nada uwu no se nada de estos scripts de nivel :c y bueno vi ese tuto y funciono pero no ocurre esto

un saludo~
 
Arriba