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

본문 바로가기
사이트 내 전체검색

기초 이해 강좌

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

페이지 정보

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

본문

캐릭터를 만들 때 다른캐릭터에서 구현한 것의  방법을 모르겠다면 해당 캐릭터의 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

댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 이용약관 모바일 버전으로 보기 상단으로

Copyright © 무겐 어소시에이션 All rights reserved.