← ドキュメント一覧
バトルシステムガイド
kaedevn には、ノベル作品に RPG 風のバトルを組み込めるターン制コマンドバトルシステムが搭載されています。外部依存ゼロの独立パッケージとして実装されており、シード付き乱数による決定論的な結果再現が可能です。
概要
ターン制のコマンドバトルで、プレイヤーは毎ターン行動(攻撃・スキル・回復など)を選択して敵と戦います。物語の中にバトルイベントを自然に挿入でき、勝敗によってシナリオを分岐させることも可能です。
バトルの構成要素
アクター(味方キャラクター)
- HP
number— 体力。0になると戦闘不能 - MP
number— スキル使用に消費するポイント - ATK
number— 攻撃力(ダメージ計算に使用) - DEF
number— 防御力(被ダメージ軽減) - SPD
number— 行動順に影響する素早さ
エネミー(敵キャラクター)
味方と同じパラメータを持ちます。敵の行動は内蔵 AI(simpleAi)が自動で選択します。
スキルシステム
- 攻撃スキル — ダメージを与える。パラメータ: power(威力)、MP コスト
- 回復スキル — HP を回復する。パラメータ: power(回復量)、MP コスト
- バフ / デバフ — ステータスを増減する。パラメータ: 対象ステータス、持続ターン
- 状態異常スキル — 毒・麻痺・スタンなどを付与する。パラメータ: 付与確率、持続ターン
ダメージ計算
ダメージは以下の要素で計算されます:
- 攻撃者の ATK
- 防御者の DEF
- スキルの power(威力倍率)
- 命中判定(
checkHit)
状態異常
- 毒(poison) — 毎ターン HP が減少。持続: 数ターン(duration で指定)
- 麻痺(paralyze) — 一定確率で行動不能。持続: 数ターン
- スタン(stun) — 1ターン行動不能。持続: 1ターン
シナリオへの組み込み
ブロック編集
エディタで「battle」ブロックを追加し、以下を設定するだけです:
- バトル ID
- 勝利時のジャンプ先ページ
- 敗北時のジャンプ先ページ
KSC での記述例
// バトルを開始し、勝敗でジャンプ先を分岐
battle("boss_battle_01", "victory_scene", "defeat_scene")
*victory_scene
#hero
「やった、勝ったぞ!」
#
*defeat_scene
#hero
「くっ...やられた...」
#
battle() コマンドは3つの引数を取ります:
- バトルID: 敵構成などの定義を参照する ID
- 勝利時ジャンプ先: 勝ったときに移動するラベル
- 敗北時ジャンプ先: 負けたときに移動するラベル
KS での記述例
@battle id="boss_battle_01" win="victory_scene" lose="defeat_scene"
バトルの流れ
- バトル開始 → バトル画面に切り替わる
- プレイヤーが味方キャラクターの行動を選択
- 素早さ(SPD)順に全キャラクターが行動を実行
- ターン終了 → 状態異常の処理(毒ダメージ、麻痺解除判定など)
- 勝利条件(敵全滅)または敗北条件(味方全滅)を判定
- 結果に応じたラベルへジャンプし、シナリオに復帰
バトルのシミュレーション
バトルエンジンには simulate() 関数が用意されており、バトル全体を一気にシミュレーションすることもできます。シード付き乱数を使用しているため、同じ入力に対しては常に同じ結果が再現されます。
主要な関数:
simulate(state, actions)— バトル全体のシミュレーションapplyAction(state, action)— 1アクションの適用calcDamage(attacker, defender, skill)— ダメージ計算checkHit(attacker, defender)— 命中判定checkVictory(state)— 勝敗判定(win / lose / escape / ongoing)simpleAi(enemies, actors)— 敵 AI の行動選択
マルチプラットフォーム対応
バトルパッケージは外部依存ゼロで、純粋な TypeScript ロジックのみで構成されています。Web(packages/web)でバトルシーンの描画に使用されるほか、ネイティブエンジンへの移植も容易です。
注意事項
- バトルシステムは現在開発中の機能であり、今後パラメータやスキルの拡張が予定されています
- バトルデータ(敵構成・スキル定義)の設定方法は今後のアップデートで改善されます
- バトルログの記録機能が搭載されており、デバッグや演出の微調整に活用できます
関連ドキュメント
- ブロック型リファレンス — Battle ブロックのプロパティ一覧
- KSC スクリプト仕様書 — battle() コマンドの記述方法
- エディタ完全ガイド — エディタの全機能と基本操作
Ad: inContent (336x280)
Ad: stickyBottom (728x90)