[Ihoo] 제작한 다음, 마무리를 지어 봅시다. > 기초 이해 강좌

본문 바로가기

사이트 내 전체검색

뒤로가기 기초 이해 강좌

[Ihoo] 제작한 다음, 마무리를 지어 봅시다.

페이지 정보

작성자 Leona123 작성일 24-10-03 17:51 조회 611 댓글 0

본문

캐릭터를 만들 때 다른캐릭터에서 구현한 것의  방법을 모르겠다면 해당 캐릭터의 cns파일
을 봅시다.
캐릭터를 대충 완성했으면 이제 많은 캐릭터들과 실험을 해보고 버그를 잡아야 합니다.
버그가 나오면 이유를 잘 생각해보고 해당 부분을 고쳐봅시다. 버그는 없을 수가 없기 때문
에 많은 베타테스트를 통해서 최대한  많은 버그를 고쳐야합니다. 많은  경우를 봐야하므로
다양한 캐릭터와 테스트해봅니다.


캐릭터를 만들 때 자잘한 부분에 신경을 쓰면 의외로 완성도가 높아질 수 있습니다.

예를들어 KOF캐릭터를 보면 어떤  동작이 끝나기 직전 기술커맨드를  입력하면 그 동작이
끝나자마자 해당 기술이 나갑니다. 이것은 일어나자마자 대공기 등을 가능케 합니다.

또 점프함과 동시에 버튼을 누르면 점프하자마자(점프준비동작에서 점프를 하자마자) 해당
공격이 나갑니다. 무겐캐릭터 대부분은 점프한 후 눌러야 공격이 나가죠.

이 두가지는 무겐캐릭터 대부분이 안되는데 제가 무겐을 할 때마다 좀 아쉬운 부분입니다.

이걸 넣느냐 마느냐는 제작자 마음이지만 간단하니까 넣으면 좋겠죠.


1. 점프와 동시에 기본기

점프준비동작 스텟은 40이므로 먼저 CNS에서 [statedef 40] 부분을 고쳐야합니다. 스텟
40이 없다면 common1.cns에서 복사해서 붙여넣기 합시다.

원리는 var를 하나 정해서 키입력에 따라 값을 정한후 점프스텟(50)에서 var값에 따라 해당
스텟으로 가게하면 됩니다. 간단히 예만 들겠습니다.

[Statedef 40]내에 다음과 같이 키입력에 따라 var값을 바꾸는 부분을 추가합니다.(var(6)을
쓴다고 했을때)

[State 40, 0]
type = VarSet
trigger1 = Time = 0
var(6) = 0

[State 40, 2]
type = VarSet
trigger1 = command = "a"
var(6) = 1

[State 40, 2]
type = VarSet
trigger1 = command = "b"
var(6) = 2

[State 40, 2]
type = VarSet
trigger1 = command = "a+b"
var(6) = 3

CMD와는 달리 복잡한 커맨드일수록 밑에 써야 겠지요. 왜냐하면 예를들어 저 "a+b"부분이
맨앞에 있다고 쳤을 때 "a+b"커맨드를 입력하면 command="a+b"도 만족하지만 나중에
검사되는 command="a" 와 command="b"도 만족하기 때문에 command="b"에 따라
var(6)=2가 되버리기 때문입니다.

이제 점프하는스텟인 50번 스텟([statedef 50])에 다음과 같은 스텟을 이동시키는 부분을
추가합니다.

[State 50, 4]
type = Changestate
trigger1 = var(6) = 1
value = 600

[State 50, 4]
type = Changestate
trigger1 = var(6) = 2
value = 620

[State 50, 4]
type = Changestate
trigger1 = var(6) = 3
value = 650

이러면 이제 점프함과 동시에 키를 눌러도 제대로 해당 점프공격이 나가게 됩니다.
제캐릭터들엔 쿠로키시 빼고 다 쓰였습니다. 쿠로키시는 점프준비동작이 없어서 필요가
없더군요.

 

2. 동작연결? 시스템

 원리는 항상 실행되는 스텟인 [statedef -?]의 끝부분에 커맨드입력에 따라 var값을
설정하게한후 동작이 끝날 때 var값을 검사해서 해당스텟으로 가게하면 됩니다.
끝부분에 넣는 이유는 스텟이 바뀌기 전에 [statedef -?]부분의 모든 것들이 실행돼야하기
때문입니다.

트리거중엔 animtime 트리거가 유용합니다. 이 값은 애니매이션이 시작된후 -값에서 점점
더해져서 애니매이션이 끝날 때 0이 되기 때문에 예를들어 동작이 끝나기
7프레임 전부터 라고 하면 'animtime > -8'을 쓰면 되죠.

주의할점 한가지는 꼭 movetype != H를 써야 상대스텟에 가있는 경우 이동되는 버그를
방지할수 있다는 것.

cns의 [statedef -?]부분을 지나 맨 끝에 넣습니다. 간단하게 기술이 몇 개만 있는 경우,
var(33)을 쓴다고 했을때.

[State -4, 1]
type = varset
triggerall = animtime = -8
trigger1 = stateno = 1000 || stateno = 1020 || stateno = 1032
var(33) = 0

;각 스텟 1000, 1020, 1032 의 애니매이션의 끝나기 8프레임전에 키입력을 받기위해
;var(33)값을 0으로 만드는 부분입니다.


[State -4, 1]   
type = varset
triggerall = animtime > -8 && movetype != H
triggerall = command = "Fbx"
trigger1 = stateno = 1000 || stateno = 1020 || stateno = 1032
var(33) = 1

[State -4, 1]   
type = varset
triggerall = animtime > -8 && movetype != H
triggerall = command = "Fby"
trigger1 = stateno = 1000 || stateno = 1020 || stateno = 1032
var(33) = 2

;키입력을 받는 부분입니다. 각 동작이 끝나기 7프레임 전부터 키입력을 받습니다. "Fbx"와
;"Fby" 커맨드가 입력되면 그에따라 var(33)값을 지정합니다.


[State -4, 1]   
type = changestate
triggerall = var(33) = 1
triggerall = animtime = 0 && movetype != H
trigger1 = stateno = 1000 || stateno = 1020 || stateno = 1032
value = 1000

[State -4, 1]   
type = changestate
triggerall = var(33) = 2
triggerall = animtime = 0 && movetype != H
trigger1 = stateno = 1000 || stateno = 1020 || stateno = 1032
value = 1020

;애니매이션이 끝날 때 var(33)의 값에 따라 스텟을 이동시키는 부분입니다.


이러면 KOF의 동작연결시스템(?)처럼 무겐캐릭터도 그게 가능하게 됩니다.
제캐릭터는 드레이븐 빼고 다 사용되었습니다. 드레이븐은 원작에도 그런시스템이 없어서
그냥 일어나자마자 x+a 만 되게 했습니다.

제캐릭터의 CNS파일에서 ';input' 으로 검색을 하시면 ';input -8' 부분이 나오는데
거기부터 CNS끝까지입니다. 실제로는 엄청 깁니다.

 

3. KO사운드

추가로 KO시 사운드를 구현하는 것입니다. SND설명에서 11,0이 KO사운드이긴 한데
NRF씨의 달심한테 잡고 머리를 계속 치는 잡기에 맞아서 진 경우 11,0 사운드가 계속
나는 버그가 있다고 하였습니다. 이런 버그가 있는 캐릭터가 다른 캐릭터도 있을수
있으므로 사운드 11,0을 없애고 CNS에서 KO사운드를 나게 하는게 좋을 것 같습니다.

원리는 같은 ID의 익스플로드를 발생시키는데 2개 까지만 생기게 하고 1개일 때 사운드를
내면 됩니다.

마찬가지로 [Statedef -?] 부분에 넣습니다.

[State -2]
type = explod
trigger1 = numexplod(998) < 2
trigger1 = !alive
anim = 12342
pos = 0,0
id = 998
ignorehitpause = 1
bindtime = -1
removetime = -1

;지면 explod를 발생시키는데 2개 미만일 경우만 발생시키므로 2개까지 발생시키는
;것입니다. 사라지면 안되니까 removetime = -1을 썼고 히트경직중에도 돼야하니까
;ignorehitpause = 1을 썼습니다. 애니매이션 12342번은 AIR파일에서
;[Begin action 12342]
;0,999,0,0,1
;이런식으로 없는 스프라이트(투명)로 해줍니다. 애니매이션 1234 같은건 히로히로씨
;캐릭터에서 멋대로 써버리므로 12342로 했습니다. 익스플로드의 아이디는 998.

[State -3, 1]
type = PlaySnd
trigger1 = numexplod(998) = 1
value = s10,2
channel = 8
persistent = 0
ignorehitpause = 1
;ID 998의 익스플로드가 1개일 경우 KO사운드(사운드 10,2라고 쳤을때)를 발생시킵니다.


-------------------- 여기까지 ---------------------------

간단하죠? 다른 소스들중에 모르는게 있으면 다른 캐릭터의 CNS들을 참고하도록 합시다.

하위폴더에 있는 TXT파일들은 CNS관련 파일들인데 알아야하는 것들이니 CNS를 아신 후에
봐주시기 바랍니다.

추천0

댓글목록 0

등록된 댓글이 없습니다.

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

사이트 정보

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