Tutorial sobre troca de
Tutorial sobre troca de
animações e states
animações e states
Escrito por SonSon3000
Escrito por SonSon3000
(Emerson Moises Reis Manfron)
(Emerson Moises Reis Manfron)
Conhecendo os SCTRLs e Triggers
Conhecendo os SCTRLs e Triggers
...
...
...
...
...
...
...
... 44
S1.SCTRL
S1.SCTRL –
– ChangeAnim
ChangeAnim ...
...
...
...
...
...
...
...
...
... 44
S2.SCTRL
S2.SCTRL –
– ChangeAnim2
ChangeAnim2 ...
...
...
...
...
...
...
...
...
... 44
S3.SC
S3.SCTRL
TRL –
– Chan
ChangeSta
geState
te ...
...
...
...
...
...
...
...
...
...
... 44
T1.TRI
T1.TRIGGER
GGER –
– Time...
Time...
...
...
...
...
...
...
...
...
...
... 55
T2.TRI
T2.TRIGGER
GGER –
– Anim..
Anim...
...
...
...
...
...
...
...
...
...
...
... 55
T3.TRIGGER
T3.TRIGGER –
– AnimTime...
AnimTime...
...
...
...
...
...
...
...
... 66
T4.TRIGGER
T4.TRIGGER –
– AnimElem
AnimElem ...
...
...
...
...
...
...
...
...
... 66
T5.
T5. TRIGGER
TRIGGER –
– AnimElemTime
AnimElemTime ...
...
...
...
...
...
...
...
...
.... 77
T6.
T6. TRIGGE
TRIGGER
R –
– AnimE
AnimElemNo...
lemNo...
...
...
...
...
...
...
...
...
... 77
T7.
T7. TRIGGER
TRIGGER –
– SelfAnimExist...
SelfAnimExist...
...
...
...
...
...
...
...
... 77
T8.
T8. TRIGGE
TRIGGER
R –
– State
StateNo...
No...
...
...
...
...
...
...
...
...
... 88
T9.
T9. TRIGGER
TRIGGER –
– PrevStateNo
PrevStateNo ...
...
...
...
...
...
...
...
...
... 88
Algumas lógicas usando os SCTRLs e Triggers
Algumas lógicas usando os SCTRLs e Triggers
...
...
...
...
...
.... 99
L1.
L1. LÓGICA
LÓGICA -
- Usando
Usando 2
2 (dois)
(dois) ou
ou mais
mais ChangeAnim:
ChangeAnim: ...
...
...
...
...
...
... 99
L2.
L2. LÓGICA
LÓGICA -
- Usando
Usando ChangeAnim
ChangeAnim privados
privados...
...
...
...
...
...
...
... 10
10
L3.
L3. LÓGICA
LÓGICA -
- Usan
Usando
do Chang
ChangeAnim2 privados
eAnim2 privados...
...
...
...
...
...
...
...
... 10
10
L4. LÓGICA
L4. LÓGICA - Executa
- Executando um
ndo um SCtrl num
SCtrl num determinado te
determinado tempo (em
mpo (em time)
time)...
...
...
...
... 11
11
L5. LÓGICA -
S1.SCTRL – ChangeAnim
S1.SCTRL – ChangeAnim
O
O SCtrl ChangeAnimSCtrl ChangeAnim é usado para trocas de animações num StateDef específico.é usado para trocas de animações num StateDef específico. Há vários exemplos de como o usar, e para quê o usar.
Há vários exemplos de como o usar, e para quê o usar. Um exemplo bem simples do ChangeAnim:
Um exemplo bem simples do ChangeAnim:
[State 0, ChangeAnim] [State 0, ChangeAnim] type = ChangeAnim type = ChangeAnim trigger1 = !time trigger1 = !time value = 0 value = 0 elem = 1 elem = 1
Esse Sctrl tem apenas dois “comandos” abaixo do trigger, que são os
Esse Sctrl tem apenas dois “comandos” abaixo do trigger, que são os ValueValue ee ElemElem.. O
O ValueValue indica a animação do Air para qual o StateDef irá.indica a animação do Air para qual o StateDef irá. O
O ElemElem indica qualindica qual AnimElemAnimElem (que será melhor visto ao decorrer do tutorial) da animação, irá começar a mesma.(que será melhor visto ao decorrer do tutorial) da animação, irá começar a mesma. ERRO:
ERRO: Quando for usar oQuando for usar o SCtrl ChangeAnimSCtrl ChangeAnim, certifique-se que a animação em que você se refere, realmente exista., 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 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.
animação que realmente exista.
S2.SCTRL – ChangeAnim2
S2.SCTRL – ChangeAnim2
O
O Sctrl ChangeAnim2Sctrl ChangeAnim2 age de forma parecida com o ChangeAnim, mas tem uma única diferença: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 - O ChangeAnim procura pela animação do personagem, enquanto o ChangeAnim2 procura pelos sprites do oponente (em custom states) que fazem essa animação.
(em custom states) que fazem essa animação. Vamos supor que há uma anim com
Vamos supor que há uma anim com os grupos de sprites:os grupos de sprites: -5000,0 -5000,0 -5000,10 -5000,10 -5010,10 -5010,10
O ChangeAnim2 iria procurar esses grupos de sprites no oponente, e refazer a animação com os mesmos. O ChangeAnim2 iria procurar esses grupos de sprites no oponente, e refazer a animação com os mesmos.
OBS.: Se o oponente não tiver algum(ns) do(s) sprite(s), esse(s) sprite(s) “faltante(s)” não aparecerá(am) na execução OBS.: Se o oponente não tiver algum(ns) do(s) sprite(s), esse(s) sprite(s) “faltante(s)” não aparecerá(am) na execução da animação.
da animação. ERRO:
ERRO: Se você usar oSe você usar o Sctrl ChangeAnim2Sctrl ChangeAnim2 num custom state, sempre o ajuste para usar os sprites que qualquer outronum 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, 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. limite no cns, para apenas alguns chars que você tenha certeza que terão os sprites requeridos pela sua animação.
S3.SCTRL – ChangeState
S3.SCTRL – ChangeState
Assim como o
Assim como o ChangeAnimChangeAnim foi feito para trocar de animação, ofoi feito para trocar de animação, o ChangeStateChangeState foi feito para trocar de StateDef.foi feito para trocar de StateDef. Um exemplo bem simples do ChangeState:
Um exemplo bem simples do ChangeState:
[State 0, ChangeState] [State 0, ChangeState] type = ChangeState type = ChangeState trigger1 = !time trigger1 = !time value = 200 value = 200 ctrl = 1 ctrl = 1
Esse Sctrl tem apenas dois “comandos” abaixo do trigger, que são os
Esse Sctrl tem apenas dois “comandos” abaixo do trigger, que são os ValueValue ee CtrlCtrl.. O
O ValueValue indica a qual StateDef do CNS, o char irá.indica a qual StateDef do CNS, o char irá. O
O CtrlCtrl indica que quando o char for para tal StateDef, se ele vai ser controle sobre si mesmo ou não (muito útil para casoindica que quando o char for para tal StateDef, se ele vai ser controle sobre si mesmo ou não (muito útil para caso você queira fazer um StateDef, sem que outros StateDefs atrapalhem a execução do mesmo).
você queira fazer um StateDef, sem que outros StateDefs atrapalhem a execução do mesmo). ERRO:
ERRO: Ao usar oAo usar o SCtrl ChangeStateSCtrl ChangeState, tenha certeza de indicar a ele, um StateDef que realmente exista. Caso contrário, 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
T1.TRIGGER – Time
Esse trigger foi usado nos exemplos de
Esse trigger foi usado nos exemplos de SCRTLs: ChangeAnimSCRTLs: ChangeAnim ee ChangeStateChangeState.. E o mesmo, tem a utilidade de fazer qualquer
E o mesmo, tem a utilidade de fazer qualquer SCtrlSCtrl ser executado dependendo do tick* exato de um StateDef (definidoser executado dependendo do tick* exato de um StateDef (definido pelo char maker**).
pelo char maker**).
*Quadros por segundo (por padrão o mugen tem 60 ticks num segundo). *Quadros por segundo (por padrão o mugen tem 60 ticks num segundo). **
**A pessoa que programa chars para o mugen.A pessoa que programa chars para o mugen. Vamos usar um exemplo, no qual o
Vamos usar um exemplo, no qual o SCtrl NullSCtrl Null seria executado no 6º tick do StateDef:seria executado no 6º tick do StateDef: [State 200, Null] [State 200, Null] type = Null type = Null trigger1 = time = trigger1 = time = 55
Como você pode ver, quando quisermos fazer um SCtrl ser chamado no 6º tick, botamos time = 5. Como você pode ver, quando quisermos fazer um SCtrl ser chamado no 6º tick, botamos time = 5.
“Por que?” “Por que?”
Porque o esquema de time do mugen é assim: Porque o esquema de time do mugen é assim: time = tempo em tick -1
time = tempo em tick -1 Veja a
Veja a Figura T1.1Figura T1.1::
Figura T1.1 Figura T1.1
Tabela de tempo comparativo de ticks. Tabela de tempo comparativo de ticks.
Onde N seria um numero qualquer. Onde N seria um numero qualquer. Lembrando que pode-se usar os sinais
Lembrando que pode-se usar os sinais > (maior que)> (maior que),, < (menor que)< (menor que),, >=>= (maior ou igual)(maior ou igual),, <= (menor ou igual),<= (menor ou igual), ee !=
!= (diferente de)(diferente de)..
Obs: Se você quiser que algo seja executado no primeiro tick, seria
Obs: Se você quiser que algo seja executado no primeiro tick, seria time = 0time = 0, ou simplesmente,, ou simplesmente, !time!time.. Quando você usa o
Quando você usa o !time!time, indica que o time não existe, sendo assim ele é falso, e sendo falso, ele é igual a zero., indica que o time não existe, sendo assim ele é falso, e sendo falso, ele é igual a zero. (para saber mais, informe-se sobre valores
(para saber mais, informe-se sobre valores Booleanos)Booleanos)
T2.TRIGGER – Anim
T2.TRIGGER – Anim
Esse trigger, tem a utilidade de fazer um
Esse trigger, tem a utilidade de fazer um SCtrlSCtrl ser executado, se aser executado, se a AnimAnim que o char maker indicou, seja verdadeira.que o char maker indicou, seja verdadeira. Exemplo: Exemplo: [State 200, ChangeAnim] [State 200, ChangeAnim] type = ChangeAnim type = ChangeAnim trigger1 = Anim = 230 trigger1 = Anim = 230 value = 210 value = 210 elem = 1 elem = 1
Esse exemplo diz, que se a Animação do char for 230, o StateDef irá para a Anim 210. Esse exemplo diz, que se a Animação do char for 230, o StateDef irá para a Anim 210.
type = ChangeAnim type = ChangeAnim trigger1
trigger1 = = !AnimTime !AnimTime ; ; Ou Ou AnimTime AnimTime = = 0 0 value = 210
value = 210 elem = 1 elem = 1
Aqui diz, que se a animação do StateDef estiver acabado, vai para a Anim 210. Aqui diz, que se a animação do StateDef estiver acabado, vai para a Anim 210. Se
Se AnimTimeAnimTime, for maior que zero, como por exemplo, for maior que zero, como por exemplo AnimTime = 5AnimTime = 5, ele fará o, ele fará o SctrlSctrl ser executado 5 ticks depois deser executado 5 ticks depois de acabada a animação.
acabada a animação. Se
Se AnimTimeAnimTime, for menor que zero, como por exemplo, for menor que zero, como por exemplo AnimTime = -5AnimTime = -5, ele fará o, ele fará o SctrlSctrl ser executado ser executado 5 ticks 5 ticks antes deantes de acabar a animação.
acabar a animação. Ou seja, se
Ou seja, se AnimTimeAnimTime for for AnimTime = 10AnimTime = 10,, seria basicamente igual a isso:seria basicamente igual a isso:
time
time = (tempo total da anim) + 10 = (tempo total da anim) + 10
Lembrando que aqui também pode-se usar os sinais
Lembrando que aqui também pode-se usar os sinais >>,, <<,, >=>=,, <=<= ee !=!=..
T4.TRIGGER – AnimElem
T4.TRIGGER – AnimElem
Esse trigger, é um dos mais usados quando se fala sobre “Quadros de Animação e o Tempo dos mesmos”. 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
Caso você não tenha entendido, o AnimElemAnimElem serve para fazer umserve para fazer um SCtrlSCtrl ser executado, se o Quadro de Animação for oser executado, se o Quadro de Animação for o que o char maker queira.
que o char maker queira. Veja a
Veja a Figura T4.1Figura T4.1
Figura T4.1 Figura T4.1 Quadro de AnimElem, onde o primeiro s
Quadro de AnimElem, onde o primeiro sprite da animação é sempre o prite da animação é sempre o AnimElem 1.AnimElem 1. Exemplo: Exemplo: [State 200, ChangeState] [State 200, ChangeState] type = ChangeState type = ChangeState trigger1 = AnimElem = 3 trigger1 = AnimElem = 3 value = 235 value = 235 ctrl = 1 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 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.
StateDef 235. O
O AnimElemAnimElem tem a opção além de fazer com que algo seja executado num exato quadro, também seja num exato ticktem 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. de um quadro de animação. Exemplo: Exemplo: [State 210, ChangeState] [State 210, ChangeState] type = ChangeState type = ChangeState trigger1 = AnimElem = 5,= 2 trigger1 = AnimElem = 5,= 2 value = 215 value = 215 ctrl = 1 ctrl = 1 Veja o
Veja o AnimElem = 5AnimElem = 5, logo mais para a esquerda tem uma, logo mais para a esquerda tem uma , (vírgula), (vírgula) ee = 2= 2..
Isso significa que o char irá para o StateDef 215, quando estiver no 3º tick do 5º quadro da anim. 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: Basicamente o AnimElem é feito disso:
AnimElem = (Quadro da Animação), = (time) AnimElem = (Quadro da Animação), = (time)
OBS.: Quando
OBS.: Quando timetime não existir, ele será igual a 0 (primeiro tick).não existir, ele será igual a 0 (primeiro tick). Lembrando que no
Lembrando que no timetime dodo AnimElemAnimElem pode-se usar os sinaispode-se usar os sinais >>,, <<,, >=>=,, <=<= ee !=!=..
T5. TRIGGER – AnimElemTime
T5. TRIGGER – AnimElemTime
O trigger
O trigger AnimElemTimeAnimElemTime, é muito semelhante ao, é muito semelhante ao AnimElemAnimElem (devido ao fato de ser uma variação do mesmo)(devido ao fato de ser uma variação do mesmo),, nono quesito funcionalidade.
quesito funcionalidade. Se no
Se no AnimElemAnimElem é assim:é assim:
AnimElem = 3, =2 AnimElem = 3, =2
No
No AnimElemTimeAnimElemTime seria assim:seria assim:
AnimElemTime(3) = 2 AnimElemTime(3) = 2
Ou seja: Ou seja:
AnimElemTime(Quadro da Animação) = (time) AnimElemTime(Quadro da Animação) = (time)
Não temos muito o que aprender sobre esse trigger, porque ele é muito semelhante ao
Não temos muito o que aprender sobre esse trigger, porque ele é muito semelhante aoAnimElemAnimElem comum.comum.
T6. TRIGGER – AnimElemNo
T6. TRIGGER – AnimElemNo
Esse trigger é uma outra variação do AnimElem, mas seu funcionamento é um tanto diferente, dos dois triggers acima. Esse trigger é uma outra variação do AnimElem, mas seu funcionamento é um tanto diferente, dos dois triggers acima. Exemplo: Exemplo: [State 200, VarAdd] [State 200, VarAdd] type = VarAdd type = VarAdd trigger1 = AnimElemNo(0) = 1 trigger1 = AnimElemNo(0) = 1 var(10) = 5 var(10) = 5 Esse exemplo,
Esse exemplo, VarAddVarAdd irá incrementar a var(10) de 5 em 5, a cada tick doirá incrementar a var(10) de 5 em 5, a cada tick do AnimElem 1AnimElem 1.. Onde isso: Onde isso: AnimElemNo(0) = 1 AnimElemNo(0) = 1 Seria equivalente à: Seria equivalente à:
AnimElem = 1, >= 0 && AnimElem = 2, < 0 AnimElem = 1, >= 0 && AnimElem = 2, < 0
Ou então à: Ou então à:
AnimElemTime(1) >= 0 && AnimElemTime(2) < 0 AnimElemTime(1) >= 0 && AnimElemTime(2) < 0
Simplificando, o número entre parênteses é o tick do elem e depois do sinal de igual, o elem em si. Simplificando, o número entre parênteses é o tick do elem e depois do sinal de igual, o elem em si.
AnimElemNo(
AnimElemNo( timetime) =) = elemelem
O AnimElemNo, faz um
O AnimElemNo, faz um SCtrlSCtrl ser executado a partir doser executado a partir do timetime dodo elemelem, até o ultimo, até o ultimo timetime do mesmodo mesmo elemelem..
T7. TRIGGER – SelfAnimExist
T7. TRIGGER – SelfAnimExist
Esse trigger informa o mugen, se
Esse trigger informa o mugen, se uma anim realmente existe no char.uma anim realmente existe no char. Código: Código: [State 0, ChangeAnim] [State 0, ChangeAnim] type = ChangeAnim type = ChangeAnim triggerall = SelfAnimExist(5325) triggerall = SelfAnimExist(5325) trigger1 = !time trigger1 = !time value = 5325 value = 5325
Esse código é simples, ele apenas checa no char se a
Esse código é simples, ele apenas checa no char se aanimação 5325 animação 5325 existe, se ela existir, o SCtrl ChangeAnimexiste, se ela existir, oSCtrl ChangeAnim seráserá
executado e mudará a animação do char para a
Um exemplo do uso dele, no StateDef -2 (mas que pode ser usado nos -1 e -3 também): Um exemplo do uso dele, no StateDef -2 (mas que pode ser usado nos -1 e -3 também): [state -2, VarSet] [state -2, VarSet] type = VarSet type = VarSet trigger1 = StateNo = 1200 trigger1 = StateNo = 1200 var(10) = 5 var(10) = 5
Aqui nesse exemplo, se o char estiver no StateDef 1200, a var(10) será igual a 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
Lembrando que pode-se usar os sinais >, < , >=>, < , >= , <=, <= ee !=!=.. ERRO:
ERRO: Se você por algum descuido, deixar algum trigger com oSe você por algum descuido, deixar algum trigger com o StateNoStateNo igual a um StateDef não existente, oigual a um StateDef não existente, o SCtrlSCtrl nãonão executará, pelo motivo que esse StateDef não será executado, se ele não existir.
executará, pelo motivo que esse StateDef não será executado, se ele não existir.
T9. TRIGGER – PrevStateNo
T9. TRIGGER – PrevStateNo
O
O PrevStateNoPrevStateNo, é similar ao trigger , é similar ao trigger StateNoStateNo, mas retorna o StateDef anterior ao o que está sendo executado., mas retorna o StateDef anterior ao o que está sendo executado. Exemplo: Exemplo: [state 210, VarSet] [state 210, VarSet] type = VarSet type = VarSet trigger1 = PrevStateNo = 200 trigger1 = PrevStateNo = 200 var(10) = 2 var(10) = 2 Neste exemplo, o
Neste exemplo, o SCtrlSCtrl está no StateDef 210, e diz que a var(10) será igual a 2, se o StateDef anterior ao o que estáestá no StateDef 210, e diz que a var(10) será igual a 2, se o StateDef anterior ao o que está sendo executado, tiver sido o StateDef 200.
sendo executado, tiver sido o StateDef 200. Lembrando que pode-se usar os sinais
Lembrando que pode-se usar os sinais >, < , >=>, < , >= , <=, <= ee !=!=.. ERRO:
ERRO: Assim como no trigger Assim como no trigger StateNoStateNo, ao ser conferido um, ao ser conferido um PrevStateNoPrevStateNo onde um StateDef não exista, oonde um StateDef não exista, o SCtrlSCtrl nãonão será executado, pelo motivo em que esse StateDef nunca será o anterior, porque o mesmo não existe.
Algumas lógicas usando os SCTRLs e Triggers
Algumas lógicas usando os SCTRLs e Triggers
L1. LÓGICA - Usando 2 (dois) ou mais ChangeAnim
L1. LÓGICA - Usando 2 (dois) ou mais ChangeAnim
::
Vamos supor que o char tenha que executar duas animações dependendo do que o jogador estiver fazendo com ele. Vamos supor que o char tenha que executar duas animações dependendo do que o jogador estiver fazendo com ele. Que nem num power change, onde o char carrega suas barras de level. Então, quando o jogador estiver executando o Que nem num power change, onde o char carrega suas barras de level. Então, quando o jogador estiver executando o comando, o char executará uma animação e quando soltar o botão, executará outra animação.
comando, o char executará uma animação e quando soltar o botão, executará outra animação. Geralmente makers fazem isso usando dois StateDefs, enquanto poderia usar apenas um, com dois
Geralmente makers fazem isso usando dois StateDefs, enquanto poderia usar apenas um, com doisChangeAnimChangeAnim.. Código:
Código:
[State 700, Animação do char executando o Power Charge] [State 700, Animação do char executando o Power Charge] type
type = = ChangeAnimChangeAnim
trigger1 = command = “hold_c” trigger1 = command = “hold_c” value = 700
value = 700
[State 700, Animação do char parando de executar o Power Charge] [State 700, Animação do char parando de executar o Power Charge] type
type = = ChangeAnimChangeAnim triggerall = Anim = 700 triggerall = Anim = 700
trigger1 = command != “hold_c” trigger1 = command != “hold_c” value = 705
value = 705
Neste código não colocamos o
Neste código não colocamos o elemelem embaixo deembaixo de valuevalue, por que caso o, por que caso o elemelem não seja atribuído, ele será igual a 1.não seja atribuído, ele será igual a 1. Agora à explicação do código em si:
Agora à explicação do código em si: - Quando o comando
- Quando o comandohold_c hold_c estiver sendo pressionado, a animação do personagem seráestiver sendo pressionado, a animação do personagem será700 700 ;;
- Quando o comando
- Quando o comandohold_c hold_c não estiver sendo pressionado (que nesse caso, está sendo solto), a animação donão estiver sendo pressionado (que nesse caso, está sendo solto), a animação do
personagem será personagem será705 705 ..
Mas preste atenção na linha em
Mas preste atenção na linha em negritonegrito do código.do código. Aquele
Aqueletriggerall triggerall com a animação anterior àcom a animação anterior à705 705 , é obrigatório quando uma animação está vindo após a outra, num, é obrigatório quando uma animação está vindo após a outra, num
mesmo StateDef. Caso contrário, o char travará, e nunca sairá da animação. mesmo StateDef. Caso contrário, o char travará, e nunca sairá da animação. Logo após ter feito os dois
Logo após ter feito os dois ChangeAnimChangeAnim, faremos o, faremos o ChangeStateChangeState retornando ao StateDef “base” do personagem (suaretornando ao StateDef “base” do personagem (sua pose de luta, sem estar fazendo nenhuma ação):
pose de luta, sem estar fazendo nenhuma ação):
[State 700, Voltando ao State Base] [State 700, Voltando ao State Base] type = ChangeState type = ChangeState trigger1 = Anim = 705 trigger1 = Anim = 705 trigger1 = !AnimTime trigger1 = !AnimTime value = 0 value = 0
Preste bem atenção nas linhas em
Preste bem atenção nas linhas em negritonegrito. Se você prestou bem a atenção no código, verá que o. Se você prestou bem a atenção no código, verá que o ChangeStateChangeState só serásó será executado, logo após a
executado, logo após aanimação 705 animação 705 ter acabado.ter acabado.
Ficando os três
Ficando os três SCtrlSCtrl juntos, seria assim:juntos, seria assim:
[State 700, Animação do char executando o Power Charge] [State 700, Animação do char executando o Power Charge] type
type = = ChangeAnimChangeAnim
trigger1 = command = “hold_c” trigger1 = command = “hold_c” value = 700
value = 700
[State 700, Animação do char parando de executar o Power Charge] [State 700, Animação do char parando de executar o Power Charge] type
type = = ChangeAnimChangeAnim triggerall = Anim = 700 triggerall = Anim = 700
trigger1 = command != “hold_c” trigger1 = command != “hold_c” value = 705
value = 705
[State 700, Voltando ao State Base] [State 700, Voltando ao State Base] type = ChangeState type = ChangeState trigger1 = Anim = 705 trigger1 = Anim = 705 trigger1 = !AnimTime trigger1 = !AnimTime value = 0 value = 0
L2. LÓGICA - Usando
L2. LÓGICA - Usando ChangeAnim privados
ChangeAnim privados
ChangeAnim privados geralmente são usados em intros/vitórias especiais, ou em “
ChangeAnim privados geralmente são usados em intros/vitórias especiais, ou em “custom animscustom anims” (que diferente do” (que diferente do
ChangeAnim2
ChangeAnim2, o custom state chamaria a animação do oponente, e não os sprites do mesmo)., o custom state chamaria a animação do oponente, e não os sprites do mesmo). E para não causar bugs em
E para não causar bugs emcustom animscustom anims:: [State 6100, Custom Anim]
[State 6100, Custom Anim] type = ChangeAnim type = ChangeAnim triggerall = SelfAnimExist(6100) triggerall = SelfAnimExist(6100) trigger1 = !time trigger1 = !time value = 6100 value = 6100
[State 6100, Normal Anim] [State 6100, Normal Anim] type = ChangeAnim type = ChangeAnim triggerall = !SelfAnimExist(6100) triggerall = !SelfAnimExist(6100) trigger1 = !time trigger1 = !time value = 5000 value = 5000
Neste código, o oponente iria para a
Neste código, o oponente iria para aanimação 6100 animação 6100 , caso a mesma existir no *.air do oponente., caso a mesma existir no *.air do oponente.
Caso contrário, iria para a
Caso contrário, iria para aanimação 5000 animação 5000 ..
L3. LÓGICA - Usando
L3. LÓGICA - Usando ChangeAnim2 privados
ChangeAnim2 privados
Geralmente, quando vamos usar
Geralmente, quando vamos usar custom states,custom states,usamos ousamos o ChangeAnim2ChangeAnim2 pra fazer uma animaçãopra fazer uma animação
customizada/personalizada. customizada/personalizada.
Mas infelizmente muitos chars não terão os sprites (dependendo do tipo de custom state) que necessita a anim do Mas infelizmente muitos chars não terão os sprites (dependendo do tipo de custom state) que necessita a anim do ChangeAnim2
ChangeAnim2..
Então para também não causar bugs, podemos “privar” o
Então para também não causar bugs, podemos “privar” o ChangeAnim2ChangeAnim2 para chars que temos certeza que tem os taispara chars que temos certeza que tem os tais
sprites requeridos sprites requeridos..
Exemplo: Exemplo:
[State 6200, Custom Anim – Para os chars Ryu,Ken,Sub-Zero e Scorpion] [State 6200, Custom Anim – Para os chars Ryu,Ken,Sub-Zero e Scorpion] type = ChangeAnim2
type = ChangeAnim2 triggerall = !time triggerall = !time
trigger1 = P1Name = “Ryu” trigger1 = P1Name = “Ryu” trigger2 = P1Name = “Ken” trigger2 = P1Name = “Ken” trigger3 = P1Name = “Sub-Zero” trigger3 = P1Name = “Sub-Zero” trigger4 = P1Name = “Scorpion” trigger4 = P1Name = “Scorpion” value = 6200
value = 6200
Esse exemplo executa o
Esse exemplo executa o ChangeAnim2ChangeAnim2 no momento exato de inicialização do StateDef, e quando o oponente seno momento exato de inicialização do StateDef, e quando o oponente se chamar Ryu, Ken, Sub-Zero ou Scorpion.
chamar Ryu, Ken, Sub-Zero ou Scorpion. Obs.:
Obs.: Você poderá adicionar triggers com números diferentes, iguais aVocê poderá adicionar triggers com números diferentes, iguais aenemynear,name = “nome do oponente”.enemynear,name = “nome do oponente”. PS.:
PS.: Nos triggers você pode notar que está sendo usado o termoNos triggers você pode notar que está sendo usado o termoP1NameP1Name. A resposta disso é simples, esse. A resposta disso é simples, esse
ChangeAnim2
ChangeAnim2 está dentro de umestá dentro de umcustom statecustom state, logo o oponente executará esse custom, logo o oponente executará esse customstatestatecomo se fosse umcomo se fosse um StateDef
StateDef dele.dele.
E para o char se “auto-reconhecer” é usado o
Mas privando o
Mas privando o ChangeAnim2ChangeAnim2 dessa forma, quando o oponente não se chamar Ryu, Ken, Sub-Zero ou Scorpion, eledessa forma, quando o oponente não se chamar Ryu, Ken, Sub-Zero ou Scorpion, ele ficará sem animação, travado no custom state.
ficará sem animação, travado no custom state. Então teremos que criar uma animação no
Então teremos que criar uma animação no ChangeAnimChangeAnim para os personagens que não são os que opara os personagens que não são os que o ChangeAnim2ChangeAnim2 procura:
procura:
[State 6200, Custom Anim – Para outros chars] [State 6200, Custom Anim – Para outros chars] type = ChangeAnim
type = ChangeAnim triggerall = !time triggerall = !time
trigger1 = P1Name != “Ryu” trigger1 = P1Name != “Ryu” trigger1 = P1Name != “Ken” trigger1 = P1Name != “Ken” trigger1 = P1Name != “Sub-Zero” trigger1 = P1Name != “Sub-Zero” trigger1 = P1Name != “Scorpion” trigger1 = P1Name != “Scorpion” value = 5000
value = 5000
Nesse exemplo, se os chars se chamarem Ryu, Ken, Sub-Zero ou Scorpion, será executado o Nesse exemplo, se os chars se chamarem Ryu, Ken, Sub-Zero ou Scorpion, será executado o ChangeAnim2
ChangeAnim2 com a animação 6200, caso contrário será executado ocom a animação 6200, caso contrário será executado o ChangeAnimChangeAnim com a animação 5000.com a animação 5000.
L4. LÓGICA - Executando um SCtrl num determinado tempo (em time)
L4. LÓGICA - Executando um SCtrl num determinado tempo (em time)
Para fazer acontecer isso, usaremos
Para fazer acontecer isso, usaremos timetime maior quemaior quevalor mínimovalor mínimoee timetime menor quemenor quevalor máximovalor máximo..
Então, seguiremos o exemplo: Então, seguiremos o exemplo:
[State 200, Soco do char] [State 200, Soco do char] type = ChangeAnim2 type = ChangeAnim2 triggerall = Anim != 200 triggerall = Anim != 200
trigger1 = time >= 0 && time <= 10 trigger1 = time >= 0 && time <= 10 value = 200
value = 200
Esse simples exemplo diz que quando o
Esse simples exemplo diz que quando o timetime for maior ou igual a 0 (primeiro tick em diante) e menor ou igual a 10for maior ou igual a 0 (primeiro tick em diante) e menor ou igual a 10 (décimo primeiro tick pra menos), fazendo que o
(décimo primeiro tick pra menos), fazendo que o SCtrlSCtrl seja executado apenas nos primeiros 11 ticks do StateDef.seja executado apenas nos primeiros 11 ticks do StateDef. Já o triggerall ta dizendo que a
Já o triggerall ta dizendo que aanimação 200 animação 200 só será executada, quando a mesma não estiver sido executada antes.só será executada, quando a mesma não estiver sido executada antes.
L5. LÓGICA - Executando um SCtrl num determinado tempo (em AnimElem/AnimElemTime)
L5. LÓGICA - Executando um SCtrl num determinado tempo (em AnimElem/AnimElemTime)
Isso é útil para se fazer algo acontecer entre um
Isso é útil para se fazer algo acontecer entre um AnimElemAnimElem e outro, ou entre um tick doe outro, ou entre um tick do AnimElemAnimElem e outro.e outro.
[State 200, Soco do char] [State 200, Soco do char] type = ChangeAnim2 type = ChangeAnim2 triggerall = Anim != 200 triggerall = Anim != 200 trigger1 = AnimElem = 3, >= 0 trigger1 = AnimElem = 3, >= 0 trigger1 = AnimElem = 6, <= 4 trigger1 = AnimElem = 6, <= 4 value = 200 value = 200
Isso faria que a Animação estivesse sendo executada entre o
Isso faria que a Animação estivesse sendo executada entre o AnimElem 3AnimElem 3 no primeiro tick, e entre o 5 tick dono primeiro tick, e entre o 5 tick do AnimElem 6
AnimElem 6.. Isso em
Isso em AnimElemTimeAnimElemTime seria assim:seria assim:
[State 200, Soco do char] [State 200, Soco do char] type = ChangeAnim2 type = ChangeAnim2 triggerall = Anim != 200 triggerall = Anim != 200 trigger1 = AnimElemTime(3) >= 0 trigger1 = AnimElemTime(3) >= 0 trigger1 = AnimElemTime(6) <= 4 trigger1 = AnimElemTime(6) <= 4 value = 200 value = 200