74 lines
2.7 KiB
Markdown
74 lines
2.7 KiB
Markdown
# 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 + 3–10 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
|
||
}
|
||
```
|