Bieg do tyłu zamiast odskoku
Cały przykład opisany jest dla standardowej postaci o nazwie Kung Fu Man (KFM).
Standardowo postacie w Mugenie potrafią biegać do przodu przy np. podwójnym wciśnięciu i trzymaniu klawisza odpowiadającego za chodzenie do przodu, jednak inaczej jest z biegiem w tył, standardowo w Mugenie używany jest tylko odskok. Co jeżeli chcesz, żeby twoja postać biegała też w tył ? Rozwiązanie jest banalnie proste.
W skrócie: wystarczy skopiować stan biegu do przodu, zmienić numer na numer odskoku w tył i zmienić animację.
Wywołanie biegu
Postać KFM wywołuje bieg i odskok w pliku CMD za pomocą podanych komend (czyli nazw dla kombinacji klawiszy).
;-| Double Tap |----------------------------------------------------------- [Command] name = "FF" ;Required (do not remove) command = F, F time = 10 [Command] name = "BB" ;Required (do not remove) command = B, B time = 10 .... ;-| Hold Dir |-------------------------------------------------------------- [Command] name = "holdfwd";Required (do not remove) command = /$F time = 1 [Command] name = "holdback";Required (do not remove) command = /$B time = 1 ....
Do tego postać wywołuje stan za pomocą odpowiedniego przeskoku w stanie kontrolnym [Statedef -1] też w CMD do stanów z mugenowego pliku common1.cns:
;--------------------------------------------------------------------------- ;Run Fwd - bieg do przodu [State -1, Run Fwd] type = ChangeState value = 100 trigger1 = command = "FF" trigger1 = statetype = S trigger1 = ctrl ;--------------------------------------------------------------------------- ;Run Back - bieg do tyłu [State -1, Run Back] type = ChangeState value = 105 trigger1 = command = "BB" trigger1 = statetype = S trigger1 = ctrl
Aby postać biegała i odskakiwała w tył musi mieć coś na wzór pokazanych wyżej przeskoków (type = ChangeState). Korzystając ze standardowych stanów z common1.cns zaleca się zachować numery stanów 100 i 105.
Stan biegu
Standardowo w pliku common1.cns stan 100 to bieg do przodu a 105 i 106 to odskok. Nie można zmieniać stanu w common1.cns bo zmieni się stan dla wszystkich postaci korzystających z pliku. Należy stworzyć w plikach postaci (w pliku CNS lub ST) nowy stan o tym samym numerze, stan twojej postaci będzie ważniejszy niż ten z common1.cns.
Standardowo bieg do przodu wygląda tak:
; Run forward [Statedef 100] type = S physics = S anim = 100 sprpriority = 1 [State 100, 1] type = VelSet trigger1 = 1 x = const(velocity.run.fwd.x) [State 100, 2] ;Prevent run from canceling into walk type = AssertSpecial trigger1 = 1 flag = NoWalk [State 100, 3] ;Prevent from turning type = AssertSpecial trigger1 = 1 flag = NoAutoTurn [State 100, 4] type = ChangeState trigger1 = command != "holdfwd" value = 0
Odskok w tył jest nieco bardziej skomplikowany, składa się z dwóch stanów: wyskoku i lądowania, wygląda tak:
;--------------------------------------------------------------------------- ; Hop backwards [Statedef 105] type = A physics = A ctrl = 0 anim = 105 sprpriority = 1 [State 105, 1] type = VelSet trigger1 = Time = 0 x = const(velocity.run.back.x) y = const(velocity.run.back.y) [State 105, 2] type = CtrlSet trigger1 = Time = 2 value = 1 [State 105, 3] type = ChangeState trigger1 = Vel Y > 0 trigger1 = Pos Y >= 0 value = 106 ;--------------------------------------------------------------------------- ; Hop backwards (land) [Statedef 106] type = S physics = S ctrl = 0 anim = 47 [State 106, 1] type = VelSet trigger1 = Time = 0 y = 0 [State 106, 2] type = PosSet trigger1 = Time = 0 y = 0 [State 106, 3] type = MakeDust trigger1 = Time = 2 pos = 0, 0 spacing = 1 [State 106, 4] type = VelSet trigger1 = abs(vel x) < Const(movement.stand.friction.threshold) x = 0 [State 106, 5] type = ChangeState trigger1 = Time = 7 value = 0 ctrl = 1
Wystarczy teraz skopiować bieg do przodu i upodobnić go do odskoku.
;--------------------------------------------------------------------------- ; Run backwards [Statedef 105] type = S physics = S anim = 105 sprpriority = 1 [State 105, 1] type = VelSet trigger1 = 1 x = const(velocity.run.back.x) ;ZMIANA [State 105, 2] ;Prevent run from canceling into walk type = AssertSpecial trigger1 = 1 flag = NoWalk [State 105, 3] ;Prevent from turning type = AssertSpecial trigger1 = 1 flag = NoAutoTurn [State 105, 4] type = ChangeState trigger1 = command != "holdback" ;ZMIANA value = 0 anim = 5 ;ZMIANA ;---------------------------------------------------------------------------
Teraz pozostaje jedynie dodać nowo powstały stan 105 do jakiegoś pliku ze stanami postaci i utworzyć lub zmodyfikować animację 105 złożoną z odpowiednich spritów.
Animacja
W postaci KFM, w pliku AIR, animacje biegu i odskoku wyglądają tak:
; Run forwards [Begin Action 100] Clsn2Default:2 Clsn2[0] = -60, -316, 56, 0 Clsn2[1] = 4, -364, 56, -316 100,0, 0,0, 5 100,1, 0,0, 5 100,2, 0,0, 5 100,3, 0,0, 5 100,4, 0,0, 5 100,5, 0,0, 5 ; Hop backwards [Begin Action 105] Clsn2:3 Clsn2[0] = -36, -376, 56, -224 Clsn2[1] = 8, -244, 100, -136 Clsn2[2] = -24, -416, 24, -360 43,0, 0,0, 8 Clsn2:2 Clsn2[0] = -32, -324, 40, -112 Clsn2[1] = -20, -376, 24, -324 43,1, 0,0, 4 Clsn2Default:2 Clsn2[0] = -32, -308, 52, -132 Clsn2[1] = 0, -360, 40, -308 41,6, 0,0, 4 41,2, 0,0, 4 Clsn2:2 Clsn2[0] = -32, -324, 40, -112 Clsn2[1] = -20, -376, 24, -324 41,1, 0,0, -1
Wystarczy skasować animację 105 i zastąpić ją skopiowaną animacją 100 z ustawionym odbiciem poziomym (względem osi Y) czyli parametrem H.
; Run backwards [Begin Action 105] Clsn2Default:2 Clsn2[0] = -60, -316, 56, 0 Clsn2[1] = 4, -364, 56, -316 100,0, 0,0, 5, H 100,1, 0,0, 5, H 100,2, 0,0, 5, H 100,3, 0,0, 5, H 100,4, 0,0, 5, H 100,5, 0,0, 5, H
Dodatkowe wyjaśnienia
const(velocity.run.back.x) - funkcja pobierająca wartości stałych z pliku CNS, w tym wypadku wartość X dla run.back z grupy [Velocity]. Zobacz Lista funkcji dla triggerów.
Zmiana ze stanu 105 do stanu 0 zakończona jest specjalną animacją 5:
[State 105, 4] type = ChangeState trigger1 = command != "holdback" ;ZMIANA value = 0 anim = 5 ;ZMIANA
Animacje 5 i 6 powinna posiadać każda postać, standardowo przedstawiają one obrót postaci stojąc i kucając.