本文へ移動
cccskills
無料GitHub で公開

battle

対戦中の高速応答モード。calc skillを事前ロードし、ダメ計とメモのラベル付き入力のみを最短で処理する。対戦中・バトル中・実戦中・対戦が始まる等の発話時に使用。

インストール方法を見る

含まれるファイル(1)

  • SKILL.md11.5 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Battle Mode

対戦中にスムーズに応答するためのモード。ダメ計の出力とメモの追記のみを行い、それ以外のテキスト応答は一切返さない。

応答スタイル(最優先・絶対遵守)

このスキルが起動している間、エージェントは以下のみを返す:

  1. ダメ計ラベル入力 → ダメ計結果のテーブル(calc skill Phase 3 と同形式)
  2. メモラベル入力 → 追記行 1 行のみ(例: memo[12:34:56] 追記しました)
  3. 終了ラベル入力 → 終了処理の最終 1 行(保存先パス or 破棄通知)
  4. ラベル無し入力 → 1 行のリマインダ(ラベル(ダメ計:/メモ:/終了)を付けてください)

禁止事項:

  • 「次の指示をください」「他に何かありますか」「了解しました」等の対話継続プロンプト
  • 思考過程・進捗ナレーション・補足解説
  • ダメ計結果以外のチーム分析・戦略提案
  • AskUserQuestion を Phase 1 (バトル中) で発火させること(ポケモン名/技名がユーザー入力から読み取れず計算不可能な場合の最小 1 問のみ例外)

パス定義

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 度だけ通知する。ユーザーが任意のエディタで開いて確認できるようにするため。


Phase 0: 初期化(ユーザー応答なしで連続実行する部分)

0-1: calc skill の事前ロード

ダメ計ロジック(特殊技・特性・持ち物・壁・連続技などの全パターン)をコンテキストに展開しておく。Skill ツールでは起動しない(calc の Phase 1 対話フローへ突入してしまうため)。Read のみで知識をロードする。

Read $REPO_ROOT/.claude/skills/calc/SKILL.md
Read $REPO_ROOT/.claude/skills/calc/references/special_cases.md

0-2: pkdx 動作確認

$PKDX query "ピカチュウ" --format json >/dev/null 2>&1 && echo OK || echo NG

NG の場合は ./setup.sh を実行してください と返してスキル終了。

0-3: メモ・ダメ計ログ初期化

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"

0-4: チーム選択(AskUserQuestion その 1)

#質問headerオプション
1バトルチームを選択しますか?チーム選択はい, いいえ
  • 「いいえ」→ Phase 0-6 へ(TEAM_FILE 空のまま)
  • 「はい」→ Phase 0-5 へ

0-5: チームファイル選択(AskUserQuestion その 2、はい のときのみ)

ls "$REPO_ROOT/box/teams/"*.meta.json 2>/dev/null

得られたファイルパスをオプションに並べる(表示は basename)。最大 5 件、それ以上は「Other」で自由入力させる。

#質問headerオプション
1どのチームを使いますか?チームファイル<basename1>, <basename2>, ..., 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)。

0-6: 起動完了通知(1 ブロック)

以下のフォーマット 1 つだけを返してバトル中ループへ入る。

battle mode ready (memo=/tmp/pkdx_battle_memo_<ts>.md, team=<basename or none>)

これ以降、Phase 1 のラベル入力を待つだけで、こちらから追加の発話はしない。


Phase 1: バトル中ループ(ラベル分岐)

ユーザー入力の冒頭にあるラベルで分岐する。ラベルは以下のどれかにマッチする:

パターン分類
ダメ計: / ダメ計: / ダメ計 始まりダメ計
メモ: / メモ: / メモ 始まりメモ
終了 / 対戦終了 / バトル終了 単独行 or 始まり終了
上記以外ラベル無し

1-A: ダメ計

ラベル後の本文をパースして pkdx damage を 1 発で叩く。AskUserQuestion は使わない(最小 1 問の例外を除く)。

入力例の解釈

  • ダメ計: 自分カバルドン → 相手ガブリアス じしん → カバルドンが攻撃側、ガブリアスが防御側
  • ダメ計: 受け側 マンムー こおりのつぶて → 自分のマンムーが受ける? それとも撃つ? 文脈から判断、不明なら攻撃側として処理し、必要なら 1 行コメントで補足
  • ダメ計: メガリザY ソラビ → カバ → 略称は pkdx query で正式名にせず、まずチームメンバー名・特殊計算パターン名(calc skill の references 参照)と照合して一意に解決

TEAM_FILE が設定されている場合

そのポケモンが 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 から取得)。

TEAM_FILE が空、または相手側が外部ポケモン

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"

1-B: メモ

ラベル後の本文をそのまま $MEMO_FILE に追記する。

{
  echo ""
  echo "[$(date +%H:%M:%S)] <input本文>"
} >> "$MEMO_FILE"

応答は 1 行のみ:

memo[HH:MM:SS] 追記しました

1-C: 終了

Phase 2 へ遷移する。

1-D: ラベル無し

以下 1 行のみ返す:

ラベル(ダメ計:/メモ:/終了)を付けてください

Phase 2: 終了処理

2-1: TEAM_FILE が空の場合

rm -f "$MEMO_FILE" "$DMG_LOG"

返答 1 行:

battle ended (memo discarded)

→ スキル終了。

2-2: TEAM_FILE が設定されている場合

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 ループを継続

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

blog

無料日本語概要

サイト記事・設定のメンテナンス。新規ブログ記事の作成、公開/非公開切替、frontmatter (タイトル・説明文・タグ) 編集、記事削除、記事一覧表示、メンバー画像追加・差し替え、構築記事の本文編集 (構築コンセプト / ダメージ計算 / ポケモンメモ / 選出やりなおし)、サイト設定 (サイト名 / author / enabled) 変更を対話的に行う。最後にユーザー確認のうえ git push でサイトに反映。記事管理・ブログ管理・本文編集・構築コンセプト編集・ダメ計追加削除・ポケモンメモ・選出変更・メンバー画像差し替え・サイト名変更・公開切替・記事削除・記事一覧などの際に使用。

pkdxtools/pkdx542026年9月28日 更新

breed

無料日本語概要

ポケモン育成シミュレーション。性格・特性・持ち物・技・努力値を対話的に設定し、Lv50実数値を算出する。育成したい・実数値計算・努力値配分等の質問時に使用。

pkdxtools/pkdx542026年9月28日 更新

calc

無料日本語概要

ダメージ計算。攻撃側・防御側・技名を指定し、特性・持ち物・天候込みのダメージ乱数表を出力する。ダメージ計算・ダメ計・何発で落ちる等の質問時に使用。

pkdxtools/pkdx542026年9月28日 更新

nash

無料日本語概要

ナッシュ均衡ソルバー。零和対戦 (ポケモン選出、構築マッチアップ、じゃんけん型メタ) の最適混合戦略、選出最適化 (pkdx select)、メタ乖離分析 (pkdx meta-divergence) を提供。「最適選出」「選出分布」「構築メタ」「対面ジャンケン」「使用率 vs 最適」等の質問時に使用。

pkdxtools/pkdx542026年9月28日 更新

self-update

無料日本語概要

pkdxを最新版に更新する。構築・育成データを保護しながらスキルやCLIツールを安全にアップデートする。更新したい・アップデート・最新にしたい時に使用。

pkdxtools/pkdx542026年9月28日 更新

team-builder

無料日本語概要

対戦用ポケモン構築支援(シングル/ダブル対応)。軸ポケモンからタイプ補完・メタ分析・選出パターンまでガイドする。構築したい・パーティを組みたい・チーム作成時に使用。

pkdxtools/pkdx542026年9月28日 更新

pkdxtools のスキルをすべて見る

このスキルの問題を報告する