diff --git a/README.md b/README.md index e155b29..ff1975d 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # Sokoban -A browser-based Sokoban game built with Phaser 3 and Vite, shipping 100 Microban levels by David W. Skinner. +My from-scratch Sokoban game, built with Phaser 3 and Vite. The engine, UI, level parser, and progression system are all my own implementation. The puzzle layouts themselves come from David W. Skinner's freely distributable **Microban** set — I'm not reusing any of his code, only his level designs. Play: [https://tiennm99.github.io/sokoban/](https://tiennm99.github.io/sokoban/) ## Features -- **100 solvable puzzles** from the Microban set (beginner-friendly, concept-focused). +- **100 solvable puzzles** using level layouts from the Microban set (beginner-friendly, concept-focused). - **Paginated level select** with progress tracking and best-move record per level. - **Controls**: arrow keys or WASD. `U` / `Z` to undo, `R` to restart, `Esc` for menu. - **Undo history**, live move counter, animated moves. @@ -33,7 +33,8 @@ See [`docs/codebase-summary.md`](docs/codebase-summary.md). - [`docs/project-changelog.md`](docs/project-changelog.md) — release notes. ## Credits -- Puzzles: **Microban** by David W. Skinner (April 2000). Freely distributable with credit. Original site: http://users.bentonrea.com/~sasquatch/sokoban/ +- Puzzle layouts: **Microban** level set by David W. Skinner (April 2000). Freely distributable with credit. Original site: http://users.bentonrea.com/~sasquatch/sokoban/ +- Game code: tiennm99 (with AI pair-programming from Claude). - Engine: [Phaser 3](https://phaser.io/). ## License diff --git a/docs/project-overview-pdr.md b/docs/project-overview-pdr.md index 19b4a23..b5e6b3b 100644 --- a/docs/project-overview-pdr.md +++ b/docs/project-overview-pdr.md @@ -1,7 +1,7 @@ # Sokoban — Product Development Record ## What it is -Browser-based Sokoban puzzle game. 100 solvable Microban levels (David W. Skinner, freely distributable), Phaser 3 + Vite, deployed to GitHub Pages. +A from-scratch Sokoban implementation by tiennm99. Phaser 3 + Vite, deployed to GitHub Pages. The engine, UI, parser, and progression system are original code. Puzzle layouts come from David W. Skinner's freely distributable **Microban** set (100 of his puzzles shipped) — layouts only, no code reused from Skinner's own programs. ## Goals - Clean, beginner-friendly Sokoban that runs in any modern browser with no install. @@ -24,5 +24,6 @@ Casual puzzle fans, Sokoban beginners. Microban set chosen specifically because - Runs smoothly on desktop browsers at 1024×768 canvas (scaled responsively). ## Credits -- Puzzles: Microban by David W. Skinner (April 2000). Used per the collection's free-distribution terms with credit. +- Puzzle layouts: Microban by David W. Skinner (April 2000). Used per the collection's free-distribution terms with credit. Only the level designs — none of Skinner's code. +- Game code: tiennm99 (with AI pair-programming from Claude). - Engine: Phaser 3. diff --git a/src/game/data/microban-levels.js b/src/game/data/microban-levels.js index 762420b..5a7f07e 100644 --- a/src/game/data/microban-levels.js +++ b/src/game/data/microban-levels.js @@ -1,7 +1,9 @@ /** - * Microban level set by David W. Skinner (April 2000, 155 puzzles). - * Freely distributable with credit. First 100 levels shipped here — small, - * concept-focused puzzles that are great for beginners and still interesting. + * Puzzle layouts from the Microban level set by David W. Skinner + * (April 2000, 155 puzzles, freely distributable with credit). + * First 100 layouts shipped here — small, concept-focused puzzles. + * Only the level designs are borrowed; the parser, renderer, and engine + * are original code written for this project. * Source: http://users.bentonrea.com/~sasquatch/sokoban/ * * Format: XSB diff --git a/src/game/scenes/menu-scene.js b/src/game/scenes/menu-scene.js index e8009f6..5c2515c 100644 --- a/src/game/scenes/menu-scene.js +++ b/src/game/scenes/menu-scene.js @@ -19,7 +19,7 @@ export default class MenuScene extends Phaser.Scene { const cy = this.cameras.main.centerY; this.add.text(cx, cy - 200, 'SOKOBAN', FONTS.title).setOrigin(0.5); - this.add.text(cx, cy - 130, '100 Microban puzzles', FONTS.subtitle).setOrigin(0.5); + this.add.text(cx, cy - 130, '100 puzzles to solve', FONTS.subtitle).setOrigin(0.5); createButton(this, cx, cy - 20, 'PLAY', () => this.scene.start('LevelScene'), { width: 240, height: 64 }); @@ -33,6 +33,6 @@ export default class MenuScene extends Phaser.Scene { ].join('\n'); this.add.text(cx, cy + 170, hints, { ...FONTS.small, align: 'center' }).setOrigin(0.5); - this.add.text(cx, this.cameras.main.height - 24, 'Microban puzzles by David W. Skinner', FONTS.small).setOrigin(0.5); + this.add.text(cx, this.cameras.main.height - 24, 'Level layouts from Microban by David W. Skinner', FONTS.small).setOrigin(0.5); } }