tyrants-edge/CLAUDE.md

74 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Running the Game
```bash
./start_web.sh # Starts Python HTTP server on port 8000
```
Open `http://localhost:8000` in a browser. No build step — all source is raw ES modules. Changes take effect on page refresh.
There are no tests or linting configured.
## Architecture
**Tyrants Edge** is a browser-based deck-building card game built with Phaser 3 (v3.60.0, loaded via CDN). Vanilla JavaScript only — no bundler, no npm.
### Scene Flow
`BootScene``MainMenuScene` → any of:
- `BattleScene` — 1v1 card battles vs AI
- `DeckBuilderScene` — customize decks (1 commander + 310 assault cards)
- `CampaignScene` → launches `BattleScene` with mission config
- `CollectionScene`, `StoreScene`, `FusionScene`
`BootScene` loads all JSON data (`data/*.json`) and card art images, then instantiates global managers stored in Phaser's game registry.
### Global Managers (accessed via `this.registry.get(...)`)
| Key | Class | Purpose |
|-----|-------|---------|
| `cardManager` | `CardManager` | Card definitions and instance creation |
| `packManager` | `PackManager` | Booster pack opening logic |
| `save` | `SaveManager` | localStorage persistence (versioned) |
| `missions` | raw JSON | Campaign mission data |
### Combat System (`src/combat/`)
- **`CombatEngine.js`** — Core battle loop. Turn phases: Draw → Deploy → Activation → Rupture → Jam → Commander Skills → Card Attacks → Cleanup. Uses event queue for animation sequencing.
- **`SkillProcessor.js`** — Resolves card skill effects (strike, swipe, pierce, rupture, berserk, siege, rally, heal, protect, jam, enfeeble, weaken, etc.) with triggers: `on_turn_start`, `on_attack`, `on_kill`.
- **`CombatAI.js`** — AI opponent decision-making.
Combat uses `RNG.js` (seeded random) for deterministic, replayable battles.
### Card Rendering
`CardObject.js` handles all visual card rendering (stats, art, skills). `BattleField.js` manages the 4-lane battle arena layout.
### Data Model
All game content is JSON in `data/`:
- **`cards.json`** — Card stats, faction, rarity, skills
- **`packs.json`** — Booster pack definitions
- **`missions.json`** — Campaign missions with enemy decks and rewards
- **`skills.json`** — Skill reference (skills are also inline in cards)
Card factions: `imperial`, `raider`, `bloodthirsty`, `xeno`, `righteous`
Card types: `commander`, `assault`
Rarities: `common`, `rare`, `epic`, `legendary`
### Save Format (localStorage)
```json
{
"version": 1,
"gold": 400,
"collection": { "cardId": count },
"decks": [],
"campaignProgress": { "completedMissions": [], "currentChapter": 1 },
"starterDeckReceived": false
}
```