개인 난이도표를 만드는 법을 간단히 적어둡니다.

준비물#

  1. 난이도표를 올릴 수 있는 호스팅 서비스
  2. CTRL + C, CTRL + V
  3. 시간 (10분만 있으면 가능)

시작#

1. BeMusicSeeker 설치#

LR2를 사용하고 있다면 난이도표 폴더 관리를 하기 위해 반드시 설치해야 하는 프로그램입니다. 또한 이번 과정에선 난이도표를 추출할때도 사용할 겁니다. 설치 링크 (클릭)

2. 난이도표 만들기#

BeMusicSeeker

Create New를 클릭해서 곡을 분류합니다. LEVEL 1 , LEVEL 2 식으로 폴더를 원하는 레벨 만큼 만들고 곡도 레벨별로 만든 폴더에 분류합니다.

3. 분류된 난이도표를 json으로 추출#

난이도표 추출

만들어진 난이도표에 대고 우클릭 해서 export를 누르면 header.json과 data.json을 추출할 수 있습니다.

4. 편집#

Notepad++ 같은 편집기를 사용해서 3번 과정에서 추출한 header.json과 data.json을 엽니다.

header.json

header를 먼저 열어 name, symbol, data_url을 제외하고 모두 지웁니다. level_order는 지우지 않아도 됩니다.

자주 쓰는 몇 가지만 부연 설명#
  • name : 난이도표 이름
  • symbol : 난이도표 기호
  • level_order : LR2나 BMSeeker내에서 레벨 정렬에 관한 건데, 숫자가 아닐 경우 반드시 쌍따옴표로 감싸줘야합니다. 그냥 건들지 않는 걸 추천.
  • compat_prefix : LR2나 BMSeeker내에서 폴더 이름을 정할 수 있습니다. symbol과 같은 기호로 해도 되고 아예 지워버려도 됩니다.
  • data_url : data.json의 위치입니다. 이 글은 data.json을 구글 스프레드시트를 사용해 불러올 것이기 때문에 뒤에서 한번 더 다룰 예정.

data.json은 이 곳에서 csv로 변환합니다.

5. 구글 스프레드시트로 변환#

구글 스프레드시트를 열어서 변환한 csv파일을 가져옵니다.

spreadsheet

md5, level, title, artist, url, url_diff, name_diff, comment를 제외하고 모든 열을 삭제합니다.

자주 쓰는 몇 가지만 부연 설명#
  • md5 : bms파일의 md5값
  • level : 레벨
  • title : 곡 제목
  • artist : 작곡가
  • url : 원곡 다운로드 링크
  • url_diff : 차분 다운로드 링크, 동봉인 경우 비워둡니다.
  • name_diff : 차분 다운로드 칸에 적는 간단한 설명( ex) 제작자 )
  • comment : 차분에 대한 간단한 설명을 적는 곳
  • url_pack : 원곡이 출전한 대회의 패키지 링크를 적는 곳 (필수 아님)
  • name_pack : url_pack의 패키지 이름이나 부연설명 (필수 아님)

다음 이 강좌를 이용해 data.json을 가져옵니다.

4번 과정에서 수정했던 header.json을 열어 data_url 부분에 저 강좌를 이용해 얻은 링크를 넣습니다.

6. 난이도표를 공개#

Download

샘플 페이지

위 링크를 클릭해 난이도표용 페이지 샘플을 다운로드 한 후, 추출한 header.json과 data.json을 적당한 호스팅 서비스에 업로드 한 후, 해당 링크를 BeMusicSeeker로 가져와서 정상적으로 커스텀 폴더가 만들어지면 성공입니다.

그 외#

글에는 쓸 부분만 간단하게 적어뒀는데, 난이도표 사양에 대한 자세한 정보는 이 곳을 참고하면 됩니다.

무료 호스팅 서비스는 Github이나 Gitlab Pages 서비스를 이용하면 편리합니다.

+ 한 시트에서 여러 난이도표를 운영하는 법#

이 부분에 대한 부연설명. (코드 참고는 여기에서 했음.)

function doGet(e) {
    var tablelist = e.parameter.tablename; // 주소창에는 ?tablename=data0~data2로, (obj, null, 2)에서 2는 얼마나 들여쓰기를 할건지 결정.
	var sheetId = '시트 아이디 입력'
    if (tablelist == 'data0') { // ?tablelist=data0일 때 sheet0의 데이터를 가져오는 것.
        var obj = getSheetAsObj(sheetId, 'sheet0');
        return ContentService.createTextOutput(JSON.stringify(obj, null, 2)).setMimeType(ContentService.MimeType.JSON);
    } else if (tablelist == 'data1') {
        var obj = getSheetAsObj(sheetId, 'sheet1');
        return ContentService.createTextOutput(JSON.stringify(obj, null, 2)).setMimeType(ContentService.MimeType.JSON);
    } else if (tablelist == 'data2') {
        var obj = getSheetAsObj(sheetId, 'sheet2');
        return ContentService.createTextOutput(JSON.stringify(obj, null, 2)).setMimeType(ContentService.MimeType.JSON);
    } else { // 주소 뒤에 아무것도 적지 않았을때
        return ContentService.createTextOutput(JSON.stringify(null)).setMimeType(ContentService.MimeType.JSON);
    }
}

혹시 더 좋은 코드가 있다면 연락주세요…