라이프 관리 && state (스테이트) 고정 > 흉악강좌

본문 바로가기

사이트 내 전체검색

뒤로가기 흉악강좌

라이프 관리 && 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 이 발동됩니다.

추천1

댓글목록 0

등록된 댓글이 없습니다.

개인정보처리방침 이용약관

사이트 정보

Copyright © 무겐 어소시에이션 All rights reserved.
PC 버전으로 보기