rabukasim / docs /spec /ability_patterns.md
trioskosmos's picture
Upload folder using huggingface_hub
463f868 verified
# Ability Pattern Catalog (from 50-card Manual Review)
## Pattern Groups Identified
### 1. **Recovery from Discard** (10+ cards)
**Pattern**: "控え室から○○を手札に加える"
**Examples**:
- Card #1 (高坂 穂乃果): "控え室からライブカードを1枚手札に加える"
- Card #2 (絢瀬 絵里): "控え室からメンバーカードを1枚手札に加える"
- Card #10 (絢瀬絵里): "控え室から『μ's』のライブカードを1枚手札に加える"
- Card #15 (星空 凛): "控え室からコスト2以下のメンバーカードを1枚手札に加える"
- Card #42 (高海千歌): "控え室からライブカードを1枚手札に加える"
**Implementation Needed**:
- `RECOVER_MEMBER` - with cost filter
- `RECOVER_LIVE` - basic
- `GROUP_FILTER` - for group-specific recovery (e.g., "『μ's』のライブカード")
- `COST_FILTER` - for cost restrictions (e.g., "コスト2以下")
---
### 2. **Opponent Interaction** (12+ cards)
**Pattern**: "相手の○○" / "対戦相手"
#### 2a. Tap/Wait Opponent Members
- Card #17 (東條 希): "相手のステージにいるコスト4以下のメンバー1人をウェイトにする"
- Card #5, #6, #8 (Multiple): "相手のステージにいるすべてのコスト2以下のメンバーをウェイトにする"
**Implementation**: `TAP_OPPONENT` with target selection and cost filtering
#### 2b. Opponent Choice/Interaction
- Card #38 (鬼塚冬毬): "相手はそれらのカードのうち1枚を選ぶ"
- Card #44 (桜内梨子): "相手は手札からライブカードを1枚控え室に置いてもよい"
- Card #48 (津島善子): "相手は手札を1枚控え室に置いてもよい"
**Implementation**: New choice type `OPPONENT_CHOICE` with optional/mandatory flags
#### 2c. Opponent State Checks
- Card #46 (渡辺 曜): "相手のエネルギーが自分より多い場合"
- Card #42 (高海千歌): "相手の手札の枚数が自分より2枚以上多い場合"
- Card #32 (高海千歌): "相手の成功ライブカード置き場にカードが1枚以上ある場合"
**Implementation**: New conditions `OPPONENT_ENERGY`, `OPPONENT_HAND_COUNT`, `OPPONENT_SUCCESS_COUNT`
---
### 3. **Position Manipulation** (6+ cards)
**Pattern**: "ポジションチェンジ" / "エリアに移動"
- Card #14 (星空 凛): "このメンバーはセンターエリア以外にポジションチェンジする"
- Card #27/28 (嵐 千砂都): "センターエリアのメンバーを左サイドエリアに..." (全体回転)
- Card #29/30 (桜小路きな子): "このメンバーが登場か、エリアを移動するたび" (trigger on move)
**Implementation**:
- `FORMATION_CHANGE` - bulk repositioning
- `MOVE_MEMBER` - self-move
- New trigger: `ON_POSITION_CHANGE` for Card #29
---
### 4. **Conditional Buffs/Effects** (15+ cards)
**Pattern**: "○○の場合、~"
#### 4a. Success Pile Conditions
- Card #1: "成功ライブカード置き場にカードが2枚以上ある場合"
- Card #10: "成功ライブカード置き場にあるカードのスコアの合計が6以上の場合"
- Card #32: "成功ライブカード置き場のカードが0枚で、かつ相手の成功ライブカード置き場にカードが1枚以上ある場合"
**Implementation**: `COUNT_SUCCESS_PILE`, `SCORE_TOTAL_CHECK`
#### 4b. Group/Name Filters
- Card #8: "ステージと控え室に名前の異なる『Liella!』のメンバーが5人以上いる場合"
- Card #27: "ステージにいるメンバーが『5yncri5e!』のみの場合"
- Card #63: "ステージに『蓮ノ空』のメンバーがいる場合"
**Implementation**: Enhanced `GROUP_FILTER` with "only" logic and location checks
#### 4c. Live Card Conditions
- Card #10: "ライブ中のライブカードに、{{live_start}}能力も{{live_success}}能力も持たないカードがあるかぎり"
**Implementation**: `LIVE_CARD_CHECK` for ability presence
#### 4d. Member Cost Checks
- Card #14: "ステージに{{blade}}を5つ以上持つ『μ's』のメンバーがいない場合"
- Card #20-22: "自分か相手のステージにコスト13以上のメンバーがいる場合"
**Implementation**: `HAS_MEMBER_WITH_STAT` condition
---
### 5. **Unique/Special Mechanics** (8+ cards)
#### 5a. Flavor/Interactive
- Card #23 (愛♡スクリーム!): "相手に何が好き?と聞く" → 複数分岐
**Implementation**: Already done (`FLAVOR_ACTION`)
#### 5b. Reveal/Public Information
- Card #48: "手札のライブカードを1枚公開する"
- Card #50: "そのプレイヤーのデッキの上からカードを2枚見る"
**Implementation**: `REVEAL_CARDS` + player targeting
#### 5c. Dynamic Requirements
- Card #8: "このカードを使用するためのコストは..." (変更)
- Card #4: "必要ハートは○○少なくなる/多くなる"
**Implementation**: `REDUCE_COST`, `MODIFY_HEARTS_REQUIRED`
#### 5d. Yell Manipulation
- Card #5 (VIVID WORLD): "エールによって公開される自分のカードが持つ[桃ブレード]、[赤ブレード]...は、すべて[青ブレード]になる"
- Card #34-37 (ウィーン): "エールによって公開される自分のカードの枚数が8枚減る"
**Implementation**: `TRANSFORM_COLOR`, `MODIFY_YELL_COUNT`
#### 5e. Score Manipulation
- Card #24 (Poppin' Up!): "ライブの合計スコアが相手より高い場合"
- Card #40/41: "カードのスコアを+1する"
**Implementation**: `BOOST_SCORE` (exists), `COMPARE_SCORE` condition
---
## Implementation Priority
### Phase 2A: Recovery (HIGH - affects ~200 cards)
1. ✅ Basic `RECOVER_LIVE`
2. ✅ Basic `RECOVER_MEMBER`
3. 🆕 `COST_FILTER` condition
4. 🆕 `SELECT_FROM_DISCARD` choice handler
### Phase 2B: Opponent Interaction (MEDIUM-HIGH - ~150 cards)
1. 🆕 `TAP_OPPONENT` with cost filtering
2. 🆕 `OPPONENT_CHOICE` (May/Must structure)
3. 🆕 Opponent state conditions
### Phase 2C: Conditional Logic (HIGH - ~180 cards)
1. 🆕 `COUNT_SUCCESS_PILE`
2. 🆕 `SCORE_TOTAL_CHECK`
3. 🆕 Enhanced `GROUP_FILTER` (only, multi-location)
4. 🆕 `HAS_MEMBER_WITH_STAT`
### Phase 2D: Position/Movement (MEDIUM - ~80 cards)
1.`MOVE_MEMBER` (basic exists)
2. 🆕 `FORMATION_CHANGE`
3. 🆕 `ON_POSITION_CHANGE` trigger
### Phase 3: Unique Mechanics (LOW-MEDIUM - edge cases)
1. 🆕 `REVEAL_CARDS`
2. 🆕 `TRANSFORM_COLOR`
3. 🆕 `MODIFY_YELL_COUNT`
4. 🆕 `MODIFY_HEARTS_REQUIRED`
## Next Steps
Start with **Phase 2A** (Recovery) as it has the highest card coverage and builds naturally on Phase 1 work.