Guide to understand KSF format
version 1.0 (2005.3.22)
이 글은 토끼군 강 성훈이 정리한 KSF 포맷 스펙이다. 이 글은 GNU GFDL에 의해 무료로 배포되고 수정될 수 있다.
이 글의 고유 링크는 http://zenith.sparcs.net/article/ksfguide.php이며 자유롭게 링크할 수 있다.
기억에 의존한 부분도 일부 있기 때문에 오류가 있을 수 있다. 이 경우 위에 있는 필자의 메일로 알려 주시면 수정하도록 하겠다.
차례
KSF 포맷이란?
KSF 포맷은, 안다미로 사의 Pump It Up에서 유래한 프로그램인 Kick It Up이 사용하는 패턴 데이터이다. BMS 포맷과 유사한 과정을 거쳐서 발전해 왔고 전혀 다른 포맷임에도 불구하고 비슷한 양상을 띠고 있다.
리듬 게임에 대한 전반적인 설명은 이전 글을 참고하길 바란다. Kick It Up(과 그 뒤를 잇는 DirectMove)이 BM98 등의 프로그램과 다른 점은 대체적으로 다음과 같다:
- 게임의 특성 때문에 오브젝트가 아래에서 위로 올라 온다. 오브젝트의 종류도 Pump It Up과 같이 대각선 방향과 가운데 발판의 5가지만 있다.
- 키음의 개념이 존재하지 않는다. 패턴이 어떻게 되든, 그걸 사용자가 어떻게 입력하든 노래 재생에는 어떤 영향도 주지 않는다.
- BGA(배경 동영상)을 지원하지 않는다. Kick It Up 예전 버전에 잠깐 이 기능이 들어 갔었지만 사라졌고, 단지 지정된 이미지를 배경으로 출력하는 것만 가능하다.
현재 사용되는 KSF 포맷은 원래의 KSF 포맷에서 상당히 달라진 점이 많다. 이 글은 그 바뀐 내용들을 모두 다룬다.
디렉토리 구성
다음은 KSF 포맷으로 만들어진 곡을 받았을 때 나올 수 있는 파일들의 종류이다. (디렉토리 단위로 관리된다.)
- KSF 파일 (.ksf)
- 평범한 텍스트 파일로, 패턴 데이터를 담고 있다. 역사적인 이유로 옛날 KSF 파일들의 이름은 Crazy.ksf, Double.ksf처럼 각각의 모드(mode)에 대응하는 파일들이 있었지만, 현재는 이러한 제한이 사라졌다.
- 배경음 파일
- 플레이할 때 재생될 사운드 파일이다. 확장자는 mp3/wav/ogg가 될 수 있으며, 역사적인 이유로 이 파일의 이름은 기본적으로 Song.*였지만, 현재는 파일 이름을 자유롭게 지정할 수 있다.
- 인트로 파일
- 곡 선택시 재생될 사운드 파일로, 보통 배경음 파일의 일부분을 편집하는 경우가 많다. 파일 이름의 기본값은 Intro.*이며 다른 것은 모두 배경음 파일과 같다.
- 배경 이미지
- 이 파일은 JPEG/PNG/Windows BMP 포맷이 될 수 있으며 (확장자 역시 jpg/png/bmp가 될 수 있다) 크기는 640x480으로 고정되어 있다. 플레이할 때 배경으로 보여질 이미지이다. 파일 이름은 기본적으로 Back.*나 Title.*지만 바꿀 수 있다.
- 디스크 이미지
- 곡 선택시 보여질 이미지로, Pump It Up의 곡 선택 인터페이스에서 유래한 것이라서 "디스크"라고 부른다. 크기는 300x200으로 고정되어 있으며 파일 이름은 기본적으로 Disc.*이다. 투명색은 (0,0) 위치에 있는 픽셀로 일괄적으로 지정된다.
KSF 파일 포맷
아까도 말했듯이 KSF 파일은 평범한 텍스트 파일로, 개행 문자는 보통 0D 0A(C 형식으로 "\r\n")를 사용한다. KSF 파일은 크게 헤더 부분과 패턴 데이터 부분으로 나뉘며, "#STEP:"이 나오는 줄로 구분된다. (이 앞까지가 헤더, 그 뒤부터 데이터) 실제 구조는 다음과 같다.
#TITLE: blahblah;
#BPM: 130.0;
#STARTTIME: 31;
#PLAYER: SINGLE;
#TICKCOUNT: 4;
#STEP:
1000000000000
0100400000000
0010400000000
0000400000000
0000000000000
2222222222222
헤더 부분
헤더 부분은 모두 다음과 같은 형태의 줄로 이루어져 있다.
#fieldname:fieldvalue;
현재까지 알려진 필드 종류는 다음과 같다.
- #TITLE
- 제목을 지정한다. 제작자 등을 지정하는 다른 필드가 없기 때문에 보통 이 필드에 모든 내용을 기입한다.
- #PLAYER
- 해당 KSF 파일에서 Player 1과 Player 2의 패턴을 합쳐서 플레이할 것인지(더블 모드) 지정한다. 더블 모드일 경우 DOUBLE을, 아니면 SINGLE을 지정한다.
- #BPM
- 해당 곡의 BPM을 지정한다.
- #STARTTIME
- 패턴 데이터가 어느 위치부터 시작하는 지를 지정한다. 1/100초 단위로 표시한다. (예를 들어서 이 값이 30일 경우, 0.30초 후에 실제 패턴이 시작된다.)
- #TICKCOUNT
- 몇 줄이 한 마디로 표시되는 지를 나타낸다. 예를 들어서 이 값이 4일 경우, 한 줄은 각각 1/4 마디를 가리키게 된다.
- #INTROFILE
- 인트로 파일의 위치를 지정한다. 기본값은 Intro.*이다.
- #SONGFILE
- 배경음 파일의 위치를 지정한다. 기본값은 Song.*이다.
- #DISCFILE
- 디스크 이미지의 위치를 지정한다. 기본값은 Disc.*이다.
- #TITLEFILE
- 배경 이미지의 위치를 지정한다. 기본값은 Back.* 또는 Title.*이다.
- #DIFFICULTY
- 패턴의 난이도를 지정하며, 상대값이므로 실제 플레이에는 영향을 주지 않는다.
DirectMove에서는 지원만 할 뿐 거의 사용하지 않으나, 예전의 Kick It Up에서 사용하던 변속(곡 중간에 BPM 수치를 변경하는 것) 명령들은 다음과 같다. (사용하지 않을 것을 권한다.)
- #BPM2, #BPM3
- 첫 변속, 둘째 변속을 할 때 변경할 BPM 값을 지정한다.
- #BUNKI, #BUNKI2
- 첫 변속, 둘째 변속을 할 시간(곡의 시작으로부터 지난 시간)을 1/100초 단위로 지정한다.
- #STARTTIME2, #STARTTIME3
- 첫 변속, 둘째 변속을 하고 패턴이 재개될 때까지 기다릴 시간을 1/100초 단위로 지정한다.
예전에 Kick It Up에서는 TTL7.mpg이라는 파일의 동영상 파일을 넣으면 그 동영상이 배경으로 재생되도록 하는 기능이 잠깐 있었지만, 안정성의 문제로 삭제되었다. 현재는 공식적으로 KSF 파일 만으로 BGA를 변경하는 기능은 존재하지 않는다.
패턴 데이터 부분
패턴 데이터 부분은 13자리 숫자로 이루어진 줄들로 이루어져 있다. 각각의 줄들은 다음과 같이 구분된다.
xxxxxyyyyyzzz
여기서 xxxxx는 Player 1의 패턴을, yyyyy는 Player 2의 패턴을 가리킨다. zzz는 원래 Pump It Up 하드웨어에 표시될 불빛 조정에 사용되던 데이터(각각 0이면 꺼지고, 1이면 켜진다)였지만 사실상 사용되지 않고 000으로 채운다.
xxxxx나 yyyyy에 나오는 숫자들의 의미는 다음과 같다.
- 0: 해당 위치에 오브젝트가 존재하지 않는다.
- 1: 해당 위치에 오브젝트가 존재한다.
- 2: 해당 위치에서 곡이 종료된다. 보통은 13자리 숫자를 모두 2로 채워서 곡의 끝을 나타내지만 중간에 2만 달랑 나왔을 경우에도 종료하는 것이 좋다.
- 4: 롱노트를 나타낸다. 롱노트는 세로로 길게 이어진 4로 표시하며, 4가 나오기 시작한 시점부터 4가 아닌 다른 숫자가 나온 시점까지 롱노트가 지정된다.
DirectMove에서 지원하는 새로운 변속 방법은 이러한 패턴 데이터에 다음과 같은 명령들을 따로 넣어서 수치를 지정하는 방법을 사용한다. 현재 지원하는 필드의 종류는 다음과 같다.
- #TICKCOUNT: 정수; (또는 |T정수|)
- 헤더 부분의 #TICKCOUNT 값을 바꾼다.
- #BPM: 실수; (또는 |B실수|)
- 변속을 나타내며, 해당 위치에서 BPM 값을 변경한다.
- #DELAY: 정수; (또는 |D정수|)
- 해당 위치에서 오브젝트가 올라오는 것을 지정한 시간(1/1000초 단위)만큼 중단한다.
- #DELAYBEAT: 정수; (또는 |E정수|)
- 해당 위치에서 오브젝트가 올라오는 것을 지정한 시간(1마디 단위)만큼 중단한다.
Copyright © 2005, Kang Seonghoon <tokigun@gmail.com>