web-card-gamelisted
Install: claude install-skill mars-tw/web-card-game-skill
# Web Card Game Skill
## 使用情境
在修改 `skill` repo 時,請把它視為一個無後端的卡牌遊戲套件,而不是單一對戰頁。卡牌資料、開包、牌組、任務與對戰都會互相讀寫 localStorage。
## 重要檔案
| 檔案 | 責任 |
|---|---|
| `templates/card-battle/cards.js` | 卡牌母表、稀有度權重、閃卡、關鍵字與抽卡 |
| `templates/card-battle/core.js` | 純規則與存檔遷移:對戰、任務、里程碑、週任務、牌組驗證 |
| `templates/card-battle/battle.js` | 對戰 UI、AI、卡牌詳情、每日任務 |
| `templates/card-pack/pack.js` | 開卡包、收藏、分解、牌組工作台、模板與週任務 |
| `references/data-model.md` | storage key、schema 與數值契約 |
## 現況契約
- `CARD_POOL` 目前 92 張;`cards.js` 是唯一卡牌事實來源。稀有度分布為普通 25、稀有 24、史詩 23、傳說 20。
- 五個陣營為白潮守軍、奧術結社、荒野獸群、凜冬暗影與潮間中立。
- 稀有度權重為 common 62、rare 26、epic 10、legendary 2;閃卡機率 8%。
- 卡包每包 5 張,首包免費,之後 100 金幣;稀有以上 20 包保底,角色傳說另有 35 包保底。
- R60–R61「對座六影」包含六張具名角色傳說;角色子池偏向 28%,角色立繪在戰場、開包與收藏共用。
- `cardpack_collection_v2` 使用 `{ [cardId]: count, [cardId + "#foil"]: count }`。
- `card_deck_v1` 只保存 `{ version, cards: [id] }`;實際進對戰前會以收藏驗證。
- 牌組必須 20 張,同名最多 2 張,傳說最多 1 張。
- `card_quests_v1` 是每日任務,依 `YYYY-MM-DD` 從 8 個任務抽 3 個。
- `card_goals_v1` 是收藏目標,保存已領里程碑與每週任務;週種子格式為 `YYYY-Www`。
## 修改原則
- 新增卡牌時,同步補 `image` 或接受 emoji fallback,並確認 `keywords` / `trigger` / `effect` 能被 `core.js` 與 `battle.js` 解讀。
- 新增關鍵字時,需補 `KEYWORDS` 說明、對戰規則、卡牌詳情文案與測試。
- 新增任務或週任務時,需確保 `questEventMatches()` 有事件對應,且 battle/pack 會送出進度事件。
- 牌組工作台不可繞過 `Core.validateDeck()`;模板也必須產生合法 20 張牌組。
- 儲存格式變動時,要保留遷移與舊資料容錯。
## 驗證
```bash
npm test
npm run test:e2e
```
文件-only 修改通常只需 `npm test`;若改卡牌資料、任務事件、牌組驗證或 UI,需加跑 E2E。