Você está na página 1de 5

Tutorial sobre SCTRLs (State ConTRoLS) e Triggers.

SCTRLs: ChangeAnim, ChangeAnim2 e ChangeState.


Triggers: Time , AnimElem, AnimTime, AnimElemTime, AnimTimeElem,
StateNo e PrevStateNo.

S1.SCTRL – ChangeAnim
O SCtrl ChangeAnim é usado para trocas de animações num StateDef específico.
Há vários exemplos de como o usar, e para quê o usar.

Um exemplo bem simples do ChangeAnim:


[State 0, ChangeAnim]
type = ChangeAnim
trigger1 = !time
value = 0
elem = 1

Esse Sctrl tem apenas dois “comandos” abaixo do trigger, que são os Value e Elem.
O Value indica a animação do Air para qual o StateDef irá.
O Elem indica qual AnimElem (que será melhor visto ao decorrer do tutorial) da animação, irá começar a mesma.

ERRO: Quando for usar o SCtrl ChangeAnim, certifique-se que a animação em que você se refere, realmente exista.
Caso contrário o char retornará um erro no Debug do Mugen, e repetirá a ultima animação, até que o char entre numa
animação que realmente exista.

S2.SCTRL – ChangeAnim2
O Sctrl ChangeAnim2 age de forma parecida com o ChangeAnim, mas tem uma única diferença:
- O ChangeAnim procura pela animação do personagem, enquanto o ChangeAnim2 procura pelos sprites do oponente
(em custom states) que fazem essa animação.

Vamos supor que há uma anim com os grupos de sprites:


-5000,0
-5000,10
-5010,10

O ChangeAnim2 iria procurar esses grupos de sprites no oponente, e refazer a animação com os sprites do oponente.

OBS.: Se o oponente não tiver algum(ns) dos sprites, esse(s) sprite(s) “faltante(s)” não aparecerá(am) na execução da
animação.

ERRO: Se você usar o Sctrl ChangeAnim2 num custom state, sempre o ajuste para usar os sprites que qualquer outro
char possa ter (como por exemplo, as get hits requeridas), para a animação ser executada corretamente. Ou então,
limite no cns, para apenas alguns chars que você tenha certeza que terão os sprites requeridos pela sua animação.

S3.SCTRL – ChangeState
Assim como o ChangeAnim foi feito para trocar de animação, o ChangeState foi feito para trocar de StateDef.

Um exemplo bem simples do ChangeState:


[State 0, ChangeState]
type = ChangeState
trigger1 = !time
value = 200
ctrl = 1

Esse Sctrl tem apenas dois “comandos” abaixo do trigger, que são os Value e Ctrl.
O Value indica a qual StateDef do CNS, o char irá.
O Ctrl indica que quando o char for para tal StateDef, se ele vai ser controle sobre si mesmo ou não (muito útil para que
quando você queira fazer um StateDef, sem que outros StateDefs atrapalhem a execução do mesmo).

ERRO: Ao usar o SCtrl ChangeState, tenha certeza de indicar a ele, um StateDef que realmente exista. Caso contrário
será retornado um erro no Debug, e o char continuará no StateDef anterior.
T1.TRIGGER – Time
Esse trigger foi usado nos exemplos de SCRTLs: ChangeAnim e ChangeState.
E o mesmo, tem a utilidade de fazer qualquer SCtrl ser executado dependendo do tick* exato de um StateDef (definido
pelo char maker**).

*Quadros por segundo (por padrão o mugen tem 60 ticks num segundo).
**A pessoa que programa chars para o mugen.

Vamos usar um exemplo, no qual o SCtrl Null seria executado no 6º tick do StateDef:
[State 200, Null]
type = Null
trigger1 = time = 5

Como você pode ver, quando quisermos fazer um SCtrl ser chamado no 6º tick, botamos time = 5.
“Porque?”
Por que o esquema de time do mugen é assim:
time = tempo em tick -1

Veja a Figura T1.1:

Figura T1.1
Tabela de tempo comparativo de ticks.
Onde N seria um numero qualquer.

Lembrando que pode-se usar os sinais > (maior que), < (menor que), >= (maior ou igual), <= (menor ou igual), e
!= (diferente de).

Obs: Se você quiser que algo seja executado no primeiro tick, seria time = 0, ou simplesmente, !time.
Quando você usa o !time, indica que o time não existe, sendo assim ele é falso, e sendo falso, ele é igual a zero.
(informe-se sobre valores Booleanos (http://pt.wikipedia.org/wiki/Booleano)).

T2.TRIGGER – Anim
Esse trigger, tem a utilidade de fazer um SCtrl ser executado, se a Anim que o char maker indicou, seja verdadeira.

Exemplo:
[State 200, ChangeAnim]
type = ChangeAnim
trigger1 = Anim = 230
value = 210
elem = 1

Esse exemplo diz, que se a Animação do char for 230, o StateDef irá para a Anim 210.
T3.TRIGGER – AnimTime
O trigger AnimTime, serve para informar, quando o tempo total da animação, estiver acabado.
[State 200, ChangeAnim]
type = ChangeAnim
trigger1 = !AnimTime ; Ou AnimTime = 0
value = 210
elem = 1

Aqui diz, que se a animação do StateDef estiver acabado, vai para a Anim 210.

Se AnimTime, for maior que zero, como por exemplo AnimTime = 5, ele fará o Sctrl ser executado depois de 5 ticks a
mais no final da animação.

Ou seja, se AnimTime for AnimTime = 10, seria basicamente igual a isso:


time = (tempo total da anim) + 10

Lembrando que aqui também pode-se usar os sinais >, <, >=, <= e !=.

T4.TRIGGER – AnimElem
Esse trigger, é um dos mais usados quando se fala sobre “Quadros de Animação e o Tempo dos mesmos”.
Caso você não tenha entendido, o AnimElem serve para fazer um SCtrl ser executado, se o Quadro de Animação for o
que o char maker queira.

Veja a Figura T4.1

Figura T4.1
Quadro de AnimElem, onde o primeiro sprite da animação é sempre o AnimElem 1.

Exemplo:
[State 200, ChangeState]
type = ChangeState
trigger1 = AnimElem = 3
value = 235
ctrl = 1

Esse trecho de código, diz que quando a Animação estiver no seu 3º quadro de animação, o char irá para o
StateDef 235.

O AnimElem tem a opção além de fazer com que algo seja executado num exato quadro, também seja num exato tick
de um quadro de animação.

Exemplo:
[State 210, ChangeState]
type = ChangeState
trigger1 = AnimElem = 5,= 2
value = 215
ctrl = 1

Veja o AnimElem = 5, logo mais para q esquerda tem uma , (vírgula) e = 2.


Isso significa que o char irá para o StateDef 215, quando estiver no 3º tick do 5º quadro da anim.
Basicamente o AnimElem é feito disso:
AnimElem = (Quadro da Animação), = (time)

OBS.: Quando time não existir, ele será igual a 0 (primeiro tick).

Lembrando que no time do AnimElem pode-se usar os sinais >, <, >=, <= e !=.

T5. TRIGGER – AnimElemTime


O trigger AnimElemTime, é muito semelhante ao AnimElem (devido ao fato de ser uma variação do mesmo), no
quesito funcionalidade.

Se no AnimElem é assim:
AnimElem = 3, =2

No AnimElemTime é assim:
AnimElemTime(3) = 2

Ou seja:
AnimElemTime(Quadro da Animação) = (time)

Não temos muito o que aprender sobre esse trigger, por que ele é muito semelhante ao AnimElem comum.

T6. TRIGGER – SelfAnimExist


Esse trigger informa o mugen, se uma anim realmente existe no char.

Código:
[State 0, ChangeAnim]
type = ChangeAnim
triggerall = SelfAnimExist(5325)
trigger1 = !time
value = 5325

Esse código é simples, ele apenas checa no char se a animação existe, se ela existir, o SCtrl ChangeAnim será
executado e mudará a animação do char para a animação 5325.

T7. TRIGGER – StateNo


O trigger StateNo, é um trigger que retorna o StateDef atual do char (usado muito em ativações de vars,
nos StateDefs -1 (CMD) -2 e -3 (CNS), por exemplo).

Um exemplo do uso dele, no StateDef -2 (mas que pode ser usado nos -1 e -3 também):
[state -2, VarSet]
type = VarSet
trigger1 = StateNo = 1200
var(10) = 5

Aqui nesse exemplo, se o char estiver no StateDef 1200, a var(10) será igual a 5.

Lembrando que pode-se usar os sinais > (maior que), < (menor que), >= (maior ou igual), <= (menor ou igual), e
!= (diferente de).

ERRO: Se você por algum descuido, deixar algum trigger com o StateNo igual a um StateDef não existente, o SCtrl não
executará, pelo motivo que esse StateDef não será executado, se ele não existir.
T8. TRIGGER – PrevStateNo
O PrevStateNo, é similar ao trigger StateNo, mas retorna o StateDef anterior ao o que está sendo executado.

Exemplo:
[state 210, VarSet]
type = VarSet
trigger1 = PrevStateNo = 200
var(10) = 2

Neste exemplo, o SCtrl está no StateDef 210, e diz que a var(10) será igual a 2, se o StateDef anterior tiver sido o
StateDef 200.

Lembrando que pode-se usar os sinais > (maior que), < (menor que), >= (maior ou igual), <= (menor ou igual), e
!= (diferente de).

ERRO: Assim como no trigger StateNo, ao ser confirido um PrevStateNo onde um StateDef não exista, o SCtrl não
será executado, pelo motivo em que esse StateDef nunca será o anterior, por que o mesmo não existe.

Espero que você que leu esse tutorial, tenha entendido os princípios e usos dos SCTRLS:
ChangeAnim, ChangeAnim2 e ChangeState.
E dos triggers que os auxiliam:
Time, Anim, AnimTime, AnimElem, AnimElemTime, StateNo e PrevStateNo.

Tutorial feito por SonSon3000.

Você também pode gostar