UMIGURI Chara Skill Language (UCSL) は音楽ゲームのプレイ中に曲の進捗やプレイヤーの状態に応じてゲージを操作する機能 (スキルという) を実現するための定義ファイルである。
- スキルはゲームプレイ時のゲージの伸びを助力したり、あるいはプレイ時の条件によっては妨害する機能である。
- スキルには育成要素がある。育成度合いを示すグレードという数値があり、始めは
0である。ゲームの進捗によってグレードの数値は 1 ずつ上がっていく。 - プレイヤーはスキルはキャラクターを組み合わせて使用する。
- スキルには汎用スキルと専属スキルがある。汎用スキルはどのキャラクターでも使用できるが、専属スキルは特定のキャラクターを使用したときににしか使用できない。
- 同じスキルでも、グレードごとにスキル定義ファイルを用意する必要がある。
- ファイル名規則
{skill-id}_{grade}.ucsl{skill-id}はスキル固有の識別子。{grade}グレードを示す数値。{grade}が違っても{skill-id}が同じであればグレードだけ違う同じスキルとみなされる。- UMIGURI の場合はグレードに対応していないので、
{grade}は必ず0。
- ファイル拡張子: *.ucsl
- 改行コード: CRLF または LF
- 文字符号化方式: UTF-8
- BOM (byte order mark) は無視される。
- 行頭の空白文字 (U+0009, U+0020) は削除される。
- コメントは
#(U+0023) で始まる。
Meta:
# ここにスキル名などの基本情報を記述する。
OnStart:
# ここにプレイ開始時のスキル発動を記述する。
OnJudge:
# ここにノーツ判定が発生したときのスキル発動を記述する。
OnTimer:
# ここに一定時間ごと (2 秒) に発動するスキル発動を記述する。
OnFinish:
# ここにプレイ終了時のスキル発動を記述する。
<boolean>論理型Trueが真、Falseが偽を表す。
<int>整数型-2^31から2^31 - 1までの整数値が安全に指定できる。それを超えると精度は保証されない。
<float>実数型0と 0 より大きい値は2^(-1074)から2^1024まで、0 未満の値は-2^1024から-2^(-1074)の値が表現できる。
<string>文字列型- UTF-8 文字列が表現できる。
<color>色型- 赤緑青の順でそれぞれ 16 進数 2 桁で割合を
00からFFの範囲で指定する。
- 赤緑青の順でそれぞれ 16 進数 2 桁で割合を
<skill-attr>スキル属性型- 指定内容一覧については スキル属性一覧 を参照。
<skill-indicator>スキルインジケーター型- 指定内容一覧については スキルインジケーター一覧 を参照。
<ctx-var>内部変数指定型- 指定内容一覧については 内部変数一覧 を参照。
<note-cat>ノーツ区分- 指定内容一覧については ノーツの区分一覧 を参照。
<note-type>ノーツ種類- 指定内容一覧については ノーツの種類一覧 を参照。
<judge-answer>ノーツ判定結果- 指定内容一覧については ノーツ判定一覧 を参照。
-
ここでは
Meta内で使用する制御命令を列挙する。 -
Command Prm1 Prm2のように命令 (Commandの部分) とそれに渡す引数 (Prm1Prm2の部分) はそれぞれ水平タブ文字 (U+0009) で区切る。 -
命令は大文字小文字を区別する。
- 定義ファイルのバージョンを指定する。
1を指定する。
Version 1
- スキル表示名を指定する。
Title AIR強化
- スキル説明文を指定する。
- 複数指定すると、全て統合されて複数行扱いになる。
- 最大 4 行分まで。
- 文字色の付け方
<#c:XXXXXX>で続く文字に色が付く。XXXXXXの部分には任意の RGB 各 2 桁の16 進数で表現した色コードを指定する。- 例)
<#c:0000ff>→ 青色になる abcのように RGB 各 1 桁の16 進数で表現された場合は、aabbccのように展開する。
- 例)
<#r>で続く文字の色指定が適用されなくなる。
Desc ゲーム開始時にボーナス <#c:0000ff>+6000
Desc カウント <#c:00aa00>[1] <#r> 以上の時
Desc AIR成功時にゲージ上昇率UP <#c:0000ff>(400%)
- スキルの基本的な属性を指定する。
Attr BNormal
- スキル発動時に光らせることができるインジケーターの種類を指定する。
- 複数指定することができる。(同種複数不可)
Indicator INSupport INBoost
- 何らかの回数を数える機能を使いたい場合に指定する。
- プレイ開始時にカウンターがここで指定した値で初期化される。
CountDef 180
- 専属スキルとしての対象キャラを指定する。
- キャラ識別子の書式は
{グループ名}/{キャラ ID}/{トランスフォーム番号}- トランスフォーム番号は立ち絵の指定に使用する。
- UMIGURI の場合、トランスフォーム番号は立ち絵画像ファイル名の
image_XX_lg.pngのXXの部分。
- 複数指定することで複数のキャラを対象にすることができる。
- 1 行にまとめてだけではなく、複数行に分けても指定することもできる。
- シミュレーターが対応していない場合は無視される。
# ひなこのーとキャラ専属スキル
TargetChara ひなこのーと/hinako/0 ひなこのーと/kuina/0 ひなこのーと/mayuki/0
TargetChara ひなこのーと/chiaki/0 ひなこのーと/yua/0 ひなこのーと/ruriko/0
- 判定を厳しくすることができる。
JudgeMode Hard2
-
ここでは
OnStartOnJudgeOnTimerOnFinish内で使用する制御命令を列挙する。 -
Command Prm1 Prm2のように命令 (Commandの部分) とそれに渡す引数 (Prm1Prm2の部分) はそれぞれ水平タブ文字 (U+0009) で区切る。 -
命令は大文字小文字を区別する。
<skill-indicator>光らせるインジケーターを指定する。Add|Mul元のゲージ増加値に対してAdd(加算) 操作かMul(乗算) 操作をするかを指定する。<float>元のゲージ増加値に対して 加算または乗算する値を指定する。- 計算結果の小数点は切り捨てられる。
- 一回のスキル発動での 2 回目以降の呼び出しでは、元のゲージ増加値は最後に実行した
Boost命令の計算結果が入る。
# 400% 上昇し +200、Boost インジケーターを光らせる
Boost INBoost Mul 4.0
Boost INBoost Add 200
- スキルカウント機能有効時、カウンターの値を増減させる。
- 0 未満の値になった場合、0 になる。
# カウンターを 1 減らす
Counter -1
- ゲージを 0 にし、ゲームを強制終了させる。
- ゲーム終了時スキル
OnFinishは発動しない。
OnJudge:
# ミスで強制終了
If Answer = M
Kill
ClearIf
- 後続の制御命令を実行するための条件を指定する。
<ctx-var>には判断するための対象の変数を指定する。=|!=|>|>=|<|<=には比較演算子を指定する。=(等号),!=(不等号),>(大なり),>=(大なりイコール),<(小なり),<=(小なりイコール)
val1には比較のための値を指定する。- 複数指定することも可能で、その場合はそれぞれの値は ~または~ (OR) の扱いになる。
- 条件式の効果を消すためには
ClearIfを使用する。 Ifを重ね掛けすることも可能で、それぞれの式は ~かつ~ (AND) の扱いになる。
# ノーツの種類が AIR-UP か AIR-DOWN かつ、
# 判定結果が JUSTICE CRITICAL か JUSTICE の場合に
# ゲージ 400% 上昇、カウンターを 1 減らす。
If NoteType = AirU AirD
If Answer = JC J
Boost Mul 4
Counter -1
ClearIf
If条件式の効果を消す。
- ゲーム開始時にボーナス +5000
- 一定回数ダメージを無効化 (100 回)
Meta:
Version 1
Title サンプルスキル・防御
Desc ゲーム開始時にボーナス <#c:0000ff>+5000
Desc 一定回数ダメージを無効化
Attr Guard
Indicator INSupport INGuard
CountDef 100
OnStart:
Boost INGuard Add 5000
OnJudge:
# ミスが発生してもゲージが減らないようにする
If Answer = M
If Counter > 0
Boost INGuard Mul 0
Counter -1
ClearIf
- ゲーム終了時に確率でボーナス (50% で +20000 / 50% で +10000)
Meta:
Version 1
Title サンプルスキル・支援
Desc ゲーム終了時に確率でボーナス
Desc <#c:ff00ff>【50%】 <#c:0000ff>+20000<#r>/<#c:ff00ff>【50%】 <#c:0000ff>+10000
Attr Support
Indicator INSupport
OnFinish:
If Random <= 50
Boost INSupport Add 20000
ClearIf
If Random > 50
Boost INSupport Add 10000
ClearIf
| スキル属性 | <skill-attr> |
|---|---|
| 無し | None |
| Matching | Match |
| Guard | Guard |
| Support | Support |
| Boost Normal (I) | BNormal |
| Boost Target (II) | BTarget |
| Boost Technical (III) | BTech |
| Boost Maniac (I) | BManiac |
| Danger Hard (II) | DHard |
| Danger Absolute (III) | DAbs |
| Danger Catastrophy (III) | DCat |
| 名称 | <skill-indicator> |
|---|---|
| Matching | INMatch |
| Guard | INGuard |
| Support | INSupport |
| Boost | INBoost |
| Danger | IDanger |
| Danger Matching | IDMatch |
| Danger Guard | IDGuard |
| Danger Support | IDSupport |
| Danger Boost | IDBoost |
<ctx-var> |
保持型 | 備考 | OnJudge 専用 |
|---|---|---|---|
NoteCat |
<note-cat> |
ノーツの区分 | ✔ |
NoteType |
<note-type> |
ノーツの種類 | ✔ |
Counter |
<int> |
スキルカウンターの値 | |
Answer |
<judge-answer> |
判定結果 | ✔ |
Random |
<int> |
0 から 100 までの乱数が入っている。毎回のスキル発動のタイミングで生成される。 |
|
Gauge |
<int> |
ゲージの本数 | |
GaugeRaw |
<int> |
ゲージの生の値 | |
Prog |
<int> |
曲の進捗 (ノーツ基準) 開始 0 から終了 119 |
|
ProgTime |
<int> |
曲の進捗 (時間基準) 開始 0 から終了 119 |
|
MCount |
<int> |
MISS 数 | |
ACount |
<int> |
ATTACK 数 | |
JCount |
<int> |
JUSTICE 数 | |
JCCount |
<int> |
JUSTICE CRITICAL 数 | |
Combo |
<int> |
コンボ数 | |
ComboMod<int> |
<int> |
コンボ数の <int> による剰余例) ComboMod100 -> コンボ数を 100 で割った余り |
|
MaxCombo |
<int> |
最大コンボ数 | |
MaxComboMod<int> |
<int> |
最大コンボ数の <int> による剰余 |
|
Score |
<int> |
現在のスコア | |
BorderS |
<int> |
Rank S の猶予スコア | |
BorderSS |
<int> |
Rank SS の猶予スコア | |
BorderSSS |
<int> |
Ranks SSS の猶予スコア | |
AllJustice |
<bool> |
ALL JUSTICE を達成したかどうか (OnFinish 内で判定可能) |
|
FullCombo |
<bool> |
FULL COMBO を達成したかどうか (OnFinish 内で判定可能) |
|
Success<note-cat> |
<int> |
特定ノーツ区分の判定が成功した回数 例) SuccessCTap -> TAP 系ノーツの判定が成功した数 |
|
Success<note-type> |
<int> |
特定ノーツの判定が成功した回数 例) SuccessFlick -> FLICK ノーツの判定が成功した数 |
|
Ext<string> |
<int|bool> |
シミュレーター拡張 スキル定義ファイルだけでは条件分岐できない処理をシミュレーター側に任せる場合に使用 |
<note-cat> |
内包しているノーツの種類 |
|---|---|
CTap |
TAP, ExTAP, DAMAGE, SLIDE-BEGIN, HOLD-BEGIN |
CFlick |
FLICK |
CSlide |
SLIDE-STEP, SLIDE-Injection, SLIDE-END |
CHold |
HOLD-Injection, HOLD-END |
CAir |
AIR-UP, AIR-DOWN, AIR-HOLD-Injection, AIR-SLIDE-Injection, AIR-ACTION, AIR-CRUSH |
<note-type> |
内包しているノーツの種類 |
|---|---|
Tap |
TAP |
ExTap |
ExTap |
Damage |
DAMAGE |
Flick |
FLICK |
SlideB |
SLIDE-BEGIN |
SlideX |
SLIDE-BEGIN (Ex) |
SlideS |
SLIDE-STEP |
SlideE |
SLIDE-END |
SlideI |
SLIDE-Injection |
HoldB |
HOLD-BEGIN |
HoldX |
HOLD-BEGIN (Ex) |
HoldE |
HOLD-END |
HoldI |
HOLD-Injection |
Air |
AIR-UP, AIR-DOWN |
AirU |
AIR-UP |
AirD |
AIR-DOWN |
AirH |
AIR-HOLD-Injection, AIR-SLIDE-Injection, AIR-ACTION |
AirA |
AIR-ACTION |
AirHI |
AIR-HOLD-Injection, AIR-SLIDE-Injection |
AirC |
AIR-CRUSH |
<judge-answer> |
意味 |
|---|---|
JC |
JUSTICE CRITICAL |
J |
JUSTICE |
A |
ATTACK |
M |
MISS |
<judge-mode> |
意味 |
|---|---|
Normal |
通常 |
Hard1 |
TAP 判定を厳しくする |
Hard2 |
TAP 判定をより厳しくする |
Hard3 |
TAP 判定を極端に厳しくする |
HardAir |
AIR/AIR-HOLD の判定をより厳しくする |
Hard2Air |
TAP と AIR/AIR-HOLD の判定をより厳しくする |