# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

This is a Phaser 3 HTML game (Smash TV-style top-down arena shooter) built with vanilla JavaScript and ES6 modules. No build tools or bundlers are used — the game runs directly in the browser.

## Running the Game

Since there is no bundler, serve the files with a local HTTP server (ES6 modules require HTTP, not `file://`):

```bash
npx serve .
# or
python3 -m http.server 8080
```

Then open `http://localhost:8080` (or whatever port) in a browser.

## Tech Stack & Constraints

- **Phaser 3** (loaded via CDN or local script tag)
- **Vanilla JavaScript** with ES6 `import`/`export` — no bundler (Webpack, Vite, etc.)
- **1280x720** canvas, scaled to viewport
- Vector graphics placeholder art (no sprites required initially)

## Architecture

### Module Structure
Files use ES6 `import`/`export` directly. Each major concern lives in its own file/class and is imported where needed. Keep things modular so zones, enemies, and skills can be added without touching core logic.

### Scenes
- **IntroScene** — main menu / title screen
- **GameScene** — core gameplay loop (zones, waves, player, enemies)
- **GameOverScene** (or overlay) — shown when all lives lost; press R to return to menu

### Game Loop Concepts
- **Zones** contain sequential **waves** of enemies; waves escalate in difficulty and enemy variety per zone
- **Player**: 3 lives, 100 HP per life; WASD movement; mouse-aimed rotation (fixed turn rate); left-click fires
- **XP & Leveling**: enemies drop XP; level-up pauses the game and shows the skill tree UI

### Skill Tree
- Defined in JSON so it can be extended without code changes
- Branching structure; current root branches:
  - **Defense** → Take 10% less damage
  - **Offense** → Increase damage by 20% OR Increase fire rate by 40%
- On level-up, pause game and present available skill choices to the player

### Enemy Design
- Enemies increase in difficulty and attack variety with each zone
- Each enemy type should be its own class/file for easy extension
