Bueno, esto vendria a hacer un mini tutorial de dos de los tantos usos que tienen las variables. Antes que nada agradezco a pablok83 que es el que me inicio en este tema de las variables cuando no podia entender por ninguna via su funcionamiento.
Primero veamos: ¿Qué es una variable?
La explicacion super simple es que una variable es un elemento de la programacion (en este caso de mugen) que puede adoptar un valor (cualquier) cuando se cumplan determinadas condiciones.
En mugen se asignan de esta manera:
[State 0, VarSet]
type = VarSet
trigger1 = pos y = 0 ; condicion para que tenga efecto la variable
v = 10 ; numero de la variable
value = 1 ; valor de la variable
Y vamos a los ejemplos mas absurdos:
- Spoiler:
Ej 1) Cuando el p1 este al nivel del suelo
[State 0, VarSet]
type = VarSet
trigger1 = pos y = 0
v = 10
value = 1
Ej 2) Cuando el p1 este en un movimiento de ataque
[State 0, VarSet]
type = VarSet
trigger1 = movetype = A
v = 10
value = 1
Ej 3) Cuando se encuentre en el anim 10 y el tiempo sea mayor o igual a 10
[State 0, VarSet]
type = VarSet
trigger1 = anim = 200 && Time >= 10
v = 10
value = 1
Y asi podemos seguir con infinidad de tipos de triggers y combinaciones entre los mismos.
Pero ahora vamos a ver como se utilizan.
Yo lo uso para dos cosas:
1) como interruptores
2) como contadores1)
Las variables como interruptoresBueno, el uso mas clasico de las variables es el de interruptores.
Por ejemplo:
[State 0, VarSet]
type = VarSet
trigger1 = (pos y < 0 || pos y > 0)
v = 10
value = 0
[State 0, VarSet]
type = VarSet
trigger1 = pos y = 0
v = 10
value = 1
En el caso anterior si esta en el nivel del suelo, la variable adopta el valor 1 y si esta por encima o debajo del suelo adopta el valor 0.
Ese es un claro ejemplo de una variable utilizada como interruptor.
Se explica de la siguiente manera: si se cumplen esas condiciones la variable se activa, esta en "on". Si se dejan de cumplir esas condiciones la variable se desactiva, esta en "off".
Veamos este ejemplo:
- Spoiler:
[State 0, VarSet]
type = VarSet
trigger1 = (pos y < 0 || pos y > 0)
v = 10
value = 0
[State 0, VarSet]
type = VarSet
trigger1 = pos y = 0
v = 10
value = 1
[State 0, Explod]
type = Explod
trigger1 = var(10) = 1
anim = 7000
ID = 7000
pos = 0,0
postype = p1
facing = 1
vfacing = 1
bindtime = -1 ; para que se mantenga en la misma posicion cuando el p1 se mueve
removetime = -1 ; para que se repita continuamente
scale = 1,1
sprpriority = 2
ontop = 0
shadow = 0,0,0
ownpal = 1
removeongethit = 0
persistent = 0 ; para que no se active una y otra vez, sino una sola vez
[State 0, RemoveExplod]
type = RemoveExplod
trigger1 = var(10) = 0
id = 7000
Y este ejemplo mas claro no puede ser
Ahora bien, no solo puede adoptar valores de 0 y 1 cuando se utiliza una variable con este uso.
Vean este ejemplo:
;tengan presente el funcionamiento del statedef -2 para poner cosas que quieren que esten activadas sin importar el state donde se encuentren
- Spoiler:
[State -2, VarSet]
type = VarSet
trigger1 = prevstateno = 200
trigger2 = prevstateno = 210
trigger3 = prevstateno = 230
trigger4 = prevstateno = 240 ;cuando me pegaron y volvi al state nro 0
trigger5 = movetype = H || stateno = 0 ;cuando me pegaron y volvi al state nro 0
v = 10
value = 0
[State -2, VarSet]
type = VarSet
trigger1 = stateno = 200 && movehit
v = 10
value = 1
[State -2, VarSet]
type = VarSet
trigger1 = stateno = 210 && movehit
v = 10
value = 2
[State -2, VarSet]
type = VarSet
trigger1 = stateno = 230 && movehit
v = 10
value = 3
[State -2, VarSet]
type = VarSet
trigger1 = stateno = 240 && movehit
v = 10
value = 4
;lo que viene va en su respectivo state
[State 200, ChangeState] ; piña debil combo
type = ChangeState
trigger1 = command = "x" && var(10) = 1
value = 2000
ctrl = 0
[State 210, ChangeState] ; piña fuerte combo
type = ChangeState
trigger1 = command = "y" && var(10) = 2
value = 2010
ctrl = 0
[State 230, ChangeState] ; patada debil combo
type = ChangeState
trigger1 = command = "a" && var(10) = 3
value = 2030
ctrl = 0
[State 240, ChangeState] ; patada fuerte combo
type = ChangeState
trigger1 = command = "b" && var(10) = 4
value = 2040
ctrl = 0
Y miren que lindos combos nos armamos en pocos minutos...
Ya habiendo visto el uso de las variables como interruptores pasamos a un uso diferente (pero no mas complicado):
2)
Las variables como contadoresLos dos elementos necesarios para este caso son basicamente: varset y varadd
Un muy claro ejemplo seria:
- Spoiler:
;Modo Furioso
; Statedef 3000
[Statedef 3000]
type = S
movetype= I
physics = S
juggle = 4
ctrl = 0
anim = 3000
poweradd = -3000
sprpriority = 1
velset = 0,0
[State 0, varset]
type=varset
trigger1= Time > 1
var(20) = 300
[State 0, ChangeState]
type = ChangeState
trigger1 = AnimTime = 0
value = ifelse(pos y < 0, 108, 0)
ctrl = 1
;Contador del tiempo en modo furioso
; va en el Statedef -2
[State -2, varset]
type = varset
trigger1 = var(20) <= 0
var(20) = 0
ignorehitpause = 1
[State -2, varadd]
type = varadd
trigger1 = var(20) > 0
var(20) = -1
ignorehitpause = 1
[State 0, AttackMulSet]
type = AttackMulSet
trigger1 = var(20) > 0
time = 1
value = 4
Lo anterior parece complicado pero es demasiado simple para ser verdad...
La cosa es asi, queremos un modo furioso, cuando pase por ese state 3000 de la activacion de ese modo, el valor de la variable 20 se posicionara en 300 hasta terminar el state de activacion del modo.
[State 0, varset]
type=varset
trigger1= Time > 1
var(20) = 300
Cuando termine el state el varadd del statedef -2 se dara cuenta mediante su trigger que el valor esta por encima del valor 0 y cada tic de tiempo que transcurra el valor decrecera (dismunuira) en -1... es decir -1 por cada tic transcurrido
[State -2, varadd]
type = varadd
trigger1 = var(20) > 0
var(20) = -1
ignorehitpause = 1
Es asi como el modo furioso durara exactamente 300 tics a partir de terminada su activacion.
El char en esos 300 tics tendra el cuadruple de su fuerza.
Una vez transcurridos los 300 tics, el varset colocado en el statedef -2 vera que el valor del var(20) llego a 0 y dejara inmovil al var(20) en ese valor 0 hasta activar nuevamente el state del modo furioso.
Hasta aqui llega el tutorial. Me despido. Cualquier cosa que no entiendan lean una y otra vez. Si hay algo que no se ve muy claro pregunten en el presente post que contestare a la brevedad.
Todo lo demas queda a su imaginacion
Saludos.