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

« Previous - Version 5/7 (diff) - Next » - Current version
admin, 10/13/2018 11:25 PM


패턴 파일의 구조

파일 확장자

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

  • Shufflerz에서 따와서 .sfz
  • shufflerz step script로 .sss
    좀 랜섬웨어 걸린 파일 같음
  • shufflerz step file : .ssf

첫 번째 설계

구조 예시

[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
--

[pattern] 을 기준으로 두 부분으로 나눌 수 있다. (split)
각 부분은 한 줄마다 구조체 배열로 처리한다.

헤더 구조체

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

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

패턴 구조체

  • bar, beat, l_pos, l_type, r_pos, r_type으로 이루어짐
  • bar는 --를 만났을 때 1씩 올라감 (마디)
  • 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에 특수명령이 들어갈 것임. 이것 처리해주어야
  1. bar=0 에서부터 시작, 한줄씩 스트링 배열로 만들어서 for 처리한다
  2. bar를 제외한 모든 값을 0으로 초기화한다. 그러지 않으면 특수명령을 만날 때 곤란해짐
  3. --를 만나면 bar를 갱신하고 바로 다음 줄로 넘어간다.
  4. “**:” 를 만나면 beat에 집어넣는다.
  5. “\n”을 만날때까지 “,”로 파싱한다
  6. “\n”을 만나면 바로 다음 줄로 넘어간다
  7. EOF까지 루프

두 번째 설계

구조

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

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

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

001,l_step,    ae----------------------------ae--7b------------------------7b--48xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
001,r_step,    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxae----------------------------ae--7b------------------------

가 된다.

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

  • 스텝의 크기를 정확히 할 수 있음 : 구형 설계는 스텝의 중간점만을 표시하였으나, 이 설계는 레인을 16분할로 구분, 왼쪽/오른쪽 끝을 16진수 한 자리씩 표시해주어 정확한 위치에 스텝을 놓일 수 있다.
  • 위치와 크기의 변화를 두 글자로 표현할 수 있음 : 첫 번째 설계에선 크기 변화를 표기할 수 없어서 특수 명령으로 뺀 바 있다. 이 설계에서는 위 항목에서 설명했듯 끝점을 표시하기 때문에 둘 다 표현 가능하다

아직 해결하지 못한 점은

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