라이프 관리 && state (스테이트) 고정
페이지 정보
작성자 Aravis 작성일 24-02-06 16:48 조회 1,687 댓글 0본문
*** 시작하기에 앞서 드리는 말씀 ***
무겐의 거의 모든 흉악 캐릭터는 윈무겐 (WinMugen) 에서만 작동합니다.
저 또한 윈무겐에 대해서만 다룹니다. 무겐 1.0은 다루지 않습니다.
하지만 무겐 1.0에서 흉악 캐릭터가 작동하지 않는 건 전혀 아닙니다.
기존의 캐릭터는 윈무겐 전용 흉악 캐릭터이기 때문에 무겐 1.0에서 작동하지 않는 것이고,
무겐 1.0 전용으로 만들어진 흉악 캐릭터는 무겐 1.0에서도 잘 작동합니다.
단, 윈무겐과 달리 무겐 1.0은 역사가 깊지 않기에 무겐 1.0 전용 흉악 캐릭터는
만들어진 것이 거의 없습니다.
따라서 무겐에 존재하는 거의 모든 흉악 캐릭터는 윈무겐 전용 캐릭터라고 할 수 있습니다.
*** 서론 ***
오늘은 흉악 캐릭터가 사용하는 기초적인 방어 코드에 대해 알아보겠습니다.
굉장히 간단한 것이기 때문에 글이 그리 길어지지 않을 것 같네요.
평범한 격투게임 캐릭터에게 있어서 라이프 회복 능력은 사기적인 것으로 보일 수도 있지만,
흉악 캐릭터에게 있어서 라이프 회복 능력은 필수라고 할 수 있습니다.
하지만 무작정 라이프를 회복하기만 하면 재미가 없기 때문에,
흉악 캐릭터는 보통 특정한 조건에 도달하면 라이프가 감소하거나 증가하는 방식을 사용하여
평범한 방법으로는 격파할 수 없지만, 일단 격파는 가능하게끔 만들어져 있습니다.
이렇게 자신의 라이프를 관리하는 방법을 "라이프 관리"라고 부릅니다.
하지만 자신의 라이프를 아무리 철저하게 관리한다고 해도, p2stateno 에 의해 상대방의
스테이트로 끌려가게 되면 상대방이 자신의 라이프를 마음대로 조작할 수 있게 되어 버립니다.
따라서, 라이프 관리 코드를 사용할 땐 자신의 캐릭터가 상대방의 스테이트로 끌려가지 않게끔
대책을 세워둘 필요가 있습니다.
때문에 "신 캐릭터" 등급에 있는 캐릭터는 보통 "SelfState 회피법"이라는 것을 사용합니다.
하지만 "논외 캐릭터" 등급에 있는 캐릭터는 이보다 더 확실한 방법을 사용합니다.
논외 캐릭터들은 항상 SelfState를 발동함으로서 하나의 스테이트에 계속 머무르도록
만들어 놓음으로서 상대 스테이트로 끌려가는 것을 방지합니다.
이를 보통 "state (스테이트) 고정"이라고 부릅니다.
*** 본론 ***
서론은 길었지만 본론은 길지가 않습니다.
라이프를 관리하는 방법은 아주 간단합니다.
그냥 LifeSet 명령어를 항상 발동해 두기만 하면 됩니다.
[state ]
type = LifeSet
trigger1 = 1
value = (값)
ignorehitpause = 1
이런 식으로 말이지요.
단, 어떤 statedef 에 넣을지가 문제입니다.
무겐에서 항상 실행되는 statedef 로는 아래와 같은 세 가지가 있습니다,
[statedef -1]
[statedef -2]
[statedef -3]
이들은 항상 실행되는 statedef 로서, 1 프레임마다 한 번씩 실행됩니다.
즉, 초당 60 번씩 실행된다고 할 수 있습니다. (게임 속도를 "보통"으로 두었을 때 기준)
일단, 실행 순서는
[statedef -3] → [statedef -2] → [statedef -1] → 일반 스테이트
이렇게 됩니다.
각각이 가지고 있는 특징은 아래와 같습니다.
[statedef -2]
캐릭터에게 항상 실행됨
helpertype = player 인 헬퍼에게 항상 실행됨
조건에 관계없이 무조건 실행됨
[statedef -3]
캐릭터에게 항상 실행됨
helpertype = player 인 헬퍼에게 항상 실행됨
자신의 스테이트에 있을 때만 실행됨 (상대 스테이트로 끌려갔을 땐 실행되지 않음)
[statedef -1]
캐릭터에게 항상 실행됨
keyctrl = 1 인 헬퍼에게 항상 실행됨
조건에 관계없이 무조건 실행됨
상대 스테이트에 끌려갔을 때도 라이프 관리 효과가 발동해야 하기 때문에,
LifeSet 명령어는 보통 [statedef -2] 에 써 놓습니다.
하지만 상대 스테이트에 끌려갔을 땐, 라이프 관리의 우선권은 상대에게 있기 때문에
상대가 LifeSet 을 발동하면 상대의 것을 따라가게 됩니다.
좌우지간, 종합해 보면 이런 코드가 된다고 할 수 있습니다.
[statedef -2]
[state ]
type = LifeSet
trigger1 = 1
value = (값)
ignorehitpause = 1
이번에는 (값)에 어떤 숫자를 넣을지 정해야 할 차례입니다.
보통은
[state ]
type = LifeSet
trigger1 = 1
value = LifeMax
ignorehitpause = 1
이런 식으로 항상 풀피를 유지하게끔 만들어 두지만, 그러면 재미가 없기 때문에 대부분의
"신 캐릭터"들은 사용하지 않습니다.
위는 격파가 불가능하게끔 만들어진 "논외 캐릭터"들이나 사용하는 방법입니다.
신 캐릭터들은 보통 특정한 변수를 값으로 지정해 놓습니다.
[state ]
type = LifeSet
trigger1 = 1
value = var(1)
ignorehitpause = 1
이런 식으로 지정해 둘 수 있습니다만...
이렇게 해 놓으면 상대가 ParentVarSet 을 이용해서 우리편의 변수를 멋대로
조작해버릴 수가 있기 때문에 강력한 방어 코드를 가진 신 캐릭터의 경우,
특정한 헬퍼를 소환해 두고,
[state ]
type = LifeSet
trigger1 = 1
value = helper(1000),var(1)
ignorehitpause = 1
이런 식으로 헬퍼의 변수를 이용하는 방법으로 라이프를 관리합니다.
하지만 이렇게 라이프를 관리한다고 해도 캐릭터가 상대방의 스테이트로 끌려간다면
말짱 도루묵일 뿐입니다.
따라서, "스테이트 고정"을 사용해서 상대 스테이트로 끌려가지 않게끔 해 주어야 합니다만...
이는 굉장히 쉽습니다.
단순히 [statedef -2] 에서 SelfState 를 항상 발동해 주기만 하면 됩니다.
보통 이런 식으로 쓰입니다.
[statdef -2]
[state ]
type = SelfState
trigger1 = 1
value = 0
ignorehitpause = 1
이렇게 자신의 캐릭터를 특정한 스테이트에 고정시켜 버리는 것입니다.
물론 이렇게 고정시켜 버리면 자신의 캐릭터는 아무런 기술도 쓰지 못하고
고정되 버릴 뿐... 일 것 같지만, 꼭 그렇지만은 않습니다.
하나의 스테이트에 고정되어 있으면서도 여러 가지 기술을 발동할 수 있게끔
구현할 수도 있습니다.
하지만 번거로운 일이기 때문에, 격파를 허용해서는 안되는 "논외 캐릭터"들이 주로
이 방법을 사용하고, "신 캐릭터"들은 잘 사용하지 않습니다.
"신 캐릭터"들은 "스테이트 고정" 코드보다 방어력은 약하지만, 범용성은 더 좋은
"SelfState 회피" 코드를 사용합니다.
거꾸로 말하면 "스테이트 고정"은 범용성은 좋지 않을지라도, 방어 코드로서의
성능은 최상이라고 할 수 있습니다.
*** 주의사항 ***
항상 발동되는 스테이트에서 SelfState를 사용하면 다른 스테이트로 이동해 버리기 때문에
SelfState 아래에 있는 명령어가 발동하지 않게 됩니다.
예를 들어서,
[statedef -2]
[state ]
type= LifeAdd
trigger1 = 1
value = 10
ignorehitpause = 1
[state ]
type = SelfState
trigger1 = 1
value = 0
ignorehitpause = 1
[state ]
type= LifeSet
trigger1 = 1
value = LifeMax
ignorehitpause = 1
이렇게 코드를 짜 놓았다고 해 봅시다.
무겐이 [statedef -2] 를 읽어 내려갈 땐 위에서부터 아래로 읽게 됩니다.
따라서 LifeAdd가 발동한 뒤 SelfState가 발동하게 되고, SelfState 에 의해서
다른 statedef 로 이동하기 때문에 SelfState 아래에 있는 LifeSet 명령어는
발동하기 않게 되는 것입니다.
SelfState 를 이용한 코드를 짤 때에는 이 부분을 항상 유념해 두셔야 합니다.
*** 연습용 캐릭터 ***
흉악 코드 연습용 예제 Lv 3
http://blog.naver.com/snuphe/40177640599
자신이 상대방의 리버설에 걸렸을 때, 이를 감지해서 SelfState 를 발동합니다.
하지만 SelfState 가 LifeSet 명령어의 위에 있기 때문에, SelfState 가 발동하지 않으면
상관이 없지만, 일단 SelfState 가 발동한 턴에는 LifeSet 으로 체력을 회복하는 효과가
발동하지 않게 됩니다.
흉악 코드 연습용 예제 Lv 5
http://blog.naver.com/snuphe/40177780735
위와 같은 코드를 사용하지만, SelfState 가 맨 아래에 있기 때문에
항상 LifeSet 이 발동됩니다.
댓글목록 0
등록된 댓글이 없습니다.