[Ihoo] 제작한 다음, 마무리를 지어 봅시다.
페이지 정보
본문
캐릭터를 만들 때 다른캐릭터에서 구현한 것의 방법을 모르겠다면 해당 캐릭터의 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를 아신 후에
봐주시기 바랍니다.
- 이전글하츠네 미쿠 스크린팩 전용 포트릿 만들기 - 스몰 포트릿 편 24.10.03
- 다음글[Ihoo] 트리거 대해 아주 자세히 가르쳐 주겠습니다. 24.10.03
댓글목록
등록된 댓글이 없습니다.