오니와루드식 회피법
페이지 정보
작성자 Aravis 작성일 24-02-06 16:53 조회 1,591 댓글 0본문
*** 시작하기에 앞서 드리는 말씀 ***
무겐의 거의 모든 흉악 캐릭터는 윈무겐 (WinMugen) 에서만 작동합니다.
저 또한 윈무겐에 대해서만 다룹니다. 무겐 1.0은 다루지 않습니다.
하지만 무겐 1.0에서 흉악 캐릭터가 작동하지 않는 건 전혀 아닙니다.
기존의 캐릭터는 윈무겐 전용 흉악 캐릭터이기 때문에 무겐 1.0에서 작동하지 않는 것이고,
무겐 1.0 전용으로 만들어진 흉악 캐릭터는 무겐 1.0에서도 잘 작동합니다.
단, 윈무겐과 달리 무겐 1.0은 역사가 깊지 않기에 무겐 1.0 전용 흉악 캐릭터는
만들어진 것이 거의 없습니다.
따라서 무겐에 존재하는 거의 모든 흉악 캐릭터는 윈무겐 전용 캐릭터라고 할 수 있습니다.
*** 서론 ***
오니와루드식 회피법은 "SelfState 회피법"의 응용 코드입니다.
우선 SelfState 회피법에 대한 글부터 읽어주시기 바랍니다.
http://blog.naver.com/snuphe/40180521220
*** 본론 ***
SelfState 회피법에서는 [statedef -3]을 사용합니다.
하지만 오니와루드식 회피법은 조금 다릅니다.
무겐에는 재미있는 버그가 하나 있습니다.
바로 [statedef -1], [statedef -2], [statedef -3] 에서 time = 0 트리거가 동작하지 않는다는 것입니다.
쉽게 말씀드리면,
[statedef -2]
[state ]
type = LifeAdd
trigger1 = !time
; time = 0 과 같은 뜻입니다.
value = -100
ignorehitpause = 1
이것은 절대 동작하지 않습니다.
만일,
[statedef 200]
[state ]
type = LifeAdd
trigger1 = !time
value = -100
ignorehitpause = 1
이렇게 200 번 스테이트에 넣는다면 어떻게 될까요?
당연히 동작합니다.
time = 0 인 상황에서 발동하는 명령어인데 동작하지 않을 리가 없지요.
그러나 [statedef -?]에다 이를 넣는다면 동작하지 않게 됩니다.
이는 무겐의 연산 순서 때문입니다.
무겐의 연산 순서는 1P가 먼저이고 2P가 나중이며,
-3, -2, -1, 일반 state 순서로 실행됩니다.
그러나, 커맨드를 입력한 경우, 커맨드가 감지되는 순서는 아래와 같습니다.
-3 → -2 → [command] → -1 → 일반 스테이트
순서로 실행이 됩니다.
(흉악 위키를 참조했고, [command]의 경우 제가 실험해서 낸 결과입니다.
반론은 언제든지 받습니다.)
(커맨드 리스트의 위치를 바꿔도 이 순서는 변하지 않습니다.)
일단 특정한 커맨드를 입력했다고 가정해 봅시다.
하나의 턴이 시작되었을 때, 커맨드가 입력되었다고 해도
-3 과 -2 에서는 그것을 감지하지 못합니다. ([command] 부분은 그 뒤에 있기 때문입니다.)
-1 에 와서야 커맨드를 감지하게 되고, 그제서야 특정 스테이트로 이동하게 됩니다.
이 타이밍에 time = 0 이 적용되므로, -3, -2, -1 에서는 time = 0 이 작용하지 않습니다.
물론
[statedef -3]
[state ]
type = changestate
trigger1 = stateno=0
trigger1 = time=1
value = 200
이런 식으로 커맨드 입력 없이 -3 에서 changestate 를 사용하면
-2 에서 time = 0 트리거를 쓰더라도 적용이 됩니다.
그렇다면, p2stateno 를 통해 상대의 스테이트로 이동했을 때의 연산 순서는 어떨까요?
바로 아래와 같은 순서를 가집니다.
상대 스테이트 → -3 → -2 → -1
(이는 다른 자료를 참조한 것이 아니고, 제가 실험해서 낸 결과입니다. 반론은 언제든지 받습니다.)
따라서, 상대 스테이트에 가 있는 경우 [statedef -?]에서도 time = 0 을 감지할 수 있게 됩니다.
따라서,
[statedef -2]
[state ]
type = LifeAdd
trigger1 = !time
value = -100
ignorehitpause = 1
이런 코드는 평범항 상황에서는 절대 발동하지 않습니다.
단, 상대 스테이트로 끌려갔을 때 발동하게 됩니다.
이를 응용하면 아래와 같은 코드를 작성할 수 있습니다.
[statedef -2]
[state ]
type = SelfState
trigger1 = !time
value = 0
ctrl = 1
ignorehitpause = 1
!time 트리거를 사용하였기 때문에 상대 스테이트에 있을 때만 SelfState 가 발동하게 되고,
SelfState 회피법과 동일한 효과를 낼 수 있게 됩니다.
단, 상대 스테이트로 가지 않더라도 !time 트리거가 발동되는 경우가 있기 때문에
강력한 방어력을 가진 흉악 캐릭터들은 보통 SelfState 회피법과 오니와루드식 회피법을 함께
사용합니다.
(참고로, 죽는 스테이트에 갈 때도 !time 의 적용을 받는 것 같습니다.
이에 대해선 자세한 실험을 안 해봤지만, 아마도 state 5150 은 !time 을 받는 게 아닐까 합니다.)
댓글목록 0
등록된 댓글이 없습니다.