개인 난이도표 만들기

준비물

  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파일을 가져옵니다.

enter image description here

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. 난이도표를 공개

http://pmsdifficulty.xxxxxxxx.jp/column_table.html

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

html 수정은 pms난이도표 샘플대로 따라하면 됩니다.

그 외

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

무료 호스팅 서비스는 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);
    }
}

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