[Ihoo] Cns 파일 기본 과 Def 파일 대해 알아봅시다. > 기초 이해 강좌

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

기초 이해 강좌

[Ihoo] Cns 파일 기본 과 Def 파일 대해 알아봅시다.

페이지 정보

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

본문

CNS기본 - 도스무겐 기준입니다. 도스무겐캐러는 윈무겐에서 돌아가지만 윈무겐 캐러는
           도스무겐에서 안될수 있기 때문입니다. 도스무겐와 윈무겐 차이는 나중에설명.

쿵푸맨의 CNS에 설명되어 있는 것들을 기준으로 설명하겠습니다. 쿵푸맨의 CNS를 보면 원
문을 보실수 있습니다. 또한 DOCS폴더의 CNS.TXT를 보셔도 원문을 보실수 있습니다.

CNS의 완성도에 따라서 좋은캐릭터와 구린캐릭터가 구분됩니다. CNS를 만드는 것은  마치
컴퓨터프로그래밍을 하는것과 같지만 C같은 언어보다 월등히 쉽습니다. 물론 기술특성의 구
사방법엔 한계가 있을지언정 말이죠.

먼저 스텟들이 나오기 이전에 캐릭터의 여러 가지 수치들을 정해주는 부분입니다.
x는 가로방향, y가 세로방향이라는거 모르시는분 없겠죠. y속도는 -가 되면 공중에 뜨는 것
이고 +가 되면 밑으로 떨어지는 것입니다.

[Data]
life = 1000    ;캐릭터의 체력을 정합니다.
attack = 100  ;%공격력입니다. 예를들어 150으로 하면 대미지가 150%로 들어갑니다.
defence = 100 ;%방어력입니다. 예를들어 200으로 하면 대미지를 50%로 받습니다.
fall.defence_up = 50 ;넘어졌을 때 방어력이 몇% 증가하느냐 하는겁니다.
liedown.time = 60  ;레버를 흔들지 않았을 때 넘어져있는 최대 프레임입니다. 60프레임이
                   ;므로 1초가 되겠네요
airjuggle = 15   ;저글포인트. 저글이란게 공중에 띄워놓고 얼마나 팰수있냐 하는건데 나중
                ;에 설명. 기본값으로 놔둡시다.
sparkno = 2    ;히트스파크를 설정하지 않았을 때 나오게되는 스파크. 무겐 DATA폴더내
                ;FIGHTFX.AIR 파일의 애니매이션 번호를 따라 나옵니다.
guard.sparkno = 40 ; 위와 마찬가지로 기본 가드스파크
KO.echo = 0 ; 1로 할 경우 패배시 나오는 목소리가 메아리칩니다.
volume = 0 ;볼륨인데 조정해도 그다지 변화가 없습니다. -로 하면 작아지고 +로 하면
            ;커집니다. 라고 나와있긴 한데 별로 변화가 없습니다. 최대값은 255인 듯.
            ;(원문에 softer는 '부드럽게'가 아니라 '작게'로 번역합니다)
;무겐에서는 변수를 사용할수 있는데 정수변수인 var(?)와 실수변수인 fvar(?)가 있습니다.
;var는 var(0)부터 var(59)까지 쓸 수 있고 fvar는 0부터 39까지 쓸수있습니다.
IntPersistIndex = 60   ;정해진 수 이후의 var는 다음 라운드에서도 값이 유지됩니다.
                      ;예를들어 40이라고 하면 var(40)~var(59)는 라운드가 넘어가도 그
                      ;값이 유지됩니다. 스테이지 넘어가도 var가 유지되는건 스텟 5900
                      ;을 고치면 되는데 다른 파일로 설명.
FloatPersistIndex = 40 ;정해진 수 이후의 fvar는 다음 라운드에서도 값이 유지됩니다.
power = 3000        ;기의 최대값입니다. 1000이 기 한칸인데 이 수치를 고치면 기게이
                     ;지랑 안맞게 되므로 되도록 고치지 맙시다.

[Size]
xscale = 1           ;스프라이트 표시 가로 배율. AIR판정 범위도 이 배율에 따라 변함.
yscale = 1           ;스프라이트 표시 세로 배율. 위와 같음.
ground.back = 15     ;캐릭터의 지상에서 뒤쪽으로 몸체범위.
ground.front = 16    ;캐릭터의 지상에서 앞쪽으로 몸체범위. 설명이 어려운데 이것이 클
                     ;수록 상대캐릭터와 밀착했을 때 밀려나는 거리가 커짐. 또한 이것이
                     ;작을수록 초 밀착 상태가 가능. 직접 실험해보시고 적당한 값을
                     ;줍시다.
air.back = 12        ;공중에서 뒤쪽 몸체범위
air.front = 12       ;공중에서 앞쪽 몸체범위
height = 60      ;캐릭터의 키. 이것이 크면 상대캐릭터가 점프로 뒤로 넘어갈수 없게 되
                 ;버립니다.
attack.dist = 160    ;공격을 했을 때 상대가 뒤 방향키를 눌렀을 때 가드포즈로 되게 하
                    ;는 거리. 이 수치가 작으면 공격을 해도 조금만 멀리있을 경우 상대
                    ;는 가드포즈를 취하지 않고 그냥 뒤로 걷는다. 이 수치가 크면 멀리
                    ;있어도 상대는 가드포즈를 취하게 된다.
proj.attack.dist = 90 ;위와 마찬가지로 이건 프로젝타일의 공격범위. 프로젝타일은 cns명
                    ;령어중 하나인데 대개 장풍에 쓰입니다.
proj.doscale = 0     ;1로 할 경우 본체 표시 배율을 프로젝타일에도 적용시킵니다.
head.pos = -5, -90   ;머리의 위치. 머리를 잡는 기술에 당할 경우 이 수치를 쓰는 경우
                      ;가 있으므로 제대로 정해 줍시다. 만약 안쓸 경우 기본값은 -5,-90
                     ;이 됩니다.(구버전캐러는 이게 안쓰여있죠)
mid.pos = -4, -60    ;마찬가지로 복부 위치. 안쓰면 기본값은 -4,-60이 됩니다.
shadowoffset = 0     ;그림자 표시 위치. -이면 더 위쪽에 표시되고 +이면 더 아래로 표
                      ;시됩니다.
draw.offset = 0,0    ;캐릭터 표시 위치. x축 y축으로 얼만큼 이동시켜 표시할 것인가

[Velocity]
walk.fwd  = 2.4      ; 앞으로 걷는 속도. 단, 걷는 스텟인 스텟넘버 20에서 이 수치를 쓰
                     ;지 않고 임의로 속도를 정해버릴수도 있음. 밑에 수치들도 같음.
                     ;1프레임당 속도입니다.
walk.back = -2.2     ;뒤로 걷는 속도
run.fwd  = 4.6, 0    ;앞으로 달리는 속도
run.back = -4.5,-3.8 ;백대쉬 속도. y값이 있긴 한데 위에 설명된대로 안쓰일수 있음.
jump.neu = 0,-8.4    ;제자리점프의 x,y속도
jump.back = -2.55    ;후방점프의 x속도
jump.fwd = 2.5       ;전방점프의 x속도
runjump.back = -2.55,-8.1 ;후방 대점프의 x,y속도
runjump.fwd = 4,-8.1      ;전방 대점프의 x,y속도
airjump.neu = 0,-8.1      ;공중제자리점프의 x,y속도
airjump.back = -2.55      ;공중후방점프의 x속도
airjump.fwd = 2.5         ;공중전방점프의 x속도

[Movement]
airjump.num = 1      ;공중점프 가능 횟수?
airjump.height = 35  ;점프했을 때 지상에서 떨어질수 있는 최대거리?
yaccel = .44         ;공중에 있을 때 y축 가속도입니다
stand.friction = .85  ;서있을 때 지상과의 마찰력.이 수치가 작을수록 맞았을 때 덜 밀려납
                    ;니다.
crouch.friction = .82 ;앉아있을 때 지상과의 마찰력


이제 스텟 부분입니다.

스텟을 실행할때도 무겐은 위에서부터 아래로 차례로 실행합니다.
방식은 다음과 같습니다.

[Statedef 스텟넘버]
type = ?      ;S/C/A/L/U  스텟의 타입입니다. 서있음/앉음/공중/누워있음/이전스텟값지속
movetype = ? ; I/A/H/U    이동속성. 중립/공격중/맞는중/이전스텟값지속
physics = ?   ;S/C/A/N/U  물리속성. 서있음/앉음/공중/적용안함/이전스텟값지속
juggle = ?    ;         공격의 저글포인트입니다.
anim = ?     ;사용할 애니매이션 번호. AIR파일에 있는 액션번호를 정해주면 됩니다.
              ;안쓰면 이전 애니매이션이 유지됩니다.
ctrl = ?       ;키입력을 가능케 할것인가를 정합니다. 0이면 불가능, 1이면 가능, 안쓰면
              ;이전 스텟의 값이 지속됩니다.
velset = ?,?   ;스텟 시작하자마자 x축 속도와 y축 속도를 지정해줄수 있습니다. 안쓰면
              ;x축 속도와 y축 속도는 변화 없음.
poweradd = 0 ;스텟 시작하자마자 기를 얼마만큼 증가시킬 것인가를 정해줄수 있습니다.
facep2 = 0    ;이 값이 1이면 스텟 시작하자마자 방향이 상대방쪽을 향합니다.
sprpriority = ? ;스프라이트 우선순위 값입니다. 값이 클수록 화면의 앞쪽에 표시되고 작을
              ;수록 뒤에 표시됩니다. 안쓰면 이전의 값 지속.
hitdefpersist = 0 ;이 값을 1로 하면 이전 스텟의 hitdef 성격이 지속됩니다.
movehitpersist = 0 ;이 값을 1로 하면 이전 스텟의 movehit, moveguarded, movecontact
                   ;값이 지속되는 듯. move~는 cns명령에서 설명.
hitcountpersist = 0 ;이 값을 1로 하면 이전 스텟의 hitcount 값이 지속됩니다.


[State 번호, ?]     ; 여기서 번호랑 ? 는 자기맘대로 써도 됩니다.
type = ?           ;명령어 지정. 명령에 관한 것은 나중에 설명.
trigger?             ;조건지정. 조건에 관한 것은 나중에 설명.
~~                ;조건을 만족했을 때 명령에 따라 어떻게 할것이냐를 지정

state뒤에 쓸 번호는 아무거나 쓰면 되는데 해당부분에 에러가 있어서 에러메세지가 뜰
경우 저 뒤에 쓰인 번호대로 뜨므로 알아서 겹치지않게 씁시다.

명령어와 조건에 관한 것은 DOCS폴더의 SCTRL.TXT 와 TRIGGERS.TXT를 보면 나와있긴
합니다만 스스로 실험해보고 알수도 있습니다. 여기서 꼭 type이 위에오고 그다음 trigger
이런식으로 할필요없고 순서가 바뀌어도 되긴 됩니다만 알아보기 쉽게 하기위해 한가지
방식으로 합시다.


statedef부분의 movetype 이 A일 경우에만 공격판정을 낼수 있습니다. H일 경우에만 대미
지를 받으며 I일 경우엔 공격판정을 정해줘도 공격판정이 나지 않고, 대미지도 안받습니다.

physics 는 S로 하면 CNS처음 부분의 stand.friction = ? 의 수치대로 x축에 마찰력을 적용
합니다. C로 하면 crouch.friction = ? 대로 마찰력을 적용하고 A로 할 경우 yaccel = ? 의
수치대로 y축에 가속도를 적용합니다. N은 아무것도 적용 안하는겁니다.

juggle 은 저글수치를 말하는것인데 이 수치를 정해주지 않을 경우 이전 스텟의 juggle수치
그대로 설정이 됩니다. 이전 스텟에도 저글수치가 없으면 그 이전스텟의 저글수치 그대도
됩니다.
저글이란 공중에 띄워놓고 얼마나 칠수 있느냐를 정하는 것인데 CNS처음부분에 airjuggle
= 15로 돼있으므로 저글이 15포인트가 될 때까지 칠수 있습니다.
예를들어 저글이 8인 공격은 8*2=16이 돼서 15가 넘어가므로 한번밖에 못치고 7인공격은
2번 칠수 있습니다. 저글8인 공격과 7인 공격은 한 대씩 맞출수 있습니다.
공격의 저글을 0으로 할 경우 띄워놓고 무한이 가능합니다. 역시 이 수치도 적당히 정해줍
시다.

저글사용시 유의점을 설명해놓겠습니다만 cns를 아신 후에야 이해가 될수도 있습니다.

cns명령중에 공격판정을 내는 명령은 hitdef가 있습니다.
hitdef에서 공격을 맞은 상대가 쓰러지느냐 안쓰러지느냐를 정할수 있고 공중에서 맞았을
때 쓰러지느냐 안쓰러지느냐도 정할수 있습니다.

일단, 맞아서 넘어지는(다운되기전 날아가는)상태의 적을 때릴 경우 무조건 저글은
들어갑니다.

1. 지상에서 맞추면 쓰러뜨리지 않지만 공중에서 맞추면 쓰러뜨리는 공격의 경우 공중에서
처음 맞춰도 적은 다운될지언정 저글은 안들어갑니다. (이건 윈무겐에서 고쳐졌습니다.
윈무겐의 update.txt에 나와있군요. 윈무겐에서는 무조건 쓰러뜨리기만 하면 저글이
들어갑니다.)

2. 지상과 공중 모두에서 적을 쓰러뜨리는 공격은 히트 즉시 저글이 들어갑니다.
모르시겠으면 실험해보시면 알수 있을것입니다.

 

이제 스텟들의 경우 캐릭터마다 공통된 기본 스텟이 있습니다.
이 스텟들은 DATA폴더의 COMMON1.CNS에 있긴 하지만 같은 스텟이 캐릭터의 CNS파일
내에 있을 경우 COMMON1.CNS의 것을 쓰지않고 캐릭터CNS파일의 스텟을 쓰게 됩니다.
이걸 이용해서 바꾸고 싶은 스텟을 바꿀수 있습니다.

예를 들어 무겐에서는 기본적으로 다운되는 애니매이션은 5050 하나인데 KOF를 보면 맞을
때 상단공격을 맞아서 넘어지는 모습과 복부공격을 맞아서 넘어지는 모습 2가지가 있습니
다. 이걸 무겐에서도 가능하게 할수 있다는 것입니다. 제캐릭터들을 보면 그렇게 해놓았습
니다.

그리고 스텟 0-199 와 5000-5999중에 COMMON1.CNS에 없는 스텟은 후속 버전에서
쓰일 수도 있으니 쓰지 말라고 DOCS폴더의 CNS.TXT파일에 쓰여있네요.

그외에 스텟넘버를 만들 때 지켜야할점(원파일은 docs폴더의 air.txt파일 맨 마지막 부분).
근데 안지켜도 별상관은 없습니다만 치즈루의 기술중에 기술을 봉인하는 필살기에 당했을
때 이걸 안지켰을 경우 기술봉인의 효과가 제대로 안나옵니다.

0-199    - 쓰지마시오 -
  기본공격들
200-299   서서 공격
300-399   서서 공격이나 대쉬공격.
400-499   앉아 공격
500-599   앉아 공격
600-699   공중공격
700-799   공중공격
800-999   스텟 부족할 경우 쓰시오
1000-2999 기술들(장풍, 승룡권 같은거)
3000-4999 필살기
5000-5999 - 쓰지마시오 -


스텟 넘버 중에서 캐릭터의 CNS나 CMD파일을 보면 후반부 정도에
[statedef -1] 이나 [statedef -2] 이나 [statedef -3]이 있을것입니다.
이 스텟들은 항상 실행되는 스텟들인데  -3, -2, -1 순으로 실행됩니다.
예들들어 cns엔 [statedef -2] 가 있고 cmd엔 [statedef -1]이 있으면 cns의
[statedef -2]부분이 먼저 실행되고 그다음 cmd의 [statedef -1]부분이 실행됩니다.

항상실행되는 스텟의 예로는 kof캐릭터의 스트라이커바를 표시한다든지, 기절수치를 계산
한다든지 또는 cmd에서 커맨드를 검사한다든지(cmd에서 [statedef -1]이후로 스텟이동명
령이 있었죠?)등이 있습니다. 물론 자기맘대로 만들 수 있습니다.


CNS명령어 설명을 하기 전에 간단히 DEF파일에 대해 설명. 캐릭추가할땐 def파일의 이름
과 폴더의 이름이 같아야 하죠.

[Info]
name    = "Iori Yagami"   ;캐릭터의 이름. 화면에 표시되는 이름이 아니라 cns에서 인트
                           ;로를 만들 때 등에 검사용으로 쓰이는 이름이다.
displayname = "Iori Yagami"   ;화면에 표시될 이름. 이줄을 쓰지 않는다면 그냥 name과
                              ;같게 표시된다.
mugenversion = 14,04,2001    ;그냥 무겐버전표시. 게임내에서 쓰이진 않음
author = "[yagami+ihoo1836]" ;제작자 이름. 캐릭터 인트로를 만들 때 상대캐릭터 제작자
                            ;이름을 검사하는 경우도 있다.
pal.defaults = 1,2,3,4,5,6,7,8   ;팔렛들 지정. cpu로 나올 때 나올 팔렛을 정하는듯?

[Files]
cmd     = iori.cmd  ;cmd파일이름을 써준다.
cns     = iori.cns   ;cns파일이름을 써준다. 잡다한 수치들이 포함되어있는 cns이어야함
st      = iori.cns      ;그냥 씀
st1     = ioriAI.cns    ;cns파일을 여러개로 나눠서 만들 때 이렇게 st1,st2 에 줄줄이 쓸
                      ;수도 있다. cns를 여러개로 나눠서 만드는 제작자로는 sanderx씨
                      ;등이 있다.
stcommon = common1.cns  ;공통스텟이 있는 파일. 바꿀필요 없음
sprite  = iori.sff      ;스프라이트 파일이름을 써준다.
anim    = iori.air      ;애니매이션 파일이름을 써준다.
sound   = iori.snd      ;사운드 파일이름을 써준다.
pal1    = iori4.act     ;a 버튼 선택시 팔렛
pal2    = iori5.act     ;b 버튼 선택시 팔렛
pal3    = iori6.act     ;c 버튼 선택시 팔렛
pal4    = iori1.act     ;x 버튼 선택시 팔렛
pal5    = iori2.act     ;y 버튼 선택시 팔렛
pal6    = iori3.act     ;z 버튼 선택시 팔렛
pal7    = iori8.act     ;스타트버튼+a 버튼 선택시 팔렛
pal8    = iori7.act     ;스타트버튼+b 버튼 선택시 팔렛. 이런식으로 pal12까지 가능.

[Arcade]
intro.storyboard  = iintro.def   ;인트로 def파일이름
ending.storyboard = iending.def ;엔딩 def 파일이름

인트로나 엔딩이 없으면 해당 줄은 쓰지 말아야 합니다. 안그러면  파일이 없다고 에러납니
다.

인트로나 엔딩은 다른캐릭터걸 보거나 docs폴더의 파일을 보면  만드는법을 금방 알수있을
것이다. 만드는법도 쉽다.

추천0

댓글목록

등록된 댓글이 없습니다.


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

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