68 lines
3.2 KiB
Markdown
68 lines
3.2 KiB
Markdown
# CLAUDE.md
|
||
|
||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||
|
||
## Running the Game
|
||
|
||
Start a local web server (required for ES6 module loading):
|
||
|
||
```bash
|
||
# Linux/Mac
|
||
./start_web.sh
|
||
# or manually:
|
||
python3 -m http.server 8000
|
||
```
|
||
|
||
Then open `http://localhost:8000` in a browser.
|
||
|
||
No build step, bundler, or package manager is used. The game runs as plain ES6 modules in the browser.
|
||
|
||
## Tech Stack
|
||
|
||
- **Phaser 3** (HTML5 game framework, loaded via CDN or local file)
|
||
- **Vanilla JavaScript** with ES6 `import`/`export` — no transpilation
|
||
- **Tiled Map Editor** for level design (exports to `assets/tilesets/levels-a.json`)
|
||
|
||
## Project Architecture
|
||
|
||
This is a **pre-implementation project** — assets and specs exist, but no JavaScript or HTML source files have been created yet. The `software.md` file is the authoritative specification.
|
||
|
||
### Key Assets
|
||
|
||
- `assets/sprites/player.png` — 128×256px spritesheet; frame 0 = standing, frame 1 = walking
|
||
- `assets/sprites/platforms.png` — 1280×1280px spritesheet; 128×128 tiles in a 10×10 grid
|
||
- `assets/tilesets/levels-a.json` — Tiled JSON export for Level 1; 30×20 tiles at 128×128px each
|
||
- `assets/tilesets/platforms.tsx` — Tileset with tile property definitions (floor, solid, barrier, ladder, button, color)
|
||
|
||
### Game Mechanics (from software.md)
|
||
|
||
**Viewport:** 1600×900, scaled to user's viewport.
|
||
|
||
**Player:** Spawns at tile (3, 11) in Level 1. Three lives. Arrow keys for movement; up arrow jumps when not on a ladder; up/down arrows climb when on a ladder; player snaps to ladder center horizontally.
|
||
|
||
**Tile properties** (defined in `platforms.tsx`, embedded in map layers):
|
||
- `floor=true` — one-way collision; player can jump through from below but cannot fall through
|
||
- `solid=true` — impassable from all directions
|
||
- `ladder=true` — climbable; `top=true` marks the top rung (jumping is allowed from top)
|
||
- `button=true` + `color={red|yellow|blue|green}` + `pressed={true|false}` — player lands on top to press; only one button active at a time
|
||
- `barrier=true` + `color` — toggled solid/passable by matching button; only the color matching the pressed button is `solid=false`
|
||
|
||
**Button/Barrier color system:** Pressing a button sets all same-color barriers to passable and all other barriers to solid. Tile sprites update to reflect state.
|
||
|
||
### Intended Code Structure
|
||
|
||
Per `software.md`, the codebase should use modular ES6 classes:
|
||
- One HTML entry point that loads Phaser 3 and bootstraps the game
|
||
- Separate scene files for levels (framework must support multiple levels)
|
||
- Classes/modules for: Player, Level/TileMap, Button, Barrier, Ladder
|
||
- No web packager — all imports must be relative paths resolvable by the browser
|
||
|
||
### Sprite Tile ID Reference (platforms.png)
|
||
|
||
| Color | Button unpressed | Button pressed | Barrier solid | Barrier passable |
|
||
|--------|-----------------|----------------|---------------|------------------|
|
||
| Red | 8 | 18 | 20 | 21 |
|
||
| Blue | 9 | 19 | 30 | 31 |
|
||
| Yellow | 28 | 38 | 40 | 41 |
|
||
| Green | 29 | 39 | 50 | 51 |
|