battle
対戦中の高速応答モード。calc skillを事前ロードし、ダメ計とメモのラベル付き入力のみを最短で処理する。対戦中・バトル中・実戦中・対戦が始まる等の発話時に使用。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
対戦中の高速応答モード。calc skillを事前ロードし、ダメ計とメモのラベル付き入力のみを最短で処理する。対戦中・バトル中・実戦中・対戦が始まる等の発話時に使用。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
ダメージ計算。攻撃側・防御側・技名を指定し、特性・持ち物・天候込みのダメージ乱数表を出力する。ダメージ計算・ダメ計・何発で落ちる等の質問時に使用。
ナッシュ均衡ソルバー。零和対戦 (ポケモン選出、構築マッチアップ、じゃんけん型メタ) の最適混合戦略、選出最適化 (pkdx select)、メタ乖離分析 (pkdx meta-divergence) を提供。「最適選出」「選出分布」「構築メタ」「対面ジャンケン」「使用率 vs 最適」等の質問時に使用。
ポケモン育成シミュレーション。性格・特性・持ち物・技・努力値を対話的に設定し、Lv50実数値を算出する。育成したい・実数値計算・努力値配分等の質問時に使用。
対戦用ポケモン構築支援(シングル/ダブル対応)。軸ポケモンからタイプ補完・メタ分析・選出パターンまでガイドする。構築したい・パーティを組みたい・チーム作成時に使用。
Based on SOC occupation classification
| name | battle |
| description | 対戦中の高速応答モード。calc skillを事前ロードし、ダメ計とメモのラベル付き入力のみを最短で処理する。対戦中・バトル中・実戦中・対戦が始まる等の発話時に使用。 |
| allowed-tools | Bash, Read, Write, AskUserQuestion |
対戦中にスムーズに応答するためのモード。ダメ計の出力とメモの追記のみを行い、それ以外のテキスト応答は一切返さない。
このスキルが起動している間、エージェントは以下のみを返す:
memo[12:34:56] 追記しました)ラベル(ダメ計:/メモ:/終了)を付けてください)禁止事項:
SKILL_DIR=(このSKILL.mdが置かれたディレクトリ)
REPO_ROOT=$SKILL_DIR/../../../.. (.claude/skills/battle/ → repo root)
PKDX=$REPO_ROOT/bin/pkdx
SESSION_TS=$(date +%s)
MEMO_FILE=/tmp/pkdx_battle_memo_${SESSION_TS}.md
TEAM_FILE="" # チーム未選択時は空のまま
DMG_LOG=/tmp/pkdx_battle_dmg_${SESSION_TS}.md # ダメ計結果のセッション内蓄積
MEMO_FILE のパスは Phase 0 完了時にユーザーへ 1 度だけ通知する。ユーザーが任意のエディタで開いて確認できるようにするため。
ダメ計ロジック(特殊技・特性・持ち物・壁・連続技などの全パターン)をコンテキストに展開しておく。Skill ツールでは起動しない(calc の Phase 1 対話フローへ突入してしまうため)。Read のみで知識をロードする。
Read $REPO_ROOT/.claude/skills/calc/SKILL.md
Read $REPO_ROOT/.claude/skills/calc/references/special_cases.md
$PKDX query "ピカチュウ" --format json >/dev/null 2>&1 && echo OK || echo NG
NG の場合は ./setup.sh を実行してください と返してスキル終了。
SESSION_TS=$(date +%s)
MEMO_FILE=/tmp/pkdx_battle_memo_${SESSION_TS}.md
DMG_LOG=/tmp/pkdx_battle_dmg_${SESSION_TS}.md
: > "$MEMO_FILE"
: > "$DMG_LOG"
| # | 質問 | header | オプション |
|---|---|---|---|
| 1 | バトルチームを選択しますか? | チーム選択 | はい, いいえ |
TEAM_FILE 空のまま)ls "$REPO_ROOT/box/teams/"*.meta.json 2>/dev/null
得られたファイルパスをオプションに並べる(表示は basename)。最大 5 件、それ以上は「Other」で自由入力させる。
| # | 質問 | header | オプション |
|---|---|---|---|
| 1 | どのチームを使いますか? | チームファイル | , , ..., Other |
選択結果からフルパスを $TEAM_FILE に保存し、内容を全文 Read する。members[] から各ポケモンの以下を抽出してエージェント側で保持する:
| 保持キー | 用途 |
|---|---|
name | ダメ計の <attacker> / <defender> 引数 |
types[] | タイプ一致判定の事前確認 |
ability | --atk-ability / --def-ability |
item | --atk-item / --def-item |
nature | --atk-nature / --def-nature |
actual_stats.{h,a,b,c,d,s} | --atk-stat / --def-stat / --def-hp (override) |
moves[].name | ダメ計時の技候補。ユーザーが略称で言及してもこのリストから補完 |
base_stats は override の整合確認のために控えるだけで、ダメ計コマンドへは渡さない(actual_stats が SSoT)。
以下のフォーマット 1 つだけを返してバトル中ループへ入る。
battle mode ready (memo=/tmp/pkdx_battle_memo_<ts>.md, team=<basename or none>)
これ以降、Phase 1 のラベル入力を待つだけで、こちらから追加の発話はしない。
ユーザー入力の冒頭にあるラベルで分岐する。ラベルは以下のどれかにマッチする:
| パターン | 分類 |
|---|---|
ダメ計: / ダメ計: / ダメ計 始まり | ダメ計 |
メモ: / メモ: / メモ 始まり | メモ |
終了 / 対戦終了 / バトル終了 単独行 or 始まり | 終了 |
| 上記以外 | ラベル無し |
ラベル後の本文をパースして pkdx damage を 1 発で叩く。AskUserQuestion は使わない(最小 1 問の例外を除く)。
ダメ計: 自分カバルドン → 相手ガブリアス じしん → カバルドンが攻撃側、ガブリアスが防御側ダメ計: 受け側 マンムー こおりのつぶて → 自分のマンムーが受ける? それとも撃つ? 文脈から判断、不明なら攻撃側として処理し、必要なら 1 行コメントで補足ダメ計: メガリザY ソラビ → カバ → 略称は pkdx query で正式名にせず、まずチームメンバー名・特殊計算パターン名(calc skill の references 参照)と照合して一意に解決そのポケモンが members[] に含まれていれば、保持中の ability / item / nature / actual_stats を 黙って自動展開する:
$PKDX damage "<atk>" "<def>" "<move>" \
--atk-ability "<members[atk].ability>" \
--atk-item "<members[atk].item>" \
--atk-nature "<members[atk].nature>" \
--atk-stat "<members[atk].actual_stats.a or .c>" \
--def-ability "<members[def].ability>" \
--def-item "<members[def].item>" \
--def-nature "<members[def].nature>" \
--def-stat "<members[def].actual_stats.b or .d>" \
--def-hp "<members[def].actual_stats.h>" \
--version champions \
--format json
物理/特殊判定は技の category から決定(チームの members[i].moves[] または pkdx moves から取得)。
pkdx damage は最低限の引数(attacker/defender/move)のみで叩き、デフォルト計算(A/C 特化、HP 最大投資、性格補正↑)に乗せる。ユーザーが ダメ計: 本文で 特性=ちからもち や 持ち物=こだわりハチマキ のように書いていればそれだけ反映する。
calc skill Phase 3 のテーブルと同じ。ただし「条件」ブロックは攻撃側名/防御側名/技名/min-max/確定数の 1 行サマリに圧縮し、修飾子の表は省略可(バトル中の視認性優先)。例:
ガブリアス じしん → カバルドン (B176)
最低 38.6% 〜 最高 45.6% / 確定3発
[85] 38.6 [86] 39.5 [87] 40.0 [88] 40.9 ... [100] 45.6
ユーザーが詳細表を要求した場合(例: 本文に 詳細 を含む)のみフルテーブルを返す。
毎回 $DMG_LOG に append する(Phase 2 の保存に使う)。
{
echo ""
echo "### [$(date +%H:%M:%S)] <atk> <move> → <def>"
echo "<min%>〜<max%> / <確定数>"
echo '```json'
echo "<pkdx damage --format json の出力>"
echo '```'
} >> "$DMG_LOG"
ラベル後の本文をそのまま $MEMO_FILE に追記する。
{
echo ""
echo "[$(date +%H:%M:%S)] <input本文>"
} >> "$MEMO_FILE"
応答は 1 行のみ:
memo[HH:MM:SS] 追記しました
Phase 2 へ遷移する。
以下 1 行のみ返す:
ラベル(ダメ計:/メモ:/終了)を付けてください
rm -f "$MEMO_FILE" "$DMG_LOG"
返答 1 行:
battle ended (memo discarded)
→ スキル終了。
AskUserQuestion 1 問:
| # | 質問 | header | オプション |
|---|---|---|---|
| 1 | 対戦ログをチームへ紐付けて保存しますか? | ログ保存 | はい, いいえ |
「いいえ」→
rm -f "$MEMO_FILE" "$DMG_LOG"
返答:
battle ended (memo discarded)
「はい」→ ログ書き出し:
SLUG=$(basename "$TEAM_FILE" .meta.json)
LOG_PATH="$REPO_ROOT/box/teams/${SLUG}-battle-log-$(date +%Y-%m-%d-%H%M%S).md"
{
echo "# 対戦ログ - ${SLUG}"
echo ""
echo "- 日時: $(date '+%Y-%m-%d %H:%M:%S')"
echo "- チーム: ${SLUG}"
echo ""
echo "## メモ"
cat "$MEMO_FILE"
echo ""
echo "## ダメ計記録"
cat "$DMG_LOG"
} > "$LOG_PATH"
rm -f "$MEMO_FILE" "$DMG_LOG"
返答 1 行:
battle log saved: <LOG_PATH>
→ スキル終了。
| 状況 | 対応 |
|---|---|
pkdx damage が Error: で始まる出力を返した | エラーメッセージを 1 行で返す。再質問はしない(ユーザーが入力を直して再投入する) |
Error: Pokemon not found: <name> (攻撃側 or 防御側) | 1 行でそのまま返す。version 切替提案や代替候補列挙はしない(バトル中の高速応答を最優先するため)。ユーザーは正しい名前 / フォーム名で再投入する |
| 外部ポケモンへのダメ計 (TEAM_FILE 空 or 防御側が members[] 外) | --def-hp / --def-stat 等の override は 省略し、pkdx の default 計算 (HP 最大投資 + 性格補正なし) に乗せる。ユーザーが本文中で明示した修飾子 (特性=..., 持ち物=...) のみ反映する |
box/teams/*.meta.json が 0 件で「はい」が選ばれた | 1 行で box/teams/ にメタデータ無し、チーム未選択モードで起動 と返して TEAM_FILE 空のまま続行 |
| メモ/ログのファイル書き込み失敗 | 1 行でエラー通知。スキルは終了せず Phase 1 ループを継続 |