3.2 KiB
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):
# 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 = walkingassets/sprites/platforms.png— 1280×1280px spritesheet; 128×128 tiles in a 10×10 gridassets/tilesets/levels-a.json— Tiled JSON export for Level 1; 30×20 tiles at 128×128px eachassets/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 throughsolid=true— impassable from all directionsladder=true— climbable;top=truemarks 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 timebarrier=true+color— toggled solid/passable by matching button; only the color matching the pressed button issolid=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 |