# Mantimon TCG - Project Plan

A home-rule-modified Pokemon Trading Card Game implementation as a web application, inspired by the Gameboy Color game *Pokemon Trading Card Game*. Players progress through a single-player RPG campaign, building their collection and challenging NPCs to become the champion, with optional multiplayer battles.

## Project Overview

| Attribute | Value |
|-----------|-------|
| **Project Name** | Mantimon TCG (placeholder) |
| **Frontend** | Vue 3 + Phaser 3 (hybrid architecture) |
| **Backend** | FastAPI + PostgreSQL + Socket.io |
| **Target Audience** | 10-100 concurrent users |
| **Timeline** | Hobby project, no deadline |
| **Card Acquisition** | Packs (gacha) + direct crafting |
| **AI Opponents** | NPC duelists with personalities and themed decks |
| **Rule Basis** | Custom hybrid (modified energy, deck building, win conditions) |
| **Inspiration** | Pokemon TCG (Gameboy Color, 1998) |

## Core Gameplay Loop

The primary gameplay experience is a **single-player RPG campaign** inspired by the GBC Pokemon TCG game:

```
┌─────────────────────────────────────────────────────────────────────┐
│                        CAMPAIGN PROGRESSION                          │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│   [Start] ──► Challenge NPCs ──► Win Matches ──► Earn Rewards       │
│                     │                                │               │
│                     ▼                                ▼               │
│              Build Collection ◄────────────── Open Packs            │
│                     │                                                │
│                     ▼                                                │
│              Improve Decks ──► Challenge Stronger NPCs              │
│                     │                                                │
│                     ▼                                                │
│              Defeat Club Leaders ──► Earn Medals                    │
│                     │                                                │
│                     ▼                                                │
│              Challenge Grand Masters ──► Become Champion            │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘
```

### Campaign Structure

| Element | Description |
|---------|-------------|
| **Clubs** | Themed locations (Fire Club, Water Club, etc.) with multiple NPCs |
| **Club Members** | Regular NPCs with themed decks, varying difficulty |
| **Club Leaders** | Boss battles that award medals upon defeat |
| **Grand Masters** | End-game opponents, must collect all medals to challenge |
| **Champion** | Final boss, winning grants champion title |

### Progression Systems

| System | Description |
|--------|-------------|
| **Medals** | Earned by defeating Club Leaders, required to face Grand Masters |
| **Packs** | Earned from victories, contain new cards for collection |
| **Deck Building** | Improve decks as collection grows |
| **NPC Difficulty** | Scales based on story progression |

### Multiplayer (Secondary)

While the campaign is the core experience, players can also:
- Challenge other players to PvP matches
- Trade cards (if implemented)
- Compare collections and rankings

## Goals

1. **Engaging Campaign**: RPG-style progression with memorable NPC opponents
2. **Faithful TCG Experience**: Card-based gameplay with strategic depth
3. **Visual Polish**: Animated card interactions, shuffle effects, pack opening experience
4. **Flexible Rules Engine**: Support home-rule modifications without code changes
5. **Collection System**: Pack opening, crafting, deck building
6. **Optional Multiplayer**: PvP for players who want competitive play

---

## High-Level Architecture

```
+----------------------------------------------------------------------+
|                           Vue 3 / Nuxt App                           |
+----------------------------------------------------------------------+
|  Pages (Vue/DOM-based)           |  Game View (Phaser Canvas)        |
|  +----------------------------+  |  +----------------------------+   |
|  | - Login/Register           |  |  | - Card rendering           |   |
|  | - World Map / Club Select  |  |  | - Hand management          |   |
|  | - NPC Dialog / Challenge   |  |  | - Board zones (bench/active)|  |
|  | - Collection browser       |  |  | - Drag-and-drop play       |   |
|  | - Deck builder             |  |  | - Attack animations        |   |
|  | - Pack opening (Phaser)    |  |  | - Shuffle/draw animations  |   |
|  | - Profile/stats/medals     |  |  | - Damage counters          |   |
|  +----------------------------+  |  +----------------------------+   |
+----------------------------------------------------------------------+
|                         Pinia State Management                        |
|  - auth store, collection store, deck store, game store              |
+----------------------------------------------------------------------+
|                     Socket.io Client + REST API                       |
+----------------------------------------------------------------------+
                                   |
                            WebSocket + HTTP
                                   |
+----------------------------------------------------------------------+
|                      FastAPI Backend                                  |
+----------------------------------------------------------------------+
|  REST Endpoints            |  WebSocket Handlers                      |
|  - /auth/*                 |  - game:action (play card, attack, etc) |
|  - /cards/* (card data)    |  - game:state (sync)                    |
|  - /collection/*           |  - matchmaking:*                        |
|  - /decks/*                |  - lobby:*                              |
|  - /packs/* (open packs)   |                                         |
|  - /puzzles/*              |                                         |
+----------------------------------------------------------------------+
|                         Core Game Engine                              |
|  +----------------------------------------------------------------+  |
|  | - Turn state machine (Draw -> Main -> Attack -> End)           |  |
|  | - Card effect resolver                                         |  |
|  | - Rule validator (home rules configuration)                    |  |
|  | - Win condition checker                                        |  |
|  | - AI decision engine (Easy/Medium/Hard)                        |  |
|  | - Puzzle scenario loader                                       |  |
|  +----------------------------------------------------------------+  |
+----------------------------------------------------------------------+
|  PostgreSQL                |  Redis                                   |
|  - Users/auth              |  - Active game state                     |
|  - Card definitions        |  - Session cache                         |
|  - Collections             |  - Matchmaking queue                     |
|  - Decks                   |                                          |
|  - Match history           |                                          |
|  - Campaign progress       |                                          |
|  - NPC/Club definitions    |                                          |
+----------------------------------------------------------------------+
```

---

## Development Phases

### Phase 1: Foundation (Core Gameplay)

**Goal**: Get a single match working end-to-end.

| Task | Description |
|------|-------------|
| Card data model | Define schema for cards (attacks, HP, type, energy costs, effects) |
| Game state model | Zones: deck, hand, active, bench, prizes, discard |
| Turn state machine | Draw -> Attach energy -> Play cards -> Attack -> End |
| Basic rule engine | Energy attachment, retreat, attack resolution, knockouts |
| Phaser game scene | Render board, cards in hand, drag-to-play |
| Local 2-player | Hot-seat mode for testing |

**Milestone**: Two humans can play a basic match with a small card set (10-20 cards)

---

### Phase 2: Multiplayer Infrastructure

**Goal**: Connect two remote players.

| Task | Description |
|------|-------------|
| WebSocket game sync | Server-authoritative state, hidden info filtering |
| Matchmaking (basic) | Queue system, pair two players |
| Turn timer | Optional time limits per turn |
| Reconnection | Rejoin in-progress games |
| Lobby UI | See available matches, challenge friends |

**Milestone**: Two players can match online and complete a game

---

### Phase 3: Collection & Deck Building

**Goal**: Enable the constructed format.

| Task | Description |
|------|-------------|
| User collection model | Track which cards each user owns (with quantities) |
| Deck builder UI | Vue-based, filter/search, drag to deck |
| Deck validation | Enforce home rules (card limits, restrictions) |
| Starter collection | New accounts get basic cards |
| Card browser | View all cards in the game |

**Milestone**: Players can build decks from their collection and use them in matches

---

### Phase 4: Card Acquisition

**Goal**: Packs and crafting system.

| Task | Description |
|------|-------------|
| Pack definitions | Which cards in which packs, rarity weights |
| Pack opening (backend) | Secure RNG, award cards |
| Pack opening (UI) | Animated Phaser scene with card reveals |
| Currency system | Earned currency from wins/quests |
| Crafting/dust | Disenchant duplicates, craft specific cards |

**Milestone**: Players can earn/open packs and craft cards

---

### Phase 5: Campaign Mode (Core Experience)

**Goal**: Implement the RPG-style single-player campaign.

| Task | Description |
|------|-------------|
| Club/NPC data model | Define clubs, NPCs, their decks, dialog, rewards |
| World map UI | Navigate between clubs, see available NPCs |
| NPC challenge flow | Dialog → deck select → match → rewards |
| Campaign progress tracking | Track defeated NPCs, earned medals, unlocks |
| Club Leaders | Boss NPCs with medals as rewards |
| Grand Masters | End-game opponents, require all medals |
| AI framework | NPC-specific AI behaviors and difficulty |

**Milestone**: Player can progress through clubs, defeat leaders, earn medals

---

### Phase 6: AI Opponents

**Goal**: Make NPC battles engaging and varied.

| Task | Description |
|------|-------------|
| AI strategy interface | Pluggable AI behavior per NPC |
| Personality-based AI | NPCs have playstyle quirks (aggressive, defensive, etc.) |
| Difficulty scaling | NPCs get smarter as campaign progresses |
| Themed decks | Each NPC has a coherent deck strategy |
| Boss AI | Club Leaders and Grand Masters use advanced tactics |

**Milestone**: NPCs feel distinct and appropriately challenging

---

### Phase 7: Puzzle Mode (Optional)

**Goal**: Challenge scenarios for variety.

| Task | Description |
|------|-------------|
| Puzzle data model | Fixed board state, win condition, move limit |
| Puzzle loader | Set up exact game state |
| Puzzle validation | Check if solution is correct |
| Puzzle progression | Unlock sequences, categories |

**Milestone**: Players can solve puzzles like "Win this turn"

---

### Phase 8: Polish & Extended Features

| Task | Description |
|------|-------------|
| Match history | Review past games |
| Player stats | Win rate, favorite decks, medals earned |
| Champion title | Special recognition for completing campaign |
| Card effects system | Support complex abilities (abilities, trainers, etc.) |
| Sound effects | Audio feedback for actions |
| Mobile optimization | Touch controls, responsive layout |
| PvP matchmaking | Optional multiplayer for competitive players |

---

## Key Technical Decisions

| Decision | Choice | Rationale |
|----------|--------|-----------|
| Vue + Phaser integration | Mount Phaser as Vue component | Keep forms/menus in Vue, canvas gameplay in Phaser |
| Pack opening | Phaser scene | Allows for animated card reveals with pizazz |
| Deck builder | Vue-based | Form-heavy UI, filtering, better accessibility |
| Card effect system | Data-driven with scripted effects | JSON defines cards, effect IDs map to handler functions |
| AI architecture | Strategy pattern per difficulty | Easy to add new AI types, same interface |
| Hidden info | Server never sends opponent's hand/deck | Prevents cheating even if client is compromised |
| State sync | Full state on reconnect, deltas during play | Balance bandwidth vs. complexity |

---

## Complexity Estimates

| Component | Effort | Notes |
|-----------|--------|-------|
| Phaser game scene | High | Most time-intensive frontend work |
| Card effect system | High | Complex cards need flexible effect resolution |
| AI (Hard difficulty) | High | MCTS/minimax is non-trivial |
| Turn state machine | Medium | Similar patterns to other game projects |
| Collection/decks | Medium | CRUD with validation |
| Pack opening animation | Medium | Fun Phaser work, moderate complexity |
| Puzzles | Low-Medium | Subset of game engine, fixed states |

---

## Directory Structure

```
mantimon-tcg/
├── PROJECT_PLAN.md          # This file
├── CLAUDE.md                # AI agent guidelines
├── docs/
│   ├── ARCHITECTURE.md      # Technical deep-dive
│   └── GAME_RULES.md        # Home rule documentation
├── frontend/                # Vue 3 + Phaser 3 application
│   ├── src/
│   │   ├── components/      # Vue components
│   │   ├── pages/           # Route pages
│   │   ├── stores/          # Pinia stores
│   │   ├── game/            # Phaser scenes and game objects
│   │   ├── composables/     # Vue composables (useWebSocket, etc.)
│   │   └── assets/          # Images, sounds
│   └── package.json
├── backend/                 # FastAPI application
│   ├── app/
│   │   ├── api/             # REST endpoints
│   │   ├── core/            # Game engine
│   │   ├── models/          # Pydantic + SQLAlchemy models
│   │   ├── services/        # Business logic
│   │   └── websocket/       # Socket.io handlers
│   └── pyproject.toml
└── shared/                  # Shared types/schemas (if needed)
```

---

## Open Questions / Future Decisions

- [ ] Authentication method (Discord OAuth like baseball app? Email/password? Both?)
- [ ] Card art storage (local assets vs. CDN vs. external URLs?)
- [ ] Mobile app (PWA sufficient? Or native wrapper later?)
- [ ] Monetization (if any - cosmetics, premium packs, etc.)
- [ ] Tournament/event system for organized play
