RPG Developer Bakin 用プラグイン キャスト別のスキル装備切替機能を提供します。習得済みスキルの中から装備するものを選び、コスト上限内で装備セットを組む JRPG 風のシステムをコモンイベントから構築できます。
- バージョン: v0.1.0
- カテゴリ: Common Event Script
- 動作環境: RPG Developer Bakin
- キャストごとに、習得スキルの装備 ON/OFF を切り替える
- スキル毎にコストを設定 (
#cost:Nタグ) - キャストごとに装備可能な最大コスト上限を設定 (
#base:N#perlevel:Nタグ、レベル連動) - 装備状態を Bakin 変数 (
SS_*) に書き出し、レイアウトツールで自由に UI を構築 - レベルアップで新規習得したスキルは自動で非装備状態 (コスト上限を意図せず超えない)
- 新規加入キャストの初期スキルも自動で非装備状態
このプラグインは「機能提供」に徹しており、装備画面 UI そのものは含みません。UI は Bakin レイアウトツールで自由に構築してください (末尾のサンプル参照)。
SkillSwitch.csを Bakin プロジェクトのscriptフォルダに配置- Bakin エディタを起動 (プラグインが自動コンパイルされる)
- コモンイベントの「指定の関数を実行」から
SkillSwitch.*の CE 群が呼び出せることを確認
Bakin エディタの「データベース > スキル」で各スキルの管理タグ欄に記述:
#cost:3
Nは非負整数 (例:#cost:0,#cost:1,#cost:5)- タグ未設定なら cost = 0 として扱う (コスト機能を使わないなら何も書かなくて OK)
- 他のタグと混在可能 (スペース区切り)
Bakin エディタの「データベース > キャスト」で各キャストの管理タグ欄に記述:
#base:3 #perlevel:1
装備可能な最大コストの計算式:
MaxCost = base + perLevel × cast.level
- 例:
#base:3 #perlevel:1→ Lv1 で 4、Lv10 で 13 #base/#perlevelどちらも未設定なら cap = 0 として扱う (base=0、perLevel=0)。この状態ではコスト > 0 のスキルは装備不可
| 設定 | 挙動 |
|---|---|
| 両方未設定 | MaxCost = 0 (#cost:0 のスキルのみ装備可) |
#base:3 のみ |
MaxCost = 3 (レベル非連動) |
#perlevel:1 のみ |
MaxCost = 1 × level |
#base:3 #perlevel:1 |
MaxCost = 3 + 1 × level |
コスト機能を使わないなら: スキル・キャストどちらもタグを一切書かなければ、#cost:0 × MaxCost:0 で全スキル装備し放題 (足し合わせても 0 が上限に触れない)。
失敗時は画面下部にトーストで理由を表示します。ユーザー側で戻り値を Bakin 変数に代入する必要はありません。
| CE | 引数 | 説明 |
|---|---|---|
Toggle(string) |
"castIdx:skillName" (例 "0:ファイアボール") |
装備状態を反転 |
Equip(string) |
同上 | 装備 (既装備は何もしない) |
Unequip(string) |
同上 | 未装備 (既未装備は何もしない) |
ResetAll(int) |
castIndex |
指定キャストの全スキルを未装備に |
ToggleAt(string) |
"castIdx:listIndex" |
習得スキル一覧の listIndex 番目をトグル (レイアウトのサブメニュー選択結果から呼ぶ用) |
ToggleAtCurrent(int) |
listIndex |
直近 WriteState の castIndex を再利用、引数 1 個でトグル可能な ToggleAt の簡易版 |
WriteState(int) |
castIndex |
指定キャストの装備状態一式を SS_* 変数群に書き出す (レイアウト表示前に呼ぶ) |
引数の識別子:
- 通常はスキル名を指定 (
"0:ファイアボール") - スキル名にコロン
:は含めないでください (パースの都合) - 同名スキルが複数ある場合は最初にマッチしたものを操作
castIndex について: パーティメンバーの並び順 (主人公 = 0、2 番目 = 1、...)。控えメンバーは対象外。
| CE | 引数 | 戻り値 | 説明 |
|---|---|---|---|
IsEquipped(string) |
"castIdx:skillName" |
1=装備 / 0=未装備 / -1=不明 | 装備状態判定 |
GetCurrentCost(int) |
castIndex | ≥0 (合計コスト) / -1=失敗 | 現在装備中の合計コスト |
GetMaxCost(int) |
castIndex | ≥0 (最大コスト) / -1=失敗 | 装備可能な最大コスト |
GetSkillCount(int) |
castIndex | ≥0 (スキル数) / -1=失敗 | 習得スキル数 |
WriteState(castIndex) を呼ぶと、以下の変数が自動的に書き込まれます。ユーザー側で事前に変数を定義する必要はありません (ランタイム生成、セーブ/ロード保持)。
同名の変数を Bakin エディタの「データベース > 変数ボックス」で事前定義しておくと、通常の Bakin 変数と同じように扱えます:
- 「変数の値で分岐」等のイベントコマンドで変数選択ドロップダウンに出現する
- 他のコモンイベントや条件式から変数名を直接参照できる (プラグインの外でも SS_CurrentCost で装備コストを取得、等)
- レイアウトツールの特殊書式挿入ダイアログの「変数」カテゴリに出現
事前定義しなくてもレイアウトツールでは $[SS_SkillNames][i] の形式で参照可能なので、レイアウトだけで完結するなら定義不要。他イベントから値を参照したい場合は定義しておくと便利です。
レイアウトのテキストで $[SS_HeroName] のように参照できます。
| 変数名 | 型 | 中身 |
|---|---|---|
SS_HeroName |
文字列 | キャスト名 |
SS_HeroLevel |
数値 | 現在レベル |
SS_CurrentCost |
数値 | 現在装備中の合計コスト |
SS_MaxCost |
数値 | 装備可能な最大コスト (#base + #perlevel × Lv、両タグ未設定は 0) |
SS_SkillCount |
数値 | 習得スキル数 |
SS_EquipCount |
数値 | 装備中スキル数 |
レイアウトで $[SS_SkillNames][i] のように参照。i は 0 から SS_SkillCount - 1 まで。
| 変数名 | 型 | 中身 |
|---|---|---|
SS_SkillNames[i] |
文字列配列 | スキル名 |
SS_SkillCosts[i] |
数値配列 | スキルのコスト |
SS_SkillMarks[i] |
文字列配列 | "★" (装備中) / " " (未装備) — テキスト内混合表示用 |
SS_SkillEquipped[i] |
数値配列 | 1=装備中 / 0=非装備 — ★アイコンの表示条件変数用 |
SS_SkillFlags[i] |
数値配列 | 1=有効スロット (未定義 index=0) — サブメニューコンテナの表示条件変数用 |
SS_EquipCount で件数を取得、$[SS_EquipNames][i] で参照。
| 変数名 | 型 | 中身 |
|---|---|---|
SS_EquipNames[i] |
文字列配列 | 装備中スキル名 |
SS_EquipCosts[i] |
数値配列 | 装備中スキルのコスト |
SS_EquipFlags[i] |
数値配列 | 1=装備スロット有効 (未定義=0) — 表示条件変数用 |
| 変数名 | 型 | 用途 |
|---|---|---|
SS_KnownCasts |
文字列 | 一度でも party に現れたキャスト Guid のリスト (カンマ区切り)。未知キャスト初回目撃時の自動 disable 判定に使用 |
装備画面の実装例は末尾の サンプルレイアウトの作成手順 を参照してください。
以下の場合、対象スキルは自動的に非装備 (enabled=false) にされます:
- 未知キャストの初回目撃時: 主人公の新規ゲーム開始、仲間キャストの加入イベント直後 → 全習得スキルを非装備に
- レベルアップで新規スキル習得時: 新しく覚えたスキルのみ非装備に (既存装備は保持)
- 忘却→再習得時: 忘れたスキルを覚え直した場合、非装備状態で復元
ロード時は自動 disable が発火しません (セーブ状態尊重)。
- バトル中の装備切替は非対応 (v0.1)。バトル中にプラグイン CE を呼ばないでください
- 未加入キャストへの操作不可 (パーティ加入後のキャストのみ)
- スキルアイコンの表示: Bakin ネイティブの
\skillimage[n]は主人公固定のため、パーティメンバー個別のスキルアイコン表示は非対応。v0.1 サンプルではテキスト表示のみ - スキル名にコロン
:を含めないこと (CE 引数のパース都合) - 既存セーブ (v0.1 未導入時のセーブ) を初回ロードすると、既存パーティキャストは全て「未知」扱いになるため、初期スキルが自動 disable されます。装備し直しが必要
装備画面 UI の実装例として、「スキル発動者選択 → 装備画面」の 2 段フローを構築する手順です。
📺 動画チュートリアル (準備中): セットアップ手順を分かりやすくまとめた YouTube 横長動画を後日公開予定です。テキストと画像だけでは伝えにくい部分をカバーします。公開されたら本 README にリンクを追記します。
左タブの「レイアウトツール」をクリック。
「ゲーム内演出」>「イベント用フリーレイアウト」を選択し、新規レイアウトを 1 つ作成する。
- 選択結果を代入する変数:
skill_indexを設定 - キャンセルボタンで非表示: ON
- C# スクリプトに
SkillSwitch.csを設定 - C# プログラム呼出コマンドから
SkillSwitch.WriteStateを呼出、引数に Bakin 変数cast_indexを指定 - イベント用フリーレイアウトの表示コマンドを追加、先ほど作成したフリーレイアウトを指定
- 「閉じるまで待つ」にチェックを入れる
- C# スクリプトに
SkillSwitch.csを設定 - C# プログラム呼出コマンドから
SkillSwitch.ToggleAtCurrentを呼出、引数に Bakin 変数skill_indexを指定
-
デフォルトの
SkillUserSelectをコピー&ペースト。「インデックスを 1 から始める」がオンならオフにする -
コピーしたレイアウトを選択、「選択結果を代入する変数」に
cast_indexを設定 -
レイアウトパーツの「スキル発動者選択」のフォルダマークをクリックして中を開く
-
キャスト 1 を選択、アクションに「閉じて共通イベントを呼び出す」・共通イベントに「スキル装備者選択」を設定
-
キャスト 2〜4 も同様に設定
-
レイアウトパーツでメニューコンテナを追加
-
コンテナ設定:
- 選択枠画像 = なし
- 選択用画像 = なし
- 選択カーソルスプライトセット =
DefaultCursor - カーソルオフセット: X=-30, Y=10 程度を推奨
-
メインコンテナのフォルダマークを開き、サブメニューコンテナを追加
- オフセット: X=30, Y=5 程度を推奨
-
サブメニューコンテナのアクションに「共通イベントを呼び出す」・共通イベントに「スキル装備・非装備切替」を設定
-
サブメニューコンテナの表示条件スイッチをクリック → 変数ボックスの条件追加
- 配列変数
SS_SkillFlagsを選択、ポインタを 0 に設定、値が 1 と等しい 条件にする
- 配列変数
-
サブメニューコンテナの配下にテキストを追加:
$[SS_SkillMarks][0] $[SS_SkillNames][0] -
もう 1 つテキストを追加:
$[SS_SkillCosts][0] -
同じ構造のサブコンテナを必要数複製、表示条件のポインタとテキストのインデックスを 1 ずつ増やす (
[0]→[1]→[2]...) -
「すべてのスキル」等のタイトルテキストを追加
-
描画コンテナを追加、画像/アイコンに
DefaultWindow_2を設定 -
その配下にもう 1 つ描画コンテナを作成
- 画像/アイコン = なし
- 「子供のテキストが空の時に非表示」を ON
-
描画コンテナの配下にテキストを追加:
$[SS_EquipNames][0] -
同じ構造を必要数複製、
SS_EquipNamesのインデックスを 1 ずつ加算 -
「装備中のスキル」等のタイトルテキストを追加
-
描画コンテナを追加、画像/アイコンに
DefaultWindow_2を設定 -
描画コンテナ内に以下のテキストを追加:
- キャスト名:
$[SS_HeroName] - レベル:
$[SS_HeroLevel] - 現在の装備コスト:
$[SS_CurrentCost] - 最大コスト:
$[SS_MaxCost]
- キャスト名:
装備画面を開きたいイベントで、「レイアウト画面を表示」コマンドを追加し、「スキル発動者選択」を選び、上記で作成したスキル発動者選択レイアウトを指定する。
商用/非商用問わず報告なしで自由にご利用頂けます。
- X: @rain_bakin
- GitHub: rain-bakin
Bakin プラグインを継続的に作っていく予定です。フォローしてくれると嬉しいです。





















