출처 :  대충 제작한 체력회복 감지 코드 - M.U.G.E.N. 마이너 갤러리 (dcinside.com)  

체력회복 코드 - M.U.G.E.N. 마이너 갤러리 (dcinside.com)  

적 기본기 무효화 명령어 - M.U.G.E.N. 마이너 갤러리 (dcinside.com) 

적의 잡기/넉백(x축) 기술을 무효화 시키는 명령어 - M.U.G.E.N. 마이너 갤러리 (dcinside.com) 

횟수 제한이 있는 경직무시 명령어 - M.U.G.E.N. 마이너 갤러리 (dcinside.com) 

시간 제한이 있는 경직무시 명령어 - M.U.G.E.N. 마이너 갤러리 (dcinside.com) 

작성자 : 49.163

주의 : 이 강의는 어느정도 무겐에 익숙한 사람들이 봐야 이해 가능한 것들 투성이야. 잘 모르겠으면 기초부터 잘 다지고 오자.


1. 대충 제작한 체력회복 감지 코드

한 줄 요약 : 적의 체력 회복을 감지하면, 캐릭터의 본체가 노랗게 반짝거리는 효과

문제점 : 적을 때렸을 때 보내는 공통 State(5000~5150)가 아닌 다른 State에 보낸다면 체력 회복을 감지하는 타이밍이 느려지는 것

디버그 모드는 Ctrl+D키이고 2P 캐릭터의 디버그 모드를 보고 싶다면 한 번 더 눌러주세요 




; Enter the following command in [Statdef-2].

[Statedef -2]에 아래 코드를 복사붙여넣기 하면 됩니다


[Statedef -2]


[State 0, VarSet]

type = VarSet

trigger1 = 1

v = 33

;fv = 10

value = enemy,const(data.life)-(var(35))

ignorehitpause = 1

persistent = 1

[State 0, VarSet]

type = VarSet

trigger1 = roundstate < 2

v = 35

;fv = 10

value = 0

ignorehitpause = 1

persistent = 1

[State 0, VarAdd]

type = VarAdd

triggerall = roundstate = 2

trigger1 = movecontact = 1

trigger1 = enemy,movetype = H

trigger1 = enemy,gethitvar(damage) > 0

v = 35

;fv = 10

value = (enemy,gethitvar(damage))

ignorehitpause = 1

persistent = 1

[State 0, VarSet]

type = VarSet

trigger1 = (GameTime%2) = 0

trigger1 = 1

v = 34

;fv = 10

value = 0

ignorehitpause = 1

persistent = 1

[State 0, VarSet]

type = VarSet

trigger1 = time > 1

trigger1 = (GameTime%2) = 0

trigger1 = var(33) < enemy,life

v = 34

;fv = 10

value = 1

ignorehitpause = 1

persistent = 1

[State -2, ]

type = PalFX

trigger1 = (GameTime%2) = 0

trigger1 = var(34) = 1

time = 1

add = 128,128,0

ignorehitpause = 1

[State 0, AttackMulSet]

type = AttackMulSet

trigger1 = var(34) = 1

value = 11

ignorehitpause = 1

persistent = 1

[State 0, HitDef]

type = HitDef

trigger1 = var(34) = 1

attr = ,NA,SA,HA,NP,SP,HP,NT,ST,HT

hitflag = MA        ;HLAFD+-

guardflag =          ;HLA

damage = (1+random%10),(1+random%10)

pausetime = 0,100

sparkno = -1

guard.sparkno = -1

ignorehitpause = 1

persistent = 1

[State 0, TargetLifeAdd]

type = TargetLifeAdd

trigger1 = var(34) = 1

trigger1 = movehit = 0

value = -1

ID = -1

kill = 1

absolute = 0

ignorehitpause = 1

persistent = 1

1. var(??)값은 다른 캐릭터의 var값과 중복되지 않게 정해주세요 

2. 처음부터 지급되는 기본 캐릭터의 Statedef -2에 해당 코드를 삽입하는 것을 추천드립니다

3. 코드 테스트는 VS모드 에서 실행해 주세요

 체력 회복 코드
https://m.dcinside.com/board/mugen/691
위 링크의 댓글을 참조해주세요 


2. 체력회복 코드

 [Statedef -2]에 아래 코드를 복사붙여넣기 하면 됩니다
https://m.dcinside.com/board/mugen/690 <- 체력회복 감지코드




[Statedef -2]

[State 0, LifeAdd]
type = LifeAdd
trigger1 = gametie%12 = 0
value = 1
ignorehitpause = 1 


 [State 0, LifeAdd]
type = LifeAdd
trigger1 = gametime%12 = 0
value = 1
ignorehitpause = 1

입니다 


3. 적 기본기 무효화 명령어

※ 일반적인 피격 상태는 5000~5110State에 있으며, 특수한 피격 상태는 노란색으로 표시됩니다

※ 용량이 낮은(10MB이하) 캐릭터에게 적용하시는 것을 권장 드립니다(중복 방지 위함)

※ 명령어 찾기 : Ctrl+F키 -> var(38)과 var(39)를 검색하여 중복되는 값이 있는지 확인해주시면 됩니다



[Statedef -2]에 아래 명령어를 복사붙여넣기 하면 됩니다


;[Statedef -2]

[State 0, PosSet]

type = PosSet

triggerall = ctrl = 1

trigger1 = statetype = S

trigger2 = statetype = C

y = 0

ignorehitpause = 1

persistent = 1

[State 0, SelfState]

type = SelfState

triggerall = (alive = 1) && (roundstate = 2)

trigger1 = root,gethitvar(damage) <= 0

trigger1 = enemy,hitpausetime > 0

ctrl = 1

value = 0

ignorehitpause = 1


persistent = 1


4. 적의 잡기/넉백(x축) 기술을 무효화 시키는 명령어

한 줄 요약 : 적의 잡기/넉백(x축) 기술을 맞는 동시에 해제하는 명령어

문제점 : 단순 기본기 연타(특히 프레임 수가 낮은)를 끝없이 맞는 경우가 자주 발생함


※ 디버그 모드 : Ctrl+D키 -> 한 번 누를 때마다 디버깅 대상이 달라집니다(1P->2P->헬퍼 순)

※ 디버그 모드에 있는 [아래쪽 숫자]State가(위쪽은 애니메이션 번호) 흰색이면 일반 판정, 노란색이면 특수 판정입니다

※ 일반적인 피격 상태는 5000~5110State에 있으며, 특수한 피격 상태는 노란색으로 표시됩니다

※ 용량이 낮은(10MB이하) 캐릭터에게 적용하시는 것을 권장 드립니다(중복 방지 위함)

※ 명령어 찾기 : Ctrl+F키 -> var(38)과 var(39)를 검색하여 중복되는 값이 있는지 확인해주시면 됩니다



[Statedef -2]에 아래 명령어를 복사붙여넣기 하면 됩니다


;[Statedef -2]

[State 0, PosSet]

type = PosSet

triggerall = ctrl = 1

trigger1 = statetype = S

trigger2 = statetype = C

y = 0

ignorehitpause = 1

persistent = 1

[State 0, SelfState]

type = SelfState

triggerall = (alive = 1) && (roundstate = 2)

trigger1 = !gethitvar(damage) || !gethitvar(fall.damage)

trigger1 = gethitvar(hitcount) > 0

trigger1 = !gethitvar(hitshaketime)

trigger1 = gethitvar(hittime) > 0

ctrl = 1

value = 0

ignorehitpause = 1

persistent = 1


5. 횟수 제한이 있는 경직무시 명령어

한 줄 요약 : n번의 횟수 제한으로 경직을 무시하는 명령어

문제점 : 5900State가 CNS파일에 따로 있는 캐릭터의 경우, 명령어가 오작동 할 수 있음

※ 디버그 모드 : Ctrl+D키 -> 한 번 누를 때마다 디버깅 대상이 달라집니다(1P->2P->헬퍼 순)

※ 디버그 모드에 있는 [아래쪽 숫자]State가(위쪽은 애니메이션 번호) 흰색이면 일반 판정, 노란색이면 특수 판정입니다

※ 일반적인 피격 상태는 5000~5110State에 있으며, 특수한 피격 상태는 노란색으로 표시됩니다

※ 용량이 낮은(10MB이하) 캐릭터에게 적용하시는 것을 권장 드립니다(중복 방지 위함)

※ 명령어 찾기 : Ctrl+F키 -> var(38)과 var(39)를 검색하여 중복되는 값이 있는지 확인해주시면 됩니다



[Statedef -2]에 아래 명령어를 복사붙여넣기 하면 됩니다


;[Statedef -2]

[State 0, VarAdd]

type = VarAdd

trigger1 = gethitvar(damage) > 0

trigger1 = gethitvar(hitcount) > 0

trigger1 = gethitvar(hitshaketime)

v = 38

;fv = 10

value = 1

ignorehitpause = 1

persistent = 1

[State 0, VarSet]

type = VarSet

trigger1 = roundstate != 2

v = 38

;fv = 10

value = 0

ignorehitpause = 1

persistent = 1

[State 0, VarSet]

type = VarSet

trigger1 = 1

v = 39

;fv = 10

value = 5;1~20 <- 이 값만큼 경직무시 횟수가 증가합니다

ignorehitpause = 1

persistent = 1

[State 0, PosSet]

type = PosSet

triggerall = ctrl = 1

trigger1 = statetype = S

trigger2 = statetype = C

y = 0

ignorehitpause = 1

persistent = 1

[State 0, NotHitBy]

type = NotHitBy

trigger1 = movetype = H

trigger1 = var(38) <= var(39)

value = SCA,NA,SA,HA,NP,SP,HP,NT,ST,HT

value2 = SCA

time = 80

ignorehitpause = 1

persistent = 1

[State 0, SelfState]

type = SelfState

triggerall = (alive = 1) && (roundstate = 2)

trigger1 = movetype = H

trigger1 = var(38) <= var(39)

ctrl = 1

value = 0

ignorehitpause = 1

persistent = 1


6. 시간 제한이 있는 경직무시 명령어

한 줄 요약 : 체력 게이지가 특정 수치 이하이면 n초 동안 경직을 무시하는 명령어

문제점 : var(18)명령어가 다른 캐릭터에게도 적용되었을 수 있음(이 때는 var(18)에서 var(0~59 사이의 중복되지 않는 다른 숫자)로 바꿔야 함)

※ 디버그 모드 : Ctrl+D키 -> 한 번 누를 때마다 디버깅 대상이 달라집니다(1P->2P->헬퍼 순)

※ 디버그 모드에 있는 [아래쪽 숫자]State가(위쪽은 애니메이션 번호) 흰색이면 일반 판정, 노란색이면 특수 판정입니다

※ 일반적인 피격 상태는 5000~5110State에 있으며, 특수한 피격 상태는 노란색으로 표시됩니다

※ 용량이 낮은(10MB이하) 캐릭터에게 적용하시는 것을 권장 드립니다(중복 방지 위함)

※ 명령어 찾기 : Ctrl+F키 -> var(??) 검색하여 중복되는 값이 있는지 확인해주시면 됩니다



[Statedef -2]에 아래 명령어를 복사붙여넣기 하면 됩니다


;[Statedef -2]

[State 0, VarSet]

type = VarSet

trigger1 = roundstate != 2

v = 18

value = 180; 여기에서 180 = 3초

ignorehitpause = 1

persistent = 1

[State 0, VarAdd]

type = VarAdd

trigger1 = life <= ceil(lifemax*0.3)

v = 18

value = -1; 한없이 떨어지는 값, 따라서 'var(18) = 0'이 될 경우는 라운드 당 오직 한번 뿐임

ignorehitpause = 1

persistent = 1

[State 0, LifeAdd]

type = LifeAdd

triggerall = (var(18) <= 0) || (life <= ceil(lifemax*0.3))

trigger1 = gametime%(6+random%10) = 0

value = 1

kill = 0

absolute = 0

ignorehitpause = 1

persistent = 1

[State 0, LifeSet]

type = LifeSet

trigger1 = var(18) = 0

trigger1 = life <= ceil(lifemax*0.3)

value = lifemax; 체력 회복 횟수는 1회로 제한, lifemax = 100%

ignorehitpause = 1

persistent = 1

[State 0, PosSet]

type = PosSet

triggerall = ctrl = 1

trigger1 = statetype = S

trigger2 = statetype = C

y = 0

ignorehitpause = 1

persistent = 1

[State 0, HitFallSet]

type = HitFallSet

triggerall = (alive = 1) && (roundstate = 2)

triggerall = var(18) > 0

triggerall = life <= ceil(lifemax*0.3)

trigger1 = movetype = H

trigger1 = !enemy,hitdefattr = SCA,AA,AT,AP

value = 1

xvel = 1

yvel = 1

ignorehitpause = 1

persistent = 1

[State 0, SelfState]

type = SelfState

triggerall = (alive = 1) && (roundstate = 2)

triggerall = var(18) > 0

triggerall = life <= ceil(lifemax*0.3)

trigger1 = hitfall = 1

trigger2 = statetype = L

value = 0

ctrl = 1

ignorehitpause = 1

persistent = 1

[State 0, StateTypeSet]

type = StateTypeSet

triggerall = (alive = 1) && (roundstate = 2)

triggerall = var(18) > 0

triggerall = life <= ceil(lifemax*0.3)

trigger1 = movetype = H

trigger1 = !enemy,hitdefattr = SCA,AA,AT,AP

statetype = L ;S,A,C,L

movetype = I ;I,A,H

physics = A ;A,C,S,N

ignorehitpause = 1


persistent = 1