attention-retro-disorder/CLAUDE.md

74 lines
2.5 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
No bundler required. Serve with any local HTTP server and open `http://localhost:8080`:
```bash
python3 -m http.server 8080
# or
npx serve .
```
## Architecture
### Entry Point & Scene Flow
`index.html` loads `src/main.js` as an ES6 module. Phaser is loaded via CDN (no bundler). Scene flow:
1. `MainMenu` — title screen, starts game
2. `GameManager` — reads `config/game.json`, randomly selects N mini-games for the current level, sequences through them, and manages global state (lives, current level)
3. Each mini-game scene — runs its level, then signals completion or failure back to `GameManager`
### Mini-Game Contract
Each mini-game is a self-contained Phaser `Scene` exported from its subdirectory. Every mini-game must implement the same interface so `GameManager` can plug it in without knowing its internals:
- Accept a `onComplete` and `onFail` callback (passed via Phaser scene data or events)
- Emit/call `onComplete` when the level is beaten; `onFail` when a life is lost
To add a new mini-game: create a subdirectory under `src/games/`, implement the Scene contract, and register it in `config/game.json`.
### Directory Structure
```
index.html
config/
game.json # level-to-game-count mapping, lives, active game pool
src/
main.js # Phaser game init, registers all scenes
scenes/
MainMenu.js
GameManager.js # sequences mini-games, tracks lives/level
games/
colorado-defense/
ColoradoDefense.js
config.json
code-bug-invaders/
CodeBugInvaders.js
config.json
dot-dude/
DotDude.js
config.json
smash-out/
SmashOut.js
config.json
```
### Configuration
- `config/game.json` — top-level settings: number of games per level, lives count, which games are in the pool
- `src/games/<name>/config.json` — per-game tuning: speeds, enemy counts, timing, etc.
## Tech Stack & Constraints
- **Phaser 3.90** — loaded via CDN, not npm
- **Vanilla JS ES6 modules** — `import`/`export` only, no webpack/Vite/bundler
- **Canvas:** 1600×900 with `Phaser.Scale.FIT` for responsive scaling
- **Graphics:** Vector graphics only during initial development (no sprite sheets yet)
- **Controls:** Arrow keys + `A` to fire for all games; mouse for aiming in Colorado Defense only
- **Lives:** 3 lives global; game over on third loss
- **Level 1:** 3 randomly selected games; **Level 2:** 4 randomly selected games