출처 :  helper 코드 강좌 - M.U.G.E.N. 마이너 갤러리 (dcinside.com) 

작성자 : SAE


이제 많은 무겐러들이 알고 싶어하는 helper에 대해서 써볼거임. 이건 나도 설명을 잘 못하는 편이긴 한데 쉽게 말해

일종의 독립체 같은 거라고 생각하면 됨. ihoo도 독립적으로 움직이는 개체라고 설명해놨고. 쓰이는 용도는 explod와

projectile과 비슷하지만 helper가 더 유용한 쓰임새가 더 많음.


부가적인 설명을 더 하자면


1. explod와 projectile보다 움직임을 더 정밀하게 조정할 수 있음. 이건 statedef을 만들어서 사용하는 코드이기 때문에

공격 코드를 넣는 것도 가능함.


2. 캐릭터와 helper는 별도의 독립체로 취급되기 때문에 캐릭터 statedef과 helper statedef이 같은 var번호를 사용해도 중복이 아니게 됨.

그 외 juggle같은 일부 설정값도 helper는 별개로 취급됨. 예를 들어 내 juggle값이 현재 10인 상태에서 helper를 불러와도 그 helper는

캐릭터처럼 juggle이 10이 아니라 0이 된다는 거임.


3. helper statedef안에 또 helper를 작성하는 것이 가능함. 나는 이걸 중첩 헬퍼라고 말함.


물론 단점도 확실한 코드임. 왜냐면 무겐의 가장 대표적인 버그 중 하나인 분신 버그의 원흉이 되기 때문임.

가장 큰 원인은 helper에 누락된 statedef 번호를 적용시켜서 그런거지만 다른 큰 이유가 있다면

내가 helper는 독립체라고 말했지. 쉽게 말해 얘도 캐릭터라는 얘기인데 그러면 당연히 공격에 맞으면

피격 애니메이션으로 넘어가버리고 그렇게 해서 원래 사라졌어야 할 헬퍼가 안 사라지고 분신이 남아버리는 현상이 있음.

쉽게 말해 그냥 helper에 피격 박스 넣지 말라고. 하지만 그렇게 한다고 해도 완전히 방지할 수는 없는데

helper에 공격 판정만 넣는다고 해도 상대 캐릭터가 ReversalDef코드를 활용한 반격기를 사용해서 그 helper가 걸려 버리면

전용 피격 statedef으로 넘어가버려서 또 분신 버그가 발생함. 반격기는 무조건 전용 피격 statedef을 써야 하기 때문에 이건 어찌할 방법이 없음.



[State 0, Helper]

type = Helper

trigger1 = animelem =


helpertype = normal ;player

이름 그대로 헬퍼스타일을 정함. 대부분의 경우는 그냥 normal로 냅두면 됨.


name = "이름"

헬퍼의 이름을 정할 수 있는데 무슨 기능이 있는건 아니고 그냥 무슨 헬퍼인지 메모해두는 용도라 안 써도 상관없음.

대신 작성할 때는 꼭 ""를 쓰도록 하셈. 한글은 음...안 써봐서 어떻게 되는지 모르겠는데 조심해서 나쁠건 없음.

예 : name = "go"


ID = 정수

헬퍼의 ID를 설정함. 웬만하면 쓰는 것이 좋은데 상황에 따라 기술을 만들 때 해당 helper statedef 안에 있는 값을 가져와야 하는 상황도

생기거든? 그 때 쓰이는 트리거가 helper(ID), 혹은 numhelper(ID), 이거인데 바로 괄호 안 거기에 이 ID 번호가 사용됨.


stateno = 정수

statedef을 불러드림. statedef번호를 작성하면 됨.


pos = X축(정수), Y축(정수)

헬퍼의 위치를 설정함. 설정하면 좋긴 한데 어차피 statedef 내에서도 설정이 가능해서 굳이 안 써도 무관함.


postype = p1 ;p2,front,back,left,right

헬퍼의 기준을 정함. 순서대로 자신, 상대, 앞, 뒤, 왼쪽, 오른쪽임. 대부분 p1나 p2로 많이 쓰일거고

front,back,left,right의 경우는 캐릭터 전용 게이지바 같은거 만들때 많이 쓰임.


facing = 1 or -1

헬퍼의 방향 설정. -1은 방향이 반대가 됨.


keyctrl = 0 or 1

1로 하면 헬퍼가 본체 캐릭터의 키 버튼을 읽을 수 있게 됨. 보통의 경우 0이 권장임.


ownpal = 0 or 1

1로 하면 palfx로 인한 색 효과에 영향을 받지 않게 됨. 이건 explod 강좌에 좀 더 자세하게 적어놨으니 참고하셈.


supermovetime = 정수

superpause라는 코드로 화면이 정지되었을 때 해당 값만큼 helper가 움직일 수 있게 됨.


pausemovetime = 정수

pause라는 코드로 화면이 정지되었을 때 해당 값만큼 helper가 움직일 수 있게 됨.




size.xscale = X축(실수)

size.yscale = Y축(실수)

헬퍼의 크기 배율을 설정함. explod 강좌때 말했던 것처럼 1보다 큰 값은 원본보다 커지는거고, 1보다 작은 값은 원본보다 작아짐.

한 가지 단점이 있다면 애니메이션의 판정 박스까지 크기가 조절되지는 않음. 그래서 만약 이 파라미터를 사용한다면

판정 박스는 별도로 너가 만져서 조절해야 함.



;size.ground.back =

;size.ground.front =

;size.air.back =

;size.air.front =

;size.height =

;size.proj.doscale =

;size.head.pos = ,

;size.mid.pos = ,

;size.shadowoffset =


나머지 것들은 따로 설명이 없어서 나도 뭔지 모름. 써 본적도 없고, 거의 쓰이지도 않는 것들이고.



그리고 캐릭터에 있는 설정값을 helper에 가져와서 사용하는 것도 가능한데 트리거는 root, 나 parent, 로 쓰면 됨. 반대로 helper에 있는 설정값을 캐릭터 본체로 가져오는 것도 가능함. 그럴 때는 helper(ID), 나 numhelper(ID), 를 쓰면 됨.


예 :


[State 0, ChangeState]

type = ChangeState

trigger1 = parent,var(59) = 1

value = 1000





[State 0, VelSet]

type = VelSet

trigger1 = numhelper(1000),var(59) = 1


x = 10




사용 방법


1. helper 전용 애니메이션과 statedef을 만듬.





2






애니메이션은 이펙트 같은거 만들고 싶다면 스프라이트 추가해서 만들면 되고, 딱히 없으면 사진처럼 공백으로 냅둬도 됨.

웬만하면 피격 박스는 만들지 말고, 필요하면 공격 박스만 넣으셈.







3



2. helper statedef은 이런 식으로 만들면 됨. statedef도 최대한 반격기에 안 걸리게 type을 A로 작성하는게 좋음. 여기에 너가 넣고 싶은거 넣어서 만들면 되고,

마지막에 DestroySelf라는 코드로 끝내기만 잘해주면 됨. (이거 개중요함. 안 하면 헬퍼 안 사라짐. 영구 유지 헬퍼라면 안 써도 됨.)

trigger1은 나처럼 프레임 시간을 적어놨다면 그냥 animtime같은 트리거로 작성하면 되고, 만약 애니메이션에 프레임 시간을 -1로 작성했다면 time =

로 적어서 별도로 시간 입력하셈.



만약 helper를 끝내는 것이 아닌 다음 statedef으로 넘기를 거라면 changestate로 작성하면 됨.





4




3. 마지막으로 helper statedef을 불러 올 캐릭터 statedef에 helper 코드를 작성하면 됨.

그러면 해당 캐릭터 statedef이 발동되면 해당 helper statedef로 넘어가게 되고 거기서 처리가 다 끝나면 다시 캐릭터 statedef로 돌아와서

작업을 계속 처리할 거임.






헬퍼는 설명하기도 어렵고 내가 잘 설명한 것도 아니라서 이해가 잘 될지 모르겠다.

원래는 내 캐릭터로 시범을 보일까 생각했는데 왠지 내 캐릭터 자랑질 하는 것처럼 보일 것 같아서 그건 하지 않을께.



  • YKPray4

    장풍중에 프로젝타일이 아니라 헬퍼로 만들어진 애들도 많던데 그런 경우는 프로젝타일만으론 구현이 힘들어서 헬퍼로 만든건가보네.

    04.02 22:07:46
    삭제
    • SAE

      ㅇㅇ 그 경우는 보통 장풍의 움직임을 세밀하게 만들고 싶은데 프로젝트타일으로는 한계가 있으니까 헬퍼로 장풍처럼 만든거나 아니면 장풍으로 여러 이펙트를 효과적으로 구현시키고 싶어서가 많음