Client for playing 300 publicly available Sokoban puzzles on a computer or phone.
# Sokoban

[![0 dependencies!]https://0dependencies.dev/0dependencies.svg]https://0dependencies.dev

![screenshot]assets/1.png

A cross-platform, hackable app for playing 300 publicly available Sokoban
puzzles. Runs on Windows, Mac, Linux, Android and iOS. You can edit the game
and UI right on your device.

To modify the editing environment itself or repurpose it for other apps, open
it on a desktop environment. The environment itself can be modified as it
runs.

In early release; please report issues, particularly with usability or
accessibility.

This repo is an example of a [Freewheeling App]http://akkartik.name/freewheeling,
designed above all to be easy to run, easy to modify and easy to share.

## Getting started

Install [LÖVE]https://love2d.org. It's just a 5MB download, open-source and
extremely well-behaved.

[Run the app using LÖVE.]https://love2d.org/wiki/Getting_Started#Running_Games

## Hacking

You can edit the game and UI right on your device. However, there are some
gotchas to be aware of.

* If you upgrade LÖVE you lose all your local apps and their saved settings.
  This includes code changes. It's hard to get code changes out due to mobile
  restrictions. I can't come up with an alternative to copy-paste. This
  imposes a strict limit on the number of changes I'm willing to make to a
  large app on my phone.

* If you upgrade such apps after making local changes to them, you might see
  strange errors. Local changes are written to an overlay directory, whereas
  upgrades modify the app in place. The two locations create lots of
  opportunity for conflicts to arise.

  To mitigate this issue, such apps by default list local changes in the
  output editor every time they run. That will hopefully act as a reminder.
  There's also some helpers for deleting local changes in the 'scratch' page.

You can also modify the editing environment itself, or repurpose it for a
different app entirely, live as it runs. This requires running it on a
computer, but is much more reliable. Download [the driver app]https://git.sr.ht/~akkartik/driver.love.
Here's an example session showing the driver (left window) editing a different
app (right window containing yellow text):

![making changes without restarting the app]assets/2.gif

[Some reference documentation on how to create your own apps.]reference.md

If the app being modified by the driver lives in a .love file, your changes
will go into the [save directory]https://love2d.org/wiki/love.filesystem.getSaveDirectory.
If it lives in a directory (like this repo), your changes will go straight
into the same directory.

## Keyboard shortcuts

Within the editor widget:

* `ctrl+f` to find patterns within a file
* `ctrl+c` to copy, `ctrl+x` to cut, `ctrl+v` to paste
* `ctrl+z` to undo, `ctrl+y` to redo
* `ctrl+=` to zoom in, `ctrl+-` to zoom out, `ctrl+0` to reset zoom
* `alt+right`/`alt+left` to jump to the next/previous word, respectively
* mouse drag or `shift` + movement to select text, `ctrl+a` to select all

Exclusively tested so far with a US keyboard layout. If
you use a different layout, please let me know if things worked, or if you
found anything amiss: http://akkartik.name/contact

## Known issues

* No support yet for Unicode graphemes spanning multiple codepoints.

* No support yet for right-to-left languages.

* Can't scroll while selecting text with mouse.

* Some colors can't be customized yet.

## Contributors

Many thanks to [Michal Zalewski]https://lcamtuf.coredump.cx/sir-box-a-lot
for creating the sprites and curating all the puzzles.

## Mirrors and Forks

This repo is a fork of [lines.love]http://akkartik.name/lines.html, an
editor for plain text where you can also seamlessly insert line drawings.
Its immediate upstream is [the template repo for mobile freewheeling apps]https://git.sr.ht/~akkartik/template-carousel-mobile.
Updates to it can be downloaded from the following mirrors:

* https://git.sr.ht/~akkartik/sokoban.love
* https://tildegit.org/akkartik/sokoban.love
* https://git.merveilles.town/akkartik/sokoban.love
* https://nest.pijul.com/akkartik/sokoban.love (using the Pijul version control system)

Further forks are encouraged. If you show me your fork, I'll link to it here.

* https://git.sr.ht/~akkartik/sokoban.love

## Feedback

[Most appreciated.]http://akkartik.name/contact Messages, PRs, patches,
forks, it's all good.