File size: 6,011 Bytes
3f8e91d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# ClashCR Rewrite Plan

## 1. Research Summary

### Evaluated Projects
| Project | URL | Credibility | Visual Mode | Approach | Gaps |
|---------|-----|-------------|-------------|----------|------|
| KataCR | https://github.com/wty-yy/katacr | β˜…β˜…β˜…β˜…β˜… Academic paper | Live + Replay | YOLO unit detection + ResNet hand classifier + RL policy | Does NOT track opponent cards; focuses on self-play AI. Dataset stale (May 2024). |
| CR Vision | https://github.com/bytkim/cr_vision | β˜…β˜…β˜…β˜…β˜† Active 2026 | Live (BlueStacks) | YOLO troop detection + grid tracker + wall-clock elixir + cycle inference | Correct architecture for opponent tracking. Missing evolutions/heroes/spell detection. ~60 cards in cost table. |
| TV Royale Dataset | https://huggingface.co/datasets/chrisrca/clash-royale-tv-replays | β˜…β˜…β˜…β˜†β˜† | Replay/TV | Frame-level card crops with x,y positions | Not usable for live opponent tracking; no opponent hand info. |
| RoyaleAPI cr-api-data | https://royaleapi.github.io/cr-api-data/json/cards.json | β˜…β˜…β˜…β˜†β˜† | Static data | 120 cards as of snapshot | Stale: missing 2025-2026 cards (Vines, Spirit Empress, Hero cards, etc.). |
| Official Clash Royale API | https://developer.clashroyale.com/ | β˜…β˜…β˜…β˜…β˜… | Official | /v1/cards endpoint | Requires API token; best source of truth. |

### Why Current Whole-Frame Classifier Fails
- **Opponent card art is never visible in live gameplay.** Only own hand cards are shown.
- A whole-frame classifier trained on card images will hallucinate predictions when shown combat frames.
- The correct signal is **unit spawns and spell effects on the arena**, not card art.
- KataCR paper explicitly splits perception into: arena (YOLO units), hand cards (classifier), time/elixir (OCR). Opponent cards are inferred from arena detections, never classified directly.

## 2. Recommended Architecture

```
Emulator Capture (Win32 / mss)
    |
    v
Battle Gater (lobby vs battle detection, ROI computation)
    |
    v
Event Detector (temporal differencing, persistence suppression, side separation)
    |
    v
Evidence Model (YOLO unit detector + heuristic spell effect detectors)
    |
    v
Card Resolver (unit->card mapping, multi-unit rules, evolution/hero handling, ambiguity->UNKNOWN)
    |
    v
Elixir Tracker (wall-clock regen with mode schedule)
Deck Tracker (cycle inference, meta priors)
```

## 3. Concrete Rewrite Plan for F:\ClashCR

1. **Delete** old whole-frame card classifier code and stale card JSON dumps.
2. **Add** `clashcr/utils/card_registry.py` with sync from RoyaleAPI + Official API.
3. **Add** `clashcr/core/capture.py` for MuMu/BlueStacks window capture.
4. **Add** `clashcr/core/battle_gating.py` for battle detection and ROI separation.
5. **Add** `clashcr/core/event_detector.py` for temporal event detection.
6. **Add** `clashcr/core/recorder.py` for evidence recording and labeling.
7. **Add** `clashcr/models/evidence_model.py` for YOLO + spell heuristics.
8. **Add** `clashcr/models/card_resolver.py` for unit->card mapping with ambiguity handling.
9. **Add** `clashcr/game/elixir_tracker.py` for elixir estimation.
10. **Add** `clashcr/game/deck_tracker.py` for deck/cycle inference.
11. **Add** `clashcr/core/evaluator.py` for offline metrics.
12. **Add** `clashcr/cli.py` for all CLI commands.

## 4. Card Registry Sync
- Primary: RoyaleAPI static JSON (fallback)
- Secondary: Official API `/v1/cards` (requires token)
- Logs: source URL, sync timestamp, card count, IDs, costs, types, rarities, evolution/hero/tower-troop flags.
- Fails loudly if registry is stale or missing expected new cards.

## 5. Dataset Collection and Labeling Plan
- `clashcr record-battle --output data/live-recordings/session-001 --seconds 180 --fps 8`
- Saves frames, metadata.jsonl, and creates empty labels.csv / predictions.csv.
- User manually labels opponent card plays in labels.csv.
- Required validation set:
  - >= 20 full battles
  - Multiple arenas/maps
  - Multiple resolutions
  - Single/double/triple elixir periods
  - All card categories (troops, spells, buildings, champions, evolutions, heroes, tower troops)
  - Negative recordings (lobby/menu, quiet battle periods)

## 6. Training Plan
- **Unit detector**: Fine-tune YOLOv8 on KataCR detection dataset + custom labeled spawns.
- **Spell effects**: Heuristic color/motion detectors (no training required for MVP).
- **Future**: Train a lightweight spell-effect classifier on recorded spell crops.

## 7. CLI Commands
```bash
# Setup
pip install -e .
clashcr sync-cards --config config.yaml

# Recording
clashcr record-battle --config config.yaml --output data/live-recordings/session-001 --seconds 180 --fps 8

# Labeling
clashcr label-recording --recording data/live-recordings/session-001
# (Then edit labels.csv manually or with a GUI tool)

# Training (placeholder)
clashcr train-event-model --config config.yaml --data data/live-recordings

# Evaluation
clashcr evaluate-recording --config config.yaml --recording data/live-recordings/session-heldout --labels data/live-recordings/session-heldout/labels.csv

# Live run
clashcr run --config config.yaml --raw --debug-frame debug-frame.jpg --debug-dir debug-events
```

## 8. Debug Checklist for Live Failures
- [ ] Emulator window detected? Run `python -m clashcr.core.capture` to list windows.
- [ ] Battle detected? Check battle confidence in logs.
- [ ] Events firing? Check debug-events/ directory for crops.
- [ ] YOLO model loaded? Verify path in config.yaml.
- [ ] Side attribution correct? Check opponent ROI vs own ROI.
- [ ] Elixir tracking reasonable? Compare to wall-clock regen.
- [ ] False positives? Increase `min_event_area` or `temporal_confirmation`.
- [ ] Missed spells? Verify spell heuristics or add new color ranges.

## 9. Verification Report Requirements
- Run evaluation on held-out labeled recordings.
- Report: precision, recall, F1, FP/min, missed events, mean timing error.
- If 100% not achievable, state plainly and identify missing visual signal.