Files
sokoban/docs/development-roadmap.md
T
tiennm99 8a3d4b4a9d feat!: rewrite on Svelte 5, drop Phaser
Replace Phaser 3 with Svelte 5 as the rendering and UI layer. The
framework-agnostic core (level parser, board model, progress store,
microban level data) moves from src/game/core → src/lib/core with zero
code changes. Scenes and the hand-rolled button factory are gone; in
their place:

- src/App.svelte            root router (menu / levels / game)
- src/views/MenuView        title + play + progress + hints
- src/views/LevelSelectView paginated 5x4 grid with native <button>s
- src/views/GameView        owns BoardModel, handles input, HUD, win
- src/views/Board           purely presentational DOM renderer
- src/views/AppButton       shared themed wrapper for native <button>
- src/app.css               Nord palette ported to CSS variables

GameView uses a non-reactive BoardModel ref and syncs plain snapshot
fields (player, boxes, moves, won) into $state after every mutation —
Board consumes only plain props, so Svelte reactivity stays predictable
and the core class stays framework-agnostic. GameView is keyed on
levelIndex in App, so changing level remounts with fresh state.

Native <button> everywhere kills the click-hitbox class of bugs.
Animations are now CSS transform transitions (110ms) instead of tweens.

Bundle shrinks from ~1.5 MB Phaser to ~65 kB JS / 23 kB gzipped — about
60x smaller. Removed: phaser, terser, src/game, log.js (analytics
ping), phasermsg vite plugin, manual Phaser chunks, terser config,
public/style.css. Scripts simplified to dev/build.

Docs updated: codebase summary, architecture, code standards,
changelog, roadmap, README.
2026-04-12 00:50:46 +07:00

1.5 KiB
Raw Blame History

Development Roadmap

Phase 0 — Svelte rewrite (complete, 2026-04-12)

  • Replace Phaser 3 with Svelte 5 — native DOM buttons, CSS grid board, transform-based animations.
  • 60× smaller bundle (~25 kB gzipped vs ~1.5 MB).
  • Core modules (parser, board model, progress store, level data) moved verbatim into src/lib/.
  • Nord theme moved into CSS custom properties.

Phase 1 — Core game (complete)

  • Phaser + Vite scaffolding.
  • Menu / Level / Game scenes.
  • Arrow-key movement, box pushing, target detection.

Phase 2 — Overhaul (complete, 2026-04-11)

  • Replace 3 hand-crafted levels with the full 155-puzzle Microban set.
  • Modularize: core / ui / scenes split, every file <200 LOC.
  • BoardModel with undo + move counter.
  • Paginated level select (5 pages × 20 levels).
  • Nord theme + rounded button factory + animated board renderer.
  • WASD support, U/Z undo, R restart, Esc to menu.
  • localStorage progress (completed + best move count).
  • Drop dead Arcade physics and broken shutdown code.
  • Docs folder + README refresh.

Phase 3 — Polish (planned)

  • Sound effects (step, push, win).
  • Player facing direction indicator.
  • Level category tabs (Easy / Medium / Hard) derived from puzzle size or move count.
  • Touch controls (swipe) for mobile.
  • Unit tests for level-parser and board-model.

Phase 4 — Stretch (ideas)

  • Additional level packs (Sasquatch, Sokogen).
  • Custom level importer (paste XSB text).
  • Replay / move playback.
  • Per-level leaderboards (local only).