カスタムフォルダのメモ

カスタムフォルダのメモ

LR2 のカスタムフォルダの詳細についてメモしておきます。
カスタムフォルダの基本的な部分についての情報も追加しました。
こちらのページも参考になるかもしれません

カスタムフォルダ作成の流れ

  1. カスタムフォルダを配置するフォルダを作成し、 LR2 のJUKEBOX1に登録する。(すでに登録している場合は省略)
  2. JUKEBOX1に登録したフォルダ内に、拡張子を.lr2folderとしたファイルを作成する。
  3. カスタムフォルダを編集する。
    • テキストエディタ等で編集した際は必ずファイル名を変更する。(重要)

カスタムフォルダ基本

カスタムフォルダのファイル

LR2 はJUKEBOX1に登録しているフォルダ内の、拡張子が.lr2folderとなっているファイルをカスタムフォルダと認識します。

カスタムフォルダの編集

カスタムフォルダはゲーム内、またはメモ帳などのテキストエディタ等で編集します。

ゲーム内で編集する場合はカスタムフォルダを設置した階層まで移動し、ゲーム内のタグエディタを用いて編集します。

テキストエディタ等で編集する場合は.lr2folderファイルをテキストエディタで開き、以下のような書式で編集します。

注意:テキストエディタで編集した際にLR2で再度カスタムフォルダを読み込ませるにはファイル名を変更する必要があります。

そのため、テキストエディタ等で編集した後はカスタムフォルダのファイル名を必ず変更してください。

#COMMAND <コマンド>
#MAXTRACKS <表示曲数>
#CATEGORY <カテゴリ>
#TITLE <タイトル>
#SUBTITLE <サブタイトル>
#INFORMATION_A <情報1>
#INFORMATION_B <情報2>

この中で重要なのは#TITLE, #COMMAND, #MAXTRACKSの3つです。それぞれ以下のような意味を持ちます。

説明
#TITLE カスタムフォルダのタイトル
#COMMAND カスタムフォルダ内で表示する曲を選択するコマンド 詳細
#MAXTRACKS カスタムフォルダ内での曲の表示数 0ですべて表示 1でランダムに1曲選択

その他のものは、ゲーム内での選曲中にそのカスタムフォルダの情報として表示されます。 どのように表示されるかはスキンによって異なります。

以下に入力例を示します。 (LEVEL 10 以上のすべての曲を選択するカスタムフォルダ)

#COMMAND   level >= 10
#MAXTRACKS 0
#CATEGORY 
#TITLE     LEVEL 10 以上の曲

カスタムフォルダのコマンド

カスタムフォルダのコマンド#COMMANDには、選択する曲の条件となる条件式を設定します。
<定義項> <演算子> <値>のように書きます。

例 : LEVEL 10 未満の曲を選択

#COMMAND level < 10

また、コマンドの末尾にORDER BY <定義項> [ASC | DESC]とつけると定義項の値で結果をソートすることができます。 昇順の場合は ASC 、降順の場合は DESC を指定します

例 : LEVEL 10 未満の曲を選択し、BPM の小さいものから順にソート

#COMMAND level < 10 ORDER BY maxbpm ASC

定義項一覧

利用可能な定義項を以下の表に示します。

定義項 備考
title 曲のタイトル
subtitle 曲のサブタイトル
genre 曲のジャンル
artist 曲のアーティスト
subartist 曲のサブアーティスト
tag 曲に登録されているタグ
path bmsファイルのパス
level 曲のプレイレベル
difficulty bmsの難易度
none 0
beginner 1
normal 2
hyper 3
another 4
insane 5
maxbpm 曲の最大BPM
minbpm 曲の最小BPM
mode bmsの鍵盤数
judge 判定ランク
Very Hard 0
Hard 1
Normal 2
Easy 3
Very Easy 4
longnote ロングノートを含むか
0 無い
1 有る
bga BGAを含むか
0 無い
1 有る
random ランダム分岐を含むか
0 無い
1 有る
favorite お気に入り登録されているか
0 無い
1 有る
txt テキストファイルが同梱されているか
0 無い
1 有る
karinotes ランダム分岐などを考慮しない仮のノーツ数
adddate 曲をインストールした日付
exlevel LR2IRでの発狂難易度(★)
clear クリア状況
0 通常プレイはしていない
1 failed
2 easy
3 normal
4 hard
5 fullcombo
未プレイ曲を選択したい場合は clear ISNULL とする
perfect 自己ベストの Perfect Great 数
great 自己ベストの Great 数
good 自己ベストの Good 数
bad 自己ベストの Bad 数
poor 自己ベストの Poor 数
totalnotes ノーツ数
ただしプレイ済みの曲のみに登録されている
未プレイ曲も含む場合は karinotes を使用する
maxcombo 自己ベストの最大コンボ数
minbp 自己ベストの最小BP
playcount 曲のプレイ回数
clearcount 曲のクリア回数
failcount 曲の未クリア回数
rank 自己ベストのランク
AAA 8
AA 7
A 6
B 5
C 4
D 3
E 2
F 1
rate 自己ベストのスコアレート
ただし整数
clear_db ダブルバトルでのクリア状況
clear_sd SPtoDP DPtoSP 9to7 でのクリア状況
clear_ex エクストラモードでのクリア状況

演算子一覧

利用可能な演算子を以下の表に示します。

演算子 備考
a = b abは等しい
a <> b abは等しくない
a > b abより大きい
a >= b ab以上
a < b abより小さい
a <= b ab以下
定義項 BETWEEN a AND b 定義項がabの間に含まれている
定義項 IN (a, b, ... ) 定義項がa, b, ...のいずれかに一致する
定義項 LIKE パターン パターンマッチングを使って定義項と値を比較する
次の特殊文字を使用できる
% : 任意の0文字以上の文字列
_ : 任意の1文字
文字列に対して=を用いて比較した場合は
文字列が完全に一致する必要があるが
LIKE を用いて'%文字列%'のように文字列の前後に%をつけることで
“文字列を含む” という検索が可能となる
定義項 GLOB パターン パターンマッチングを使って定義項と値を比較する
次の特殊文字を使用できる
* : 任意の0文字以上の文字列
? : 任意の1文字
[abc] : a b c のいずれかに一致
[a-d] : aからdまでにいずれかに一致
定義項 IS NULL 定義項がNULLと一致するかどうか
条件式1 AND 条件式2 条件式1条件式2の両方満たすものを選択する
条件式1 OR 条件式2 条件式1条件式2のどちらかを満たすものを選択する
NOT 条件式 条件式を満たさないものを選択する

コマンドの例

  • 自己ベストが A ランク未満の曲を選択

    #COMMAND rank < 6

  • すべての曲を最近インストールした順にソートして表示

    #COMMAND 1 ORDER BY adddate DESC

  • 10鍵または14鍵の曲を選択

    #COMMAND mode IN (10, 14)

  • BPMが 180 ~ 200 のものを選択し BPM 順にソートして表示

    #COMMAND maxbpm BETWEEN 180 AND 200 ORDER BY maxbpm ASC

  • 曲のジャンルに Trance または トランス を含むものを選択

    #COMMAND genre LIKE '%Trance%' OR genre LIKE '%トランス%'

  • bmsファイルのパスに G2R2018 が含まれているものを選択

    #COMMAND path LIKE '%G2R218%'

  • 発狂難易度表内の未プレイ曲を選択

    #COMMAND exlevel BETWEEN 1 AND 25 AND clear ISNULL

  • 発狂難易度表内の未難曲をBPが少ない順にソートして表示

    #COMMAND exlevel BETWEEN 1 AND 25 AND clear <= 3 ORDER BY minbp ASC

カスタムフォルダのコマンドの細かい話

LR2 のデータベースは sqlite3 であり、 カスタムフォルダは sqlite3 の SELECT 文を用いてデータを取得しています。
カスタムフォルダのコマンドはLR2files/Database/song.dbLR2files/Database/Score/プレイヤー名.dbを attach したうえで

SELECT * FROM song WHERE (command) INNER JOIN ON song.hash=score.hash
(command)の部分を定義しています。(LR2 のヘルプを参照)
そのためsqlite で使用できる関数などもカスタムフォルダのコマンドとして使用することができます。
SQLite Database Browserなどを用いれば GUI で手軽にデータベースの中身を見たりコマンドをテストしたりすることができます。

特殊なコマンドの例

sqlite の機能を用いた特殊なコマンドの例を紹介します。

ランダムでソートする

RANDOM()関数を用いて結果をランダムでソートして表示します。

#COMMAND (適当なコマンド) ORDER BY RANDOM()

BeMusicSeekerの情報をカスタムフォルダで使用する

BeMusicSeeker を使用すると song.db にテーブルが追加されます。
この追加されたテーブルもカスタムフォルダのコマンドに用いることができます。

BeMusicSeekerで追加されるテーブル一覧

追加されるテーブルの中で、カスタムフォルダとして使えそうなものを以下の表にまとめます。

テーブル名 カラム 説明
ir_data hash
rank
players_num
lr2id
clear
notes
combo
pg
gr
minbp
average
sigma
lastupdate
lastcacheupdate
LR2IRでの曲の情報
ただし (おそらく) IRに送信済みの曲のみ
ir_score hash
clear
notes
combo
pg
gr
gd
bd
pr
minbp
option
lastupdate
LR2IRでの自分のスコア情報
ただし (おそらく) IRに送信済みの曲のみ
playlist playlist_id
name
symbol
org_name
org_symbol
folder_order
folder_sort_key
folder_sort_ascending
entry_type
page_url
header_url
data_url
compat_prefix
last_update
ignore_folder_output
is_external_sync
output_dir
is_root_folder
BeMusicSeeker に登録しているプレイリスト(難易度表)の情報
playlist_entry playlist_id
md5
level
title
artist
folder
lr2_bmsid
url
url_diff
org_md5
adddate
comment
memo
is_removed
name_diff
BeMusicSeeker に登録しているプレイリスト(難易度表)に入っている曲の情報

BeMusicSeekerの情報をカスタムフォルダで使用する方法

カスタムフォルダのコマンドは SELECT 文の WHERE 句の情報しか指定できないため、 BeMusicSeekerの情報をカスタムフォルダで使用するためには、コマンド内でさらに SELECT 文を使用します。

コマンドの例

BeMusicSeeker の情報を使用してスコア偏差値を計算しその値でソートしてみます。

#COMMAND (適当なコマンド) ORDER BY(perfect*2+great-(SELECT average FROM ir_data WHERE hash = song.hash))*10/(SELECT sigma FROM ir_data WHERE hash = song.hash)+50 ASC