Skip to content

Instantly share code, notes, and snippets.

@inonote
Last active July 17, 2025 12:40
Show Gist options
  • Select an option

  • Save inonote/d4f9a1ee84da849b5b8962db13d42220 to your computer and use it in GitHub Desktop.

Select an option

Save inonote/d4f9a1ee84da849b5b8962db13d42220 to your computer and use it in GitHub Desktop.
UMIGURI Chara Skill Language ver.1 仕様

UMIGURI Chara Skill Language ver.1 仕様

概要

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 の範囲で指定する。
  • <skill-attr> スキル属性型
  • <skill-indicator> スキルインジケーター型
  • <ctx-var> 内部変数指定型
  • <note-cat> ノーツ区分
  • <note-type> ノーツ種類
  • <judge-answer> ノーツ判定結果

制御命令一覧 (Meta)

  • ここでは Meta 内で使用する制御命令を列挙する。

  • Command Prm1 Prm2 のように命令 (Command の部分) とそれに渡す引数 (Prm1 Prm2 の部分) はそれぞれ水平タブ文字 (U+0009) で区切る。

  • 命令は大文字小文字を区別する。

Version <int> バージョン指定

  • 定義ファイルのバージョンを指定する。
  • 1 を指定する。
Version	1   

Title <string> スキル表示名

  • スキル表示名を指定する。
Title	AIR強化

Desc <string> スキル説明

  • スキル説明文を指定する。
  • 複数指定すると、全て統合されて複数行扱いになる。
    • 最大 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 <skill-attr> スキル属性指定

  • スキルの基本的な属性を指定する。
Attr	BNormal

Indicator <skill-indicator> スキルインジケーター指定

  • スキル発動時に光らせることができるインジケーターの種類を指定する。
  • 複数指定することができる。(同種複数不可)
Indicator	INSupport	INBoost

CountDef <int> スキルカウント初期値指定

  • 何らかの回数を数える機能を使いたい場合に指定する。
  • プレイ開始時にカウンターがここで指定した値で初期化される。
CountDef	180

TargetChara <string> ... 専属スキル対象キャラ指定

  • 専属スキルとしての対象キャラを指定する。
  • キャラ識別子の書式は {グループ名}/{キャラ ID}/{トランスフォーム番号}
    • トランスフォーム番号は立ち絵の指定に使用する。
    • UMIGURI の場合、トランスフォーム番号は立ち絵画像ファイル名の image_XX_lg.pngXX の部分。
  • 複数指定することで複数のキャラを対象にすることができる。
    • 1 行にまとめてだけではなく、複数行に分けても指定することもできる。
  • シミュレーターが対応していない場合は無視される。
# ひなこのーとキャラ専属スキル
TargetChara	ひなこのーと/hinako/0	ひなこのーと/kuina/0	ひなこのーと/mayuki/0
TargetChara	ひなこのーと/chiaki/0	ひなこのーと/yua/0	ひなこのーと/ruriko/0

JudgeMode <judge-mode> 判定設定 (UMIGURI v2.0+)

  • 判定を厳しくすることができる。
JudgeMode	Hard2

制御命令一覧 (OnStart / OnJudge / OnFinish / OnTimer)

  • ここでは OnStart OnJudge OnTimer OnFinish 内で使用する制御命令を列挙する。

  • Command Prm1 Prm2 のように命令 (Command の部分) とそれに渡す引数 (Prm1 Prm2 の部分) はそれぞれ水平タブ文字 (U+0009) で区切る。

  • 命令は大文字小文字を区別する。

Boost <skill-indicator> Add|Mul <float> ゲージ増減

  • <skill-indicator> 光らせるインジケーターを指定する。
  • Add|Mul 元のゲージ増加値に対して Add (加算) 操作か Mul (乗算) 操作をするかを指定する。
  • <float> 元のゲージ増加値に対して 加算または乗算する値を指定する。
  • 計算結果の小数点は切り捨てられる。
  • 一回のスキル発動での 2 回目以降の呼び出しでは、元のゲージ増加値は最後に実行した Boost 命令の計算結果が入る。
# 400% 上昇し +200、Boost インジケーターを光らせる
Boost	INBoost	Mul	4.0
Boost	INBoost	Add	200

Counter <int> カウンター増減

# カウンターを 1 減らす
Counter -1

Kill ゲーム強制終了

  • ゲージを 0 にし、ゲームを強制終了させる。
  • ゲーム終了時スキル OnFinish は発動しない。
OnJudge:
	# ミスで強制終了
	If	Answer	=	M
		Kill
	ClearIf

If <ctx-var> =|!=|>|>=|<|<= val1 ... 条件式

  • 後続の制御命令を実行するための条件を指定する。
  • <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

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

判定設定一覧 (UMIGURI v2.0+)

<judge-mode> 意味
Normal 通常
Hard1 TAP 判定を厳しくする
Hard2 TAP 判定をより厳しくする
Hard3 TAP 判定を極端に厳しくする
HardAir AIR/AIR-HOLD の判定をより厳しくする
Hard2Air TAP と AIR/AIR-HOLD の判定をより厳しくする
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment