add README.md
This commit is contained in:
87
README.md
Normal file
87
README.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# Trickster Tiles
|
||||
|
||||
A small pixel-art platformer built with [Phaser 3](https://phaser.io/), TypeScript and Vite. Hop, jump, and outwit moving spikes and disappearing tiles across 10 levels.
|
||||
|
||||
## Controls
|
||||
|
||||
| Action | Keys |
|
||||
| --- | --- |
|
||||
| Move | `←` `→` / `A` `D` |
|
||||
| Jump | `SPACE` / `↑` / `W` |
|
||||
| Start | `SPACE` / `ENTER` / mouse click (on title screen) |
|
||||
|
||||
Falling off the bottom of the screen restarts the current level. Reaching the exit advances to the next.
|
||||
|
||||
## Running
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run dev # local dev server (Vite)
|
||||
npm run build # type-check + production build into dist/
|
||||
npm run preview # serve the production build
|
||||
```
|
||||
|
||||
Requires Node.js 18+.
|
||||
|
||||
## Project layout
|
||||
|
||||
```
|
||||
src/
|
||||
main.ts Phaser.Game bootstrap
|
||||
scenes/
|
||||
BootScene.ts Title screen, sprite preloading
|
||||
GameScene.ts Gameplay loop, collisions, level transitions
|
||||
entities/
|
||||
Player.ts Input handling + movement
|
||||
Platform.ts Solid platform (one-way landing)
|
||||
Exit.ts Level exit goal
|
||||
obstacles/
|
||||
ObstacleSpikeBase.ts Shared spike init
|
||||
ObstacleSpikeNormal.ts Static spike
|
||||
ObstacleSpikeTricky.ts Spike that jumps away when approached
|
||||
ObstaclePlatformDisappearing.ts Platform that fades on proximity
|
||||
lib/
|
||||
levelTypes.ts Tile enum, ASCII parser, defineLevel()
|
||||
LevelLoader.ts Builds entities from a level matrix
|
||||
levels/
|
||||
01_level.ts ... 10_level.ts Individual level definitions
|
||||
index.ts Aggregated LEVELS array
|
||||
public/
|
||||
sprites/ SVG sprites loaded by BootScene
|
||||
```
|
||||
|
||||
## Level format
|
||||
|
||||
Levels are written as a short array of ASCII rows passed to `defineLevel(name, rows)`. Missing top rows are auto-padded with empty rows up to `LEVEL_ROWS` (15), so most levels only need to describe the bottom of the playfield.
|
||||
|
||||
Tile characters:
|
||||
|
||||
| Char | Tile |
|
||||
| --- | --- |
|
||||
| `.` | Empty |
|
||||
| `#` | Platform |
|
||||
| `P` | Player spawn |
|
||||
| `E` | Exit |
|
||||
| `~` | Disappearing platform |
|
||||
| `^` | Static spike |
|
||||
| `T` | Tricky spike (moves when the player approaches) |
|
||||
|
||||
Example (`src/levels/05_level.ts`):
|
||||
|
||||
```ts
|
||||
import { defineLevel } from "../lib/levelTypes";
|
||||
|
||||
export const level05 = defineLevel("Pit Crossing", [
|
||||
".E.................P",
|
||||
"####...######...####",
|
||||
"####^^^######^^^####",
|
||||
]);
|
||||
```
|
||||
|
||||
To add a new level: create `src/levels/NN_level.ts`, import and append it in `src/levels/index.ts`.
|
||||
|
||||
## Tech
|
||||
|
||||
- Phaser 3 (Arcade Physics)
|
||||
- TypeScript (strict mode)
|
||||
- Vite
|
||||
Reference in New Issue
Block a user