Home - joric/sokoban GitHub Wiki
Welcome to the sokoban wiki!
- Live demo: https://joric.github.io/sokoban/
- This game uses portions of Dizzy Warehouse (1996), Lens (1997) and Fortnoks (1998).
- This game uses YASS solver. Read Solvers article about automatic solvers.
- Z / X to undo/redo.
- Shift + Z / X and to browse levels.
- W, A, S, D or cursor arrows to move.
- 1, 2, 3 to switch tileset.
- R to reset level.
- E to solve.
- F (or double tap) to go fullscreen.
- The original Dizzy Warehouse and Lens games have unsolvable level 16.
- Fortnoks makes level 16 solvable by removing the wall at (5,2).
- There are two Fortnoks versions in the wild, with sound, and without sound.
- All games allow level switching with the Z and X keys while holding Shift.
- Sources are somewhat incomplete, most resource data files are pre-baked.
- Dizzy Warehouse was popularized by the Thomas Pynchon's book "Bleeding Edge" (2003).
- Walls, gems, game panel, 16x16 font use original graphics.
- Dizzy animation is original but inspired by "Fast Food" (Codemasters, 1989).
- Most of the logo graphics is from "Dizzy III - Fantazy World" (Codemasters, 1989).
- The "bang" animation is from "West Bank" (Gremlin Graphics, 1985).
PC graphics was packed using splink.exe
that links Autodesk Animator sprites (.cel) together.
It doesn't have sources, but the format is simple.
It's just width, height, data size (2 bytes each, so 6 bytes) and bitmap data, one byte per pixel.
Palette data (256 * 3 = 768 bytes) is stored independently in the another file.
Lens uses various sources, sometimes with an altered (rotated) palette.
- Walls - orignal hand-painted grey as a stone wall (there are several sprites), then color-remapped.
- Gems - probably original (might be from an obscure DOS vectorballs intro or a DOS game).
- Ghost - from "Magicland Dizzy" (PC, The Haunted Swamp, https://yolkfolk.com/games/magicland-dizzy/)
- Font - from "Magicland Dizzy" (PC, https://youtu.be/aJp4OrPsJmI?t=1472)
- Walls - original, hand-painted.
- Font and logo - original, rendered in 3D Studio, DOS version (1990).
- Gems - gem sprites from Xixit (1995) by Optik Software, Inc.
The Fortnoks music is from Duke Nukem 3D, called "Grab Bag" by Lee Jackson (download here). The archive contains two files, GM1 and GS1, 28956 and 28961 bytes respectively. The game file (FORTNOKS.MID) is smaller (14287 bytes), probably grabbed directly from the game resources. It is subject to copyright, so it requires disclaimers:
Grabbag (Duke Nukem Theme) - composed by Lee Jackson. Copyright (©)1995 Lee Jackson. All rights reserved.
Duke Nukem is (©) 1999-2011 - Gearbox Software, LLC. All rights reserved.
Duke Nukem, the Duke Nukem nuclear symbol, Duke Nukem Forever, Gearbox
Software and the Gearbox logo are registered trademarks of Gearbox Software,
LLC in the U.S. and/or other countries and used here under license.
Remixes: Brandon Blume, Darkman. Xixit music is unused, but it's rippable as s3m with ripper4: https://youtu.be/zQZCZ0GGZds
Fortnoks uses BSWB (Bells, Whistles and Sound Boards) library for sounds.
Samples use the original GDM (General Digital Music) format which is similar to S3M modules. The easiest way to extract samples from it is to use existing converters/players, e.g. MegaZeux. MegaZeux has gdm2s3m converter:
After converting FORTNOKS.GDM to .s3m you can open it in OpenMPT and save samples as .wav:
There is no sequence or patterns, just a few samples:
id | file | name | ofs |
---|---|---|---|
17 | Yeah.wav | end_level | 0x10 |
18 | Brlrlrlm.wav | place_gem | 0x11 |
19 | hahaha.wav | fail_level | 0x12 |
20 | tumtum.wav | move_gem | 0x13 |
21 | Builthit.wav | select_item | 0x14 |
22 | Gbelev02.wav | move_in_menu, activate_menu | 0x15 |
23 | Item15.wav | deactivate_menu | 0x16 |
All 20 16x10 maps in these games are original (mostly because of the screen size limitation at the time).
- You can compare them to the original "pusher" maps on GitHub: https://github.com/begoon/sokoban-maps
Web version supports PWA (progressive web application), you can install it to work offline.
Assuming you already composed your own manifest.json
, you can use mapbox-cli
to add offline PWA support, namely sw.js
and workbox-*.js
(map files are debugging only, you don't need them).
Run this in project root:
npm install workbox-cli --global
workbox wizard # then type . as root directory
workbox generateSW
git add sw.js workbox-*.js
Then you also have to put this into beginning of your js init code:
if ('serviceWorker' in navigator) { navigator.serviceWorker.register('sw.js'); }
Moved to Solvers.