Files
sokoban/src/game/data/microban-levels.js
T
tiennm99 2ee7ac886a feat(levels): ship the full 155-puzzle Microban set
Expand the level data from the first 100 Microban layouts to the complete
set, up through the two oversized finale mazes ("Take the long way home"
and "The Dungeon"). Responsive tile sizing already handles the large
grids — no rendering changes needed.

Update credit language in README, PDR, changelog, roadmap, codebase
summary, menu subtitle, and the data file header to reflect the full
set. Credit for David W. Skinner's layouts remains prominent; ownership
of the engine, UI, parser, and progression code stays explicit.

Verified all 155 layouts parse cleanly, have a player, matching box/goal
counts, and none start already solved.
2026-04-11 23:36:34 +07:00

1379 lines
15 KiB
JavaScript

/**
* Puzzle layouts from the Microban level set by David W. Skinner
* (April 2000, 155 puzzles, freely distributable with credit).
* The full 155-layout set is shipped here — from tiny beginner puzzles
* up to the huge "Take the long way home" maze and "The Dungeon" finale.
* 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
* # wall
* (space) floor
* . target
* $ box
* * box on target
* @ player
* + player on target
*/
export const MICROBAN_LEVELS = [
`####
# .#
# ###
#*@ #
# $ #
# ###
####`,
`######
# #
# #@ #
# $* #
# .* #
# #
######`,
` ####
### ####
# $ #
# # #$ #
# . .#@ #
#########`,
`########
# #
# .**$@#
# #
##### #
####`,
` #######
# #
# .$. #
## $@$ #
# .$. #
# #
########`,
`###### #####
# ### #
# $$ #@#
# $ #... #
# ########
#####`,
`#######
# #
# .$. #
# $.$ #
# .$. #
# $.$ #
# @ #
#######`,
` ######
# ..@#
# $$ #
## ###
# #
# #
#### #
# ##
# # #
# # #
### #
#####`,
`#####
#. ##
#@$$ #
## #
## #
##.#
###`,
` #####
#. #
#.# #
#######.# #
# @ $ $ $ #
# # # # ###
# #
#########`,
` ######
# #
# ##@##
### # $ #
# ..# $ #
# #
# ######
####`,
`#####
# ##
# $ #
## $ ####
###@. #
# .# #
# #
#######`,
`####
#. ##
#.@ #
#. $#
##$ ###
# $ #
# #
# ###
####`,
`#######
# #
# # # #
#. $*@#
# ###
#####`,
` ###
######@##
# .* #
# # #
#####$# #
# #
#####`,
` ####
# ####
# ##
## ## #
#. .# @$##
# # $$ #
# .# #
##########`,
`#####
# @ #
#...#
#$$$##
# #
# #
######`,
`#######
# #
#. . #
# ## ##
# $ #
###$ #
#@ #
# #
####`,
`########
# .. #
# @$$ #
##### ##
# #
# #
# #
####`,
`#######
# ###
# @$$..#
#### ## #
# #
# ####
# #
####`,
`####
# ####
# . . #
# $$#@#
## #
######`,
`#####
# ###
#. . #
# # #
## # #
#@$$ #
# #
# ###
####`,
`#######
# * #
# #
## # ##
#$@.#
# #
#####`,
`# #####
# #
###$$@#
# ###
# #
# . . #
#######`,
` ####
# ###
# $$ #
##... #
# @$ #
# ###
#####`,
` #####
# @ #
# #
###$ #
# ...#
# $$ #
### #
####`,
`######
# .#
# ## ##
# $$@#
# # #
#. ###
#####`,
`#####
# #
# @ #
# $$###
##. . #
# #
######`,
` #####
# ##
# #
###### #
## #. #
# $ $ @ ##
# ######.#
# #
##########`,
`####
# ###
# $$ #
#... #
# @$ #
# ##
#####`,
` ####
## #
##@$.##
# $$ #
# . . #
### #
#####`,
` ####
## ###
# #
#.**$@#
# ###
## #
####`,
`#######
#. # #
# $ #
#. $#@#
# $ #
#. # #
#######`,
` ####
### ####
# #
#@$***. #
# #
#########`,
` ####
## #
#. $#
#.$ #
#.$ #
#.$ #
#. $##
# @#
## #
#####`,
`####
# ############
# $ $ $ $ $ @ #
# ..... #
###############`,
` ###
##### #.#
# ###.#
# $ #.#
# $ $ #
#####@# #
# #
#####`,
`##########
# #
# ##.### #
# # $$ . #
# . @$## #
##### #
######`,
`#####
# ####
# # # .#
# $ ###
### #$. #
# #@ #
# # ######
# #
#####`,
` #####
# #
## ##
# $$$ #
# .+. #
#######`,
`#######
# #
#@$$$ ##
# #...#
## ##
######`,
` ####
# #
#@ #
####$.#
# $.#
# # $.#
# ##
######`,
` ####
# @#
# #
###### .#
# $ .#
# $$# .#
# ####
### #
####`,
`#####
#@$.#
#####`,
`######
#... #
# $ #
# #$##
# $ #
# @ #
######`,
` ######
## #
# ## #
# # $ #
# * .#
## #@##
# #
#####`,
` #######
### #
# $ $ #
# ### #####
# @ . . #
# ### #
##### #####`,
`######
# @ #
# # ##
# .# ##
# .$$$ #
# .# #
#### #
#####`,
`######
# @ #
# $# #
# $ #
# $ ##
### ####
# # #
#... #
# #
#######`,
` ####
### #####
# $ @..#
# $ # #
### #### #
# #
########`,
`####
# ###
# ###
# $*@ #
### .# #
# #
######`,
` ####
### @#
# $ #
# *.#
# *.#
# $ #
### #
####`,
` #####
##. .##
# * * #
# # #
# $ $ #
## @ ##
#####`,
` ######
# #
##### . #
### ###. #
# $ $ . ##
# @$$ # . #
## #####
######`,
`########
# @ # #
# #
#####$ #
# ###
## #$ ..#
## # ###
####`,
`#####
# ###
# $ #
##* . #
# @#
######`,
` ####
# #
#@ #
# #
### ####
# * #
# $ #
#####. #
####`,
`####
# ####
#.*$ #
# .$# #
## @ #
# ##
#####`,
`############
# #
# ####### @##
# # #
# # $ # #
# $$ ##### #
### # # ...#
#### # #
######`,
` #########
# #
##@##### #
# # # #
# # $.#
# ##$##.#
##$## #.#
# $ #.#
# # ###
########`,
`########
# #
# #### #
# #...@#
# ###$###
# # #
# $$ $ #
#### ##
#.###
###`,
` ##########
#### ## #
# $$$....$@#
# ### #
# #### ####
#####`,
`##### ####
# ##### .#
# $ ########
### #### .$ @ #
# # # #### #
#### #### #####`,
` ######
## #
# $ #
# $$ #
### .#####
##.# @ #
#. $ #
#. ####
####`,
` ######
# #
# $ #
####$ #
## $ $ #
#....# ##
# @ #
## # #
########`,
` ###
#@#
###$###
## . ##
# # # #
# # # #
# # # #
# # # #
# # # #
## $ $ ##
##. .##
# #
# #
#####`,
`#####
# ##
# # #
#@$*.##
## . #
# $# #
## #
#####`,
` ####
# ######
## $ #
# .# $ #
# .#$#####
# .@ #
######`,
`#### ####
# #### #
# # # #
# # $##
# . .#$ #
#@ ## # $ #
# . # #
###########`,
`#####
# @ ####
# #
# $ $$ #
##$## #
# ####
# .. #
##.. #
### #
####`,
`###########
# # ###
# $@$ # . .#
# ## ### ## #
# # # #
# # # # #
# ######### #
# #
#############`,
` ####
## #####
# $ @ #
# $# #
#### #####
# # #
# $ #
# ..# #
# .####
# ##
####`,
`####
# #####
# $$ $ #
# #
## ## ##
#...#@#
# ### ##
# #
# # #
########`,
` ####
# #######
#$ @# .#
## #$$ .#
# $ ##..#
# # #####
### #
#####`,
` #######
## ....##
# ######
# $ $ @#
### $ $ #
### #
######`,
` #####
## #
# #####
# #.# #
#@ #.# $ #
# #.# ##
# # #
## ##$$#
## #
# ####
####`,
`##########
# @ .... #
# ####$##
## # $ $ #
# $ #
# ######
#####`,
` #######
## ##
# $ $ #
# $ $ $ #
## ### ####
#@ .....#
## ###
#######`,
` #########
# # #
## $#$# #
# .$.@ #
# .# #
##########`,
`####
# #######
# . ## .#
# $# .#
## ## # .#
# # #
#### # #
# @$ ###
# $$ #
# #
######`,
` #####
# #
# . #
## * #
# *##
# @##
## $ #
# #
#####`,
`#####
# ###
# . ##
##*#$ #
# .# $ #
# @## ##
# #
#######`,
`######
# ##
# $ $ ##
## $$ #
# # #
# ## ##
# . .#
# @. .#
# ####
####`,
`########
# ... #
# ### ##
# # $ #
## #@$ #
# # $ #
# ### #####
# #
# ### #
##### #####`,
` ####
####### #
# $ #
# $ $ #
# ########
## # . #
# # # #
# @ . ##
## # # #
# . #
#######`,
` ####
### ##
## $ #
## $ # #
# @#$$ #
# .. ###
# ..###
#####`,
` ####
###### #
# #
# ... .#
##$######
# $ #
# $###
## $ #
## @ #
######`,
` ####
# ### #
# # #
# # # #
# #$ #.#
# # # # #
# #$ #.# #
# # # #
####$ #.# #
# @ # #
# # ## #
########`,
`##########
# ## #
# $ $@# #
#### # $ #
#.# ##
# #.# $#
# #. #
# #. #
######`,
` ########
# @ #
# $ $ #
### ## ###
# $..$ #
# .. #
##########`,
`###########
# .## #
# $$@..$$ #
# ##. #
###########`,
` ####
# # #####
# # # #
# ######.# #
#### $ . #
# $$# ###.# #
# # # # #
######### #@ ##
# #
####`,
` #########
## # ##
# # #
# $ # $ #
# *.* #
####.@.####
# *.* #
# $ # $ #
# # #
## # ##
#########`,
`#########
# @ # #
# $ $ #
##$### ##
# ... #
# # #
###### #
####`,
`########
#@ #
# .$$. #
# $..$ #
# $..$ #
# .$$. #
# #
########`,
` ######
# #
# #
##### #
# #.#####
# $@$ #
#####.# #
## ## ##
# $.#
# ###
#####`,
` ####
# ########
#### $ $.....#
# $ ######
#@### ###
# $ #
# $ # #
## # #
# #
######`,
`#####
# ## ####
# $ ### .#
# $ $ .#
## $#####.# ####
# $ # # .### #
# # # .# @ #
### # # #
#### ## ##
#######`,
` #####
# #
####### ####### # #
# # # # #
# @ #### # ####
# # ....## #### #
# ##### ## $$ $ $ #
###### # #
# ##########
####`,
`#######
# @# #
#.$ #
#. # $##
#.$# #
#. # $ #
# # #
########`,
` #####
# #
# # #######
# * # #
## ## # #
# #* #
### # # # ###
# *#$+ #
# # ## ##
# # * #
####### # #
# #
#####`,
`###########
#....# #
# # $$ #
# @ ## #
# ##$ #
###### $ #
# #
######`,
` #####
# . ##
### $ #
# . $#@#
# #$ . #
# $ ###
## . #
#####`,
` #####
##### #
# $ #
# $#$#@#
### # #
# ... #
### ##
# #
####`,
` #### ####
## ### ##
# # # #
# *. .* #
###$ $###
# @ #
###$ $###
# *. .* #
# # # #
## ### ##
#### ####`,
` ########
# #
#@ $ #
## ###$ #
# .....###
# $ $ $ #
###### # #
# #
#####`,
`########
# #
# $*** #
# * * #
# * * #
# ***. #
# @#
########`,
`#### #####
# ### # ##
# # #$ $ #
#..# ##### # #
# @ # $ $ #
#..# ##
## #########
#####`,
` #######
# # #
# # # # #
# @ $ #
### ### #
# ### #
# $ ##.#
## $ #.#
## $ .#
# ## $#.#
## ## #.#
### # #
### #####`,
` ####
# #
# $####
###. . #
# $ # $ #
# . .###
####$ #
# @#
####`,
`######
# ####
# ...#
# ...#
###### #
# # #
# $$ ##
# @$ #
# $$ #
## $# #
# #
######`,
` #####
## ####
# $$$ #
# # $ #
# $## ##
### #. #
# # #
##### ###
# # ##
# @....#
# #
# # #
########`,
` #####
## #
### # #
# . #
# ## #####
# . . # ##
# # @ $ ###
#####. # $ #
#### $ #
## $ ##
# ##
# #
####`,
`######
# ###
# # $ #
# $ @ #
## ## #####
# #......#
# $ $ $ $ #
## ######
#####`,
` #####
##### ####
# # #
# #..... #
## ## # ###
#$$@$$$ #
# ###
#######`,
` #####
### #
####.....#
# @$$$$$ #
# # ##
##### #
#####`,
` #### ####
# ### ##
# @ #
##..### #
# # #
#...#$ # #
# ## $$ $ #
# $ ###
#### ###
####`,
` #####
## ##
# $ ##
# $ $ ##
###$# . ##
# # . #
## ##. #
# @ . ##
# # #
########`,
` ######
# ##
## ## #
# $$ # #
# @$ # #
# # #
#### # #
# ... ##
# ##
#######`,
` ####
####### #
# $ ##
# $##### #
# @# # #
## ##.. #
# # ..####
# $ ###
# $###
# #
####`,
` ######
# . #
##$.# #
# * #
# ..###
##$ # #####
## ## # #
# #### # #
# @ $ $ #
## # #
##########`,
`#####
# ###
# #$ #
# $ #
# $ $ #
# $# #
# @###
## ########
# ...#
# #
########..#
####`,
`########
# #
# $ $$ ########
##### @##. . #
#$ # . #
# #. . ##
#$# ## # #
# #
# ### ##
# # ####
####`,
`##############
# # #
# $@$$ # . ..#
## ## ### ## #
# # # #
# # # # #
# ######### #
# #
#############`,
` #####
# ##
# $ #
######## #@##
# . # $ $ #
# $# #
#...##### #
##### #####`,
` ###########
##....... #
# $$$$$$$@ #
# # # # ##
# # # #
# #######
#####`,
`## ####
#### ####
# $ $. #
## # .$ #
# ##.###
# $ . #
# @ # #
# ######
####`,
` #########
### # #
# * $ . . #
# $ ## ##
####*# #
# @ ###
# ###
#####`,
` #########
### @ # #
# * $ *.. #
# $ # #
####*# ###
# ##
# ###
#####`,
`##### #####
# ####.. #
# $$$ #
# $# .. #
### @# ## #
# ## #
##########`,
`#####
# #
# . #
#.@.###
##.# #
# $ #
# $ #
##$$ #
# ###
# #
####`,
`####
# @###
#.* #####
#..#$$ $ #
## #
# # ## #
# #####
#####`,
` #######
# . .###
# . . . #
### #### #
# @$ $ #
# $$ $ #
#### ###
#####`,
` ####
######### #
# ## $ #
# $ ## #
### #. .# ##
# #. .#$##
# # # #
# @ $ #
# #######
####`,
`#######
# #####
# $$#@##..#
# # #
# $ # # #
#### $ ..#
########`,
` #######
# #
## ###$##
#.$ @ #
# .. #$ #
#.## $ #
# ####
######`,
` ####
## ###
#### # $ #
# #### $ $ #
# ..# #$ #
# # @ ###
## #..# ###
# ## # #
# #
########`,
` ####
### #
# ###
# # . .#
# @ ...####
# # # # ##
# # $$ #
##### $ $ #
##$ # ##
# #
######`,
` ####
## ####
# ...#
# ...#
# # ##
# #@ #### ####
##### $ ### #
# ##$ $ #
### $$ #
# $ ## ###
# ######
######`,
`######## #####
# # ### #
# ## $ #
#.# @ ## $ ##
#.# # $ ##
#.# $ ##
#. ## #####
## #
######`,
` ########
# # . #
# .*.#
# # * #
####$##.##
# $ #
# $ ## $ #
# @# #
##########`,
` ####
# #
# ####
###$.$ #
# .@. #
# $.$###
#### #
# #
####`,
`####
# ####
# $ #
# .# #
# $# ##
# . #
#### #
# #
### ###
# $ #
## #$# ##
# $ @ $ #
# ..#.. #
### ###
#####`,
` ####
### #####
# $$ # #
# $ . .$$##
# .. #. $ #
### #** . #
# . **# ###
# $ .# .. #
##$$.@. $ #
# # $$ #
##### ###
####`,
` #####
# @ #
## ##
###.$$$.###
# $...$ #
# $.#.$ #
# $...$ #
###.$$$.###
## ##
# #
#####`,
` #######
## . ##
# .$$$. #
# $. .$ #
#.$ @ $.#
# $. .$ #
# .$$$. #
## . ##
#######`,
` #####
######## #
#. . @#.#
# ### #
## $ # #
# $ #####
# $# #
## # #
# ##
#####`,
`###########
# . # #
# #. @ #
# #..# #######
## ## $$ $ $ #
## #
#############`,
` ####
## ###
#@$ #
### $ #
# ######
# $....#
# # ####
## # #
# $# #
# #
# ###
####`,
` ####
##### #
# $#######
## ## ..# ...#
# $ $$#$ @ #
# ### #
####### # ####
####`,
` ####
# #
### #
## $ #
# # #
# #$$ ######
# # # .#
# $ @ .#
### ####..#
#### ####`,
`###### ####
# # #
#.## #$## #
# # # #
#$ # ### # #
# # # # #
# # #### # # #
#. @ $ * . #
###############`,
`#############
#.# @# # #
#.#$$ # $ #
#.# # $# #
#.# $# # $##
#.# # $# #
#.# $# # $#
#.. # $ #
#.. # # #
############`,
` ############################
# #
# ######################## #
# # # #
# # #################### # #
# # # # # #
# # # ################ # # #
# # # # # # # #
# # # # ############ # # # #
# # # # # # # # #
# # # # # ############ # # #
# # # # # # # #
# # # # ################ # #
# # # # # #
##$# # #################### #
#. @ # #
#############################`,
` ###### ####
#####*# ################# ##
# ### #
# ######## #### ## #
### #### # #### #### ##
#*# # .# # # # # # #
#*# # # # ## # ## ## #
### ### ### # ## # ## ##
# # #*# # # # #
# # ### ##### #### # #
##### ##### ####### ######
# # # #**# #
## # # #**# ####### ## #
# ######### # ##### ###
# # # $ #*#
# ######### ### @##### #*#
##### #### #### ######`
];