カスタムフォルダのメモ
LR2 のカスタムフォルダの詳細についてメモしておきます。
カスタムフォルダの基本的な部分についての情報も追加しました。
こちらのページも参考になるかもしれません
カスタムフォルダ作成の流れ
- カスタムフォルダを配置するフォルダを作成し、 LR2 の
JUKEBOX1
に登録する。(すでに登録している場合は省略) JUKEBOX1
に登録したフォルダ内に、拡張子を.lr2folder
としたファイルを作成する。- カスタムフォルダを編集する。
- テキストエディタ等で編集した際は必ずファイル名を変更する。(重要)
カスタムフォルダ基本
カスタムフォルダのファイル
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 |
a とb は等しい |
a <> b |
a とb は等しくない |
a > b |
a はb より大きい |
a >= b |
a はb 以上 |
a < b |
a はb より小さい |
a <= b |
a はb 以下 |
定義項 BETWEEN a AND b |
定義項がa とb の間に含まれている |
定義項 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.db
にLR2files/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