패턴 파일의 구조 » History » Version 6

Version 5 (admin, 10/13/2018 11:25 PM) → Version 6/7 (admin, 10/14/2018 11:28 AM)

h1. 패턴 파일의 구조

h2. 파일 확장자

어차피 txt파일에서 확장자만 바꾼 거니까
이래놓고 언리얼에서 못읽으면 답 없고

* Shufflerz에서 따와서 *.sfz*

* shufflerz step script로 .sss
좀 랜섬웨어 걸린 파일 같음

* shufflerz step file : .ssf

h2. -[[오래된 것들|첫 번째 설계 (오래됨)]]-

h3. 구조 예시

<pre>
[header]
title=Narkotik Kal
artist=Hard Bass School
subartist=
jacket=narkotik.png
designer=
difficulty=2
level=9
tempo=165
wave=narkotik_kal.mp3
waveoffset=230
movie=
movieoffset=0
ver=0.01.00
guide05=runningman
guide06=runningman2
guide07=hardbassdance
[pattern]
00:00,0,24,2
00:guide,05
05:00,0,24,3
06:00,0,36,3
11:00,0,36,3
12:24,2,48,4
17:24,3,00,0
18:36,3,00,0
23:36,3,00,0
24:48,4,24,2
29:00,0,24,3
30:00,0,36,3
35:00,0,36,3
36:24,2,48,4
41:24,3,00,0
42:36,3,00,0
--
</pre>
[pattern] 을 기준으로 두 부분으로 나눌 수 있다. (split)
각 부분은 한 줄마다 구조체 배열로 처리한다.

h3. 헤더 구조체

cmd, arg 두 스트링으로 이루어짐.
=로 파싱한다

곡의 정보, 재생 시간, 템포 등을 지정

h3. 패턴 구조체

* bar, beat, l_pos, l_type, r_pos, r_type으로 이루어짐

* bar는 --를 만났을 때 1씩 올라감 (마디)

* beat는 마디를 48분할한 것. (48분 음표)
[[beat의 처리 방안|60분할로 바꾸는 것 검토]]

* pos 는 레인 전체를 48분할한 위치값. k-shoot mania에선 50분할로 노브를 처리하고 있으므로 48이면 약수도 많이 나오고 적절한 값이 아닐까 생각함

* type
0: 없음 / 1: 스텝 / 2: 롱스텝 시작 / 3: 롱스텝 진행 / 4: 롱스텝 끝
48비트 간격으로 이어지는 롱스텝은 슬라이드 스텝으로 친다

* jump : 다운 또는 점프. 본래 rtype 옆에 있었으나, 롱스텝 나오면서 처리하기 애매해 보여서 특수명령으로 편입시켰다
24:jump,1 - 0은 쓰지 않으며, 1이 다운, 2가 점프로 쓰임

* 특수명령은 00:guide,05 처럼 비트를 명시해주고 한 줄씩 처리

* beat, lpos에 특수명령이 들어갈 것임. 이것 처리해주어야

# bar=0 에서부터 시작, 한줄씩 스트링 배열로 만들어서 for 처리한다
# bar를 제외한 모든 값을 0으로 초기화한다. 그러지 않으면 특수명령을 만날 때 곤란해짐
# --를 만나면 bar를 갱신하고 바로 다음 줄로 넘어간다.
# “**:” 를 만나면 beat에 집어넣는다.
# “\n”을 만날때까지 “,”로 파싱한다
# “\n”을 만나면 바로 다음 줄로 넘어간다
# EOF까지 루프


h2. 두 번째 설계

h3. 구조

헤더 부분의 구조는 같으나, 패턴 부분의 구조를 완전히 변경. BMS와 비슷한 형식이 되었다.

점프, l, r 스텝, 특수명령을 각각의 채널로 만들어, "마디,채널,데이터" 를 한 줄로 쓸 수 있게 하였다.

간단한 런닝맨 스텝을 이 구조로 쓰자면

!http://dev.yukiho.me/redmine/attachments/download/3/runningman.PNG!

<pre>
001,l_step, ae----------------------------ae--7b------------------------7b--48xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
001,r_step, xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxae----------------------------ae--7b------------------------
</pre>

가 된다.

첫 번째 설계와 비교했을 때 개선점은

* 스텝의 크기를 정확히 할 수 있음 : 구형 설계는 스텝의 중간점만을 표시하였으나, 이 설계는 레인을 16분할로 구분, 왼쪽/오른쪽 끝을 16진수 한 자리씩 표시해주어 정확한 위치에 스텝을 놓일 수 있다.

* 위치와 크기의 변화를 두 글자로 표현할 수 있음 : 첫 번째 설계에선 크기 변화를 표기할 수 없어서 특수 명령으로 뺀 바 있다. 이 설계에서는 위 항목에서 설명했듯 끝점을 표시하기 때문에 둘 다 표현 가능하다

아직 해결하지 못한 점은

* 슬라이드의 처리 : 현재는 슬라이드를 64 or 48비트 (아직 못 정함) 간격의 이어지는 롱 스텝으로 처리하고 있다. (케이슛과 동일한 방법)
그러나 슬라이드 비중이 높은 게임의 특성상 이는 용량을 키우는 (어차피 텍스트라 큰 차이는 없겠지만) 원인이 된다.
그냥 가도 되긴 하겠지만...