mantimon-tcg/PROJECT_PLAN.md
Cal Corum 46e7420395 Add RPG campaign structure inspired by GBC Pokemon TCG
- Define campaign loop: Clubs → Leaders → Medals → Grand Masters → Champion
- Update PROJECT_PLAN with campaign as core experience, multiplayer as optional
- Add Campaign Structure section to GAME_RULES with clubs, NPCs, rewards
- Reorganize development phases to prioritize campaign mode
- Update CLAUDE.md project overview and uv commands
2026-01-24 18:22:36 -06:00

15 KiB

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