Xabier2012
Usuario mítico


¿Qué es una variable?
Es como una caja que almacena datos. ¿Qué datos? En este caso, almacena números, del 0 al FFFF
¿FFFF? Sí. Porque recordad que en XSE trabajamos con hexadecimal
Las variables se representan por números, y cuando las pongamos en nuestro XSE, como todo número, será precedido por un "0x".
Por ejemplo, tenemos la variables 0x4000 (La cuatromil). Pues esta variable
podrá guardar números que nosotros le pongamos.

¿Para qué sirve una variable?
Podemos usar una variable para hacer condiciones y que dependiendo de estas se ejecute un evento o no. Por ejemplo, en nuestro pueblo inicial ponemos un script de una persona que no nos deje pasar hasta que no consigamos nuestro primer Pokémon. Entonces cuando consigamos nuestro primer Pokémon a la variable 0x4000 le damos el valor "1", y resulta que nuestro script que impedía que pasáramos tenía como condición que no nos dejara pasar a no se que la variable 0x4000 tuviera el valor "1". De esta forma sabremos cuando hemos conseguido nuestro primer pokémon, cuando la variable 0x4000 sea "1". Y así en nuestro script que nos impide el paso podemos controlar cuando sí nos tiene que dejar el paso.
Las variables tienen muchos usos, como en scripts de gatillo y nivel que veremos en otras lecciones.

¿Cómo le damos valor a nuestra variable?
Con el comando setvar podemos darle un valor a nuestra variable de esta forma:
Código:
setvar 0x4000 0x1
0x(número de la variable, en este caso 4000)
0x(El valor que le queremos dar, en este caso 1)
Entonces si nosotros al hacer un script ponemos setvar 0x4000 0x1 le estaremos dando valor 1 a la variable 4000.
Por ejemplo, vamos a darle a la variable 4050 el valor "C", después de que un mini nos diga "hola". Quedaría tal que así:
Código:
#dynamic 0x800000
#org @inicio
msgbox @texto 0x2
setvar 0x4050 0xC
end
#org @texto
= ¡Hola!

¿Cómo pongo una condición?
Las condiciones se pondrán con el comando "if".
Los tipos de condiciones que hay son:
- Menor a (<)
- Igual a (=)
- Mayor a (>)
- menor o igual a (<=)
- mayor o igual a (>=)
- Distinto de (No = a)
Pero, ¿igual, mayor, distinto a qué? Fácil, a un número de nuestra variable.
Cada una de estas condiciones se representa por un número que pondremos después del "if", y como todo número, antes tendrá un "0x".
Esta es la lista pero representado en números:
[*]Menor a 0x0
[*]Igual a 0x1
[*]Mayor a 0x2
[*]menor o igual a 0x3
[*]mayor o igual a 0x4
[*]Distinto de 0x5
Entonces si queremos poner la condición de que un número sea mayor o igual a, tendremos que poner:
Código:
if 0x4

Comparar una variable con un número
Vamos a poner en práctica lo que sabemos de los if. Si queremos poner un if de que la variable 0x4000 sea un "2", como haremos esa comparación?
Bueno, tenemos un comando que se llama "compare" el cual compara una variable con un número que nosotros pongamos. Esta es su estructura:
Código:
compare 0x(variable) 0x(número a comparar)
Código:
compare 0x4000 0x2
Código:
compare 0x4000 0x2
if 0x1
Si tuvieramos esto:
Código:
compare 0x4000 0x2
if 0x0

¿Y sí se cumple la condición?
En caso de que se cumpla la condición tendremos que decirle al programa que lea otra parte del script. Esto quiere decir que si se cumple la condición mandaremos al juego a otro script/parte del script para que se ejecute.
Lo mandaremos a otra dirección con el comando "goto", y luego la dirección offset a donde tiene que ir.
En este caso, estos dos elementos se ponen después del if, quedando así:
Código:
if 0x1 goto @otraparte
Código:
#dynamic 0x800000
#org @inicio
setvar 0x4000 0x3
compare 0x4000 0x2
if 0x1 goto @inicio2
end
¿Iría a @inicio2?
No, porque la condición no se cumple. La variable 4000 es 3 no 2, entonces el script continuaría, se ejecutaría el "end", y se terminaría el script.
Para que se cumpla la condición tendría que ser así:
Código:
#dynamic 0x800000
#org @inicio
setvar 0x4000 0x2
compare 0x4000 0x2
if 0x1 goto @inicio2
end
Código:
#dynamic 0x800000
#org @inicio
compare 0x4000 0x0
if 0x1 goto @inicio2
end
#org @inicio2
msgbox @texto 0x2
waitmsg
setvar 0x4000 0x1
end
#org @texto
= hola
0x4000
¿Que pasa si volvemos a hablar con el minisprite?
Pues que no dirá ni hará nada, porque cuando llegue a la condición, como ahora la variable 0x4000 es "1", el juego no irá (goto) a @inicio2, y por lo tanto se ejecutará el comando end y se acabará el script sin que pase absolutamente nada.
Si tuviéramos este script:
Código:
#dynamic 0x800000
#org @inicio
compare 0x4000 0x0
if 0x1 goto @inicio2
msgbox @despedirse 0x2
end
#org @inicio2
msgbox @texto 0x2
setvar 0x4000 0x1
end
#org @texto
= hola
#org @despedirse
= adiós
Si tuviéramos esto:
Código:
#dynamic 0x800000
#org @inicio
compare 0x4000 0x0
if 0x1 goto @inicio2
msgbox @despedirse 0x2
setvar 0x4000 0x0
end
#org @inicio2
msgbox @texto 0x2
setvar 0x4000 0x1
end
#org @texto
= hola
#org @despedirse
= adiós

PREGUNTAS FRECUENTES
¿Por qué si tengo dos #org se ejecuta el primero?
Porque es el #org del offset que copiamos y ponemos en el cuadro "script offset" de un minisprite.
¿Qué variables puedo usar?
Las variables libres que puedes usar y que no darán en ningún caso error si trabajas con ellas son las que están en el rango:
4011-40FF
Pero realmente la mayoría de la gente utiliza hasta 4FFF, e incluso también
las que comprender entre 5000-5FFF.
Al compilar mi variable a cambiado a otra
A veces al compilar puede surgir el bug de que después de compilar tu variable haya cambiado a otra, por ejemplo teníamos setvar 0x4000 y de repente pone setvar 0x8345. En este caso vuelve a cambiar el número de tu variable, y vuelve a compilar, si el problema persiste, tendrás que repuntear el script.
Jaizu me insulta
No pasa nada, en realidad es buena persona, pero dice lo que piensa.

TAREA
Tendréis que hacer dos scripts. En uno, una persona os dirá algo, y luego se cambiará una variable al valor "3". En el otro script, si se cumple la condición de que la variable anteriormente utilizada su valor es menor que 3, entonces el mini nos preguntará nuestro nombre en color azul. Y si se cumple la condición de que la variable anteriormente utilizada no es igual a 1, entonces, el mini nos preguntará nuestro nombre pero en color amarillo/naranja.
*He acortado este temario para que no se les haga muy pesado a los que empiezan desde cero. Podéis ver en el tema índice la actualización del temario que vamos a dar
*Tenéis para entregar al tarea hasta el jueves incluido para entregar la tarea
*Recordad que cualquier duda será posteada en el tema dudas
@Tervaxx @Toni @Neon Skylar @rdoble @AwesomeCS @Jaizu @RafaSc3 @~Nozz~ @LluviaElemental @AlexanderWWE @AlejoCr @Luna @Axnez @wenston91 @KaycerWolf @jfem
Disculpad las molestias, pero he cambiado un poco la tarea para que se entienda mejor.
pd: El objetivo de la tarea no es cambiar una variable para que diga otro texto (que también), si no poner las condiciones que pido. Las condiciones que pido que se cumplan, no son las de un script eficiente, de hecho se podría hacer el script de otras formas para que quedara mejor, pero pido que os ciñais a lo que pido en la tarea porque quiero comprobar unos determinados conocimeintos, no hacer un script coherente (que tampoco es que sea muy incoherente)
Última edición: