# 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