출처 : 대충 제작한 체력회복 감지 코드 - 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