Cns에서 도스 무겐 윈 무겐 검사 해서 캐릭 최적화 시켜봅시다.
페이지 정보
작성자 Leona123 작성일 24-10-03 17:16 조회 591 댓글 0본문
역시 되도록 자세한 설명을...
(movehit, movecontact, moveguarded 값이 윈무겐에서 계속 증가하는건 버그가 아니었습
니다. 텍스트파일 보니까 바뀌었다고 제대로 나와있네요. 그래서 CNS,CMD 파일에서 movehit
= 1 , movecontact = 1, moveguarded = 1(movehit, movecontact, moveguarded 값을 각각
movehit > 0 , movecontact > 0, moveguarded > 0 으로 바꿔야 하는건 전과 같음. 이건
바꿔도 도스무겐에서도 문제없음)
지금 윈무겐과 도스무겐의 차이점 때문에 도스무겐 캐러는 윈무겐에서 몇몇 문제가 있습니다.
프로젝타일이 Attackmulset의 영향을 받게 되었고.
스파크 발생 위치가 도스무겐보다 상대방의 앞쪽에 나왔으며
hitdef에서 guard.slidetime 과 guard.hittime 의 작동시간이 도스무겐보다 늘어나서, 도스무
겐에선 어색하지 않던 가드경직이 윈무겐에서 엄청 늘어났었고
스텟 120-153 의 코드가 변경되어서, 자체에 도스무겐스텟 120-153을 지닌 캐릭터가 가드경
직이 너무 빨리 풀리는 등의 문제가 있었습니다.
CNS에서 윈무겐인지 도스무겐인지 검사할수만 있다면 이걸 해결할수 있는데, 차이점은 최대
치 체력 이었습니다.
DOCS폴더를 뒤져봤지만 다른걸로는 불가능하고 오직 LIFE 검사로만 가능한것 같습니다.
도스무겐에서 대전을 해보면 CNS파일에서 체력이 1000으로 설정된 캐릭터의 처음 체력은
999로 나옴을 알수 있습니다. 하지만 윈무겐에서 실행시켜보면 체력이 1000으로 나옵니다.
팀플레이시모든 경우의 체력, 그러니까 1:2 라던지 2:3 , 3:4 로 할때의 체력은 도스무겐-윈
무겐이 각각. 499-500 , 666-667 , 749-750 으로 틀린것을 알수 있습니다. 단, CNS파일에서
LIFE = 1000 으로 설정된 캐릭만 이렇고 1000이 아닌 캐릭터는 도스무겐과 윈무겐 값이 같을
수 있습니다. 때문에 life=1000이 아닌 캐릭터는 검사가 안될수도 있습니다.
따라서 이걸 이용해서 var값을 하나 써서 라운드 시작시 체력값을 주면, 도스무겐인지 윈무겐
인지 알수 있게 되는 것입니다.
저의 경우 [statedef -2] 에서
[state -2]
type = varset
trigger1 = roundstate = 0
var(1) = life
이런식으로 썼습니다.
그러면 이걸 이용해서 도스무겐과 윈무겐에서 차이를 보이는 부분들을 바꿔야 합니다.
1.-----------------------------------
처음은 HITDEF의 스파크 위치. hitdef에서 스파크발생위치를 지정하는 sparkxy 라는 줄이 있
는데, 도스무겐에서는 이것의 x 축이 상대방의 x축 0 을 기준으로 되었습니다만.
윈무겐에서는 이것의 x축이, 상대방의 x축에서 상대방의 CNS파일의 [DATA]란의
ground.front = ? 와 air.front = ? 의 값만큼 앞을 기준으로 되버립니다.
그래서 윈무겐에서의 스파크위치는 지상에서 맞을땐 상대의 ground.front 값만큼 상대방의
앞에 발생되게 되고 공중에선 상대의air.front 값만큼 앞에 발생되게 됩니다.
따라서 sparkxy 부분의 x값을 바꿀 필요가 있습니다.
예를들어
sparkxy = 10,-50
이줄을
sparkxy= 10-ifelse(var(1)=1000||var(1)=500||var(1)=750||var(1)=667,16,0),50
이렇게 바꾸어야 한다는 것입니다. 라운드시작시 체력을 검사해서 윈무겐의 값 1000, 500,
750, 667 이 나오면 스파크위치를 16만큼 상대방의 뒤로 나오게 하는 것인데, 제가 왜 16만큼
뺐냐면 쿵푸맨의 ground.front 값이 16 이었고 캐릭터들 평균치가 16정도 되는거 같아서 16으
로 정했습니다.
주의할점은 Projectile의 경우 스파크위치를 손대치 않아도 됩니다. 왜냐하면 hitdef의
sparkxy의 x축은 상대방을 기준으로 하지만, Projectile은 자신 Projectile을 기준으로 하기 때
문입니다. 따라서 Projectile의 스파크발생위치는 도스무겐과 윈무겐이 같기 때문에 손대지 않
아도 됩니다.
그리고 당연한 얘기지만 헬퍼의 경우는 그냥 var(?)가 아닌 root,var(?)로 써야 합니다.
거기에 ifelse안에 콤마가 들어가면 에러가 나므로 var(1) -> (root,var(1))이렇게 괄호를 하
나 더 쳐서 써야 합니다.
(parent,var(?)도 되지만 헬퍼에서 만든 헬퍼의 경우 root,var(?)로 해야되기 때문에 전 그냥
다 root,var(?)로 하였습니다)
따라서 위의 줄이 헬퍼의 경우는
sparkxy= 10-ifelse((root,var(1))=1000||(root,var(1))=500||(root,var(1))=750||(root,var(1))=667,16,0),50
이렇게 됩니다.
참고로 제캐릭터중에 진념은 sparkxy를 고친게 아니라 그냥 x축이 16뒤로 간 스파크 애니매
이션을 새로 만들어서 sparkno = 부분을 손댔고, 이오리, 쿠로키시,드레이븐은 sparkxy를 손
댔습니다.
-----------------------------------------------------------
2-------------------------------------
두번째는 hitdef에 있는 guard.slidetime 과 guard.hittime 에 관한 것입니다.
도스무겐캐러를 윈무겐에서 하면 공격의 가드경직시간이 너무 큽니다. 예를들면 hitdef에서
guard.slidetime = 22
guard.hittime = 22
도스무겐에서 이부분이 있는 공격을 막을 경우엔 밀려나는 시간이 12프레임 이지만,
윈무겐에선 22프레임이 됩니다. 그러니까 도스무겐에선 저 값보다 절반정도 시간만 밀려나게
되지만 윈무겐에선 저 값만큼 밀려나게 변경됨으로써 애로사항이 꽃피는 것입니다.
따라서 이 부분도 다음과 같이 고쳐야 합니다.
guard.slidetime = 22-ifelse(var(1)=1000||var(1)=500||var(1)=750||var(1)=667,10,0)
guard.hittime = 22-ifelse(var(1)=1000||var(1)=500||var(1)=750||var(1)=667,10,0)
윈무겐에서도 도스무겐과 같은 12프레임의 경직을 줘야하기 때문에 윈무겐일 경우10을 빼는
부분입니다.
저거 빼는 값을 구하는 공식(?)이 있는데 홀수의 경우 1을 뺀후 2로 나누면 되고 짝수의 경우 2를 뺀후 2로 나누면 되더군요.
예를들어
1-0
2-0
3-1
4-1
5-2
6-2
7-3
8-3
9-4
10-4
.
.
22-10
.
.
.
이런식으로 됩니다.
물론, 헬퍼의 경우 그냥 var(?) 가 아닌 (root,var(?)) 처럼 고쳐야 합니다.
그런데 도스무겐에서 guard.slidetime 은 윈무겐처럼 설정된 값 그대로 인식합니다.
따라서 도스무겐에서는
guard.slidetime = 22
guard.hittime = 22
이거랑
guard.slidetime = 12
guard.hittime = 22
이것이 같습니다. guard.slidetime만큼 밀려나고 guard.hittime이 넘을경우 가드가 회복되는
데, 도스무겐에선 guard.slidetime이 윈무겐처럼 값 그대로 작동하기 때문에 도스무겐에선 위
아래 똑같이 12프레임 밀려난후 가드가 풀리게 됩니다. guard.slidetime이 guard.hittime 보다
많아봤자 똑같다는 겁니다.
음..그러니까 guard.slidetime은 저렇게 윈무겐처럼 고쳐도 도스무겐에선 괜찮을테니 그러면
guard.hittime 에만 위처럼 붙이면 되겠네요.
---------------------------------------------------------------
3------------------
앞의 두가지가 중요한 거고 이건 그냥...
프로젝타일이 attackmulset의 영향을 받게 되었다든지 하는건 아실테니 넘어가고...
별 쓸모는 없을테지만 자체스텟에 도스무겐의 스텟 120~153을 가지고 있는 캐릭터의 경우입
니다.
스텟 120,130,131,132,140,150,151,152,153 의 소스가 윈무겐에서 조금 추가된것과 변경된것이 있는데.
스텟 151, 153을 제외하고는 윈무겐의 스텟으로 바꿔도 문제가 없습니다.
단, !inguarddist 가 있는 줄은 앞에 쎄미콜론 ; 을 붙여줘야 도스무겐에서도 잘 됩니다.
inguarddist는 윈무겐에서 추가된 명령이므로 도스무겐에선 에러가 나기 때문입니다.
쎄미콜론 붙여도 윈무겐에서도 잘 됩니다.
스텟 151,153의 경우 윈무겐에서 추가된 소스가
[State 151, Hi to Lo]
type = StateTypeSet
trigger1 = statetype = S && command = "holddown"
statetype = C
physics = C
[State 151, Lo to Hi]
type = StateTypeSet
trigger1 = statetype = C && command != "holddown"
statetype = S
physics = S
이 두부분인데 이건 그냥 추가해도 아무런 문제가 없습니다.
스텟 151, 153 에서 윈무겐에서 변경된것은 다음의 두 부분입니다.
[State 151, 2]
type = VelSet
trigger1 = Time = GetHitVar(slidetime)
trigger2 = Time >= GetHitVar(hittime)
x = 0
[State 151, 4]
type = ChangeState
trigger1 = Time >= GetHitVar(hittime)
value = 130
ctrl = 1
이 두개가 윈무겐에서는...
[State 151, 2]
type = VelSet
trigger1 = Time = GetHitVar(slidetime)
trigger2 = HitOver
x = 0
[State 151, 4]
type = ChangeState
trigger1 = HitOver
value = 130
ctrl = 1
이렇게 바뀌었습니다.
이것도 도스무겐 윈무겐 특징의 차이에 따라서 문제점이 도스무겐의 스텟 151,153을 가진 캐릭터는 윈무겐에서 가드경직이 훨씬 빨리 풀려버린다는 겁니다.
그래서 저 두 부분을 다음과 같이 고치면 문제가 없게 됩니다.
[State 151, 2]
type = VelSet
trigger1 = Time = GetHitVar(slidetime)
trigger2 = var(1) != 1000 && var(1) != 500 && var(1) != 750 && var(1) != 667
trigger2 = Time >= GetHitVar(hittime)
trigger3 = var(1) = 1000 || var(1) = 500 || var(1) = 750 || var(1) = 667
trigger3 = hitover
x = 0
[State 151, 4]
type = ChangeState
trigger1 = var(1) != 1000 && var(1) != 500 && var(1) != 750 && var(1) != 667
trigger1 = Time >= GetHitVar(hittime)
trigger2 = var(1) = 1000 || var(1) = 500 || var(1) = 750 || var(1) = 667
trigger2 = hitover
value = 130
ctrl = 1
역시 처음 체력값을 준 var를 검사해서 도스무겐일 경우엔 도스무겐소스를, 윈무겐이면 윈무
겐소스를 넣으면 됩니다.
-------------------------------------------------------------------------
끝입니다. 아마도...(;)
CNS에서 체력이 1000이 아닌캐릭터들은 도스무겐/윈무겐에서 테스트를 해 보고 체력값이
서로 달라야 이런게 가능합니다. 그래서 제캐릭 드레이븐은 원래 체력이 950이었지만 팀플레이
시 윈무겐과 체력값이 같아버려서 체력을1000으로 고쳐버렸습니다.
윈무겐이 프로젝타일이 본체색의 영향을 받는거만 고쳐지면 정말 좋을텐데 안고쳐질것 같아
아쉽군요.
도움되는 정보이길 바랍니다.
댓글목록 0
등록된 댓글이 없습니다.