ワンクリックで
battle
対戦中の高速応答モード。calc skillを事前ロードし、ダメ計とメモのラベル付き入力のみを最短で処理する。対戦中・バトル中・実戦中・対戦が始まる等の発話時に使用。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
対戦中の高速応答モード。calc skillを事前ロードし、ダメ計とメモのラベル付き入力のみを最短で処理する。対戦中・バトル中・実戦中・対戦が始まる等の発話時に使用。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
ナッシュ均衡ソルバー。零和対戦 (ポケモン選出、構築マッチアップ、じゃんけん型メタ) の最適混合戦略、選出最適化 (pkdx select)、メタ乖離分析 (pkdx meta-divergence) を提供。「最適選出」「選出分布」「構築メタ」「対面ジャンケン」「使用率 vs 最適」等の質問時に使用。
ダメージ計算。攻撃側・防御側・技名を指定し、特性・持ち物・天候込みのダメージ乱数表を出力する。ダメージ計算・ダメ計・何発で落ちる等の質問時に使用。
ポケモン育成シミュレーション。性格・特性・持ち物・技・努力値を対話的に設定し、Lv50実数値を算出する。育成したい・実数値計算・努力値配分等の質問時に使用。
対戦用ポケモン構築支援(シングル/ダブル対応)。軸ポケモンからタイプ補完・メタ分析・選出パターンまでガイドする。構築したい・パーティを組みたい・チーム作成時に使用。
pkdxを最新版に更新する。構築・育成データを保護しながらスキルやCLIツールを安全にアップデートする。更新したい・アップデート・最新にしたい時に使用。
サイト記事・設定のメンテナンス。新規ブログ記事の作成、公開/非公開切替、frontmatter (タイトル・説明文・タグ) 編集、記事削除、記事一覧表示、メンバー画像追加・差し替え、構築記事の本文編集 (構築コンセプト / ダメージ計算 / ポケモンメモ / 選出やりなおし)、サイト設定 (サイト名 / author / enabled) 変更を対話的に行う。最後にユーザー確認のうえ git push でサイトに反映。記事管理・ブログ管理・本文編集・構築コンセプト編集・ダメ計追加削除・ポケモンメモ・選出変更・メンバー画像差し替え・サイト名変更・公開切替・記事削除・記事一覧などの際に使用。
| 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
ユーザーが詳細表を要求した場合(例: 本文に 詳細 を含む)のみフルテーブルを返す。
タイプ相性の出力規律 (CRITICAL — Stop hook type-claim-guard がブロックする): ダメ計サマリにタイプ相性倍率を添える場合は 必ず pkdx type-chart <技タイプ> <防御タイプ(,区切り)> の実出力をそのまま転記する。記憶・暗算で倍率を書かない。type-chart は複合済みの最終倍率を返すので、個別タイプに分解した相性説明(「鋼に4倍だが…」等)や有利不利の評価を散文で書いてはならない。pkdx damage の数値以外の主観的フィードバックは battle モードでは一切返さない。
毎回 $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 ループを継続 |