Releases
Releases
Release notes
Version 1.655
+ Added a new minor feature: Display a checkerboard overlay on top of the game board. Some expert
solvers use a parity concept during the solving process, and here it helps that the checkerboard coloring
shows the odd/even parity of each square. The options for this new feature can be found in the 'Settings'
window in section "Graphics | Board | Checkerboard overlay". Thanks to Matthias Meger for suggesting
this feature.
Version 1.654
+ Improved the level normalization tool a little. A very few levels could be further reduced by running the
level normalization twice. This is not necessary anymore. A small run-length encoded level example: The
level 5#|#3-#|#*@-#|#*$-#|#-.-#|#*--#|#--##|#*-#|#*-#|#--#|4# was reduced to -4#|-#--#|-#@-#|##$-#|#-.-#|
#*--#|#--##|4# in the first round, and then to 4#|#--#|#@-#|#$-#|#.-#|#--#|4# in the second round. Thanks
to Anian Wu for reporting this issue.
+ Minor changes.
Version 1.653
+ Minor changes.
Version 1.652
+ Added a new minor feature: Fill (tile) the gameplay window background with an image scaled and
aligned with the floor squares of the currently opened level. It has always been possible to tile the
background "normally", i.e., with an unscaled image. This new feature makes it possible to create the
effect that the game board has floor squares outside the outer wall, an effect used by some skins and
some Sokoban clones. To activate it (for a skin with the proper imagery), this option in the "Settings"
window is available: "Graphics | Background | Image | View = Floor tile". Thanks to Sokobano for bringing
this up.
+ Added new option to 'Settings': "Control | Miscellaneous | On pressing the [Esc] key in the main
window" with default value "Exit application", which is what the application always has done until now. The
new possible choices are "Minimize window", "Restart game (like [Home])", and "Do nothing".
- Bugfix (1.652, early versions): When playing a level with multiple views on the screen, the highlighting
frame around the currently selected view was not displayed after toggling between normal (forward)
gameplay and reverse mode gameplay.
Version 1.651
+ Made the necessary modifications to compensate for drive letter changes when the application runs as
a portable application from a removable disk, e.g., an USB memory stick. Currently, there is no built-in
procedure for creating a portable version, but the Sokoban YASC source code package contains a crude
script file which can do the job: "Click_me_to_install_YASC_portable.bat". After entering the drive letter
and the path where the portable version is to be installed, e.g., "G:\YASC", the application and all the
relevant files (e.g., all installed solver plugins) are copied to the destination folder. To launch the portable
version, select the file "YASC.bat" in the destination folder. Thanks to Shane Bowman for suggesting a
portable version.
+ Minor changes.
Version 1.650
+ Improved the level normalization tool a little, so it's better at finding and eliminating dead end rooms. A
small run-length encoded level example: The level 3-5#|4#@--#|#--#-$-#|#5-.#|#--5#|4# is normalized to
5#|#@--#|#-$-#|#--.#|5#. Thanks to Anian Wu for this suggestion. The improvement is always active when
levels are normalized in the level editor. The duplicate finder tool, on the other hand, disables the
improvement by default because the improvement requires a time-consuming calculation, tripling the
running time. To enable/disable all normalization methods for the duplicate finder, use this already existing
option in the "Settings" window: "Control | Duplicate finder | Advanced identity check".
Version 1.649
+ Skins galore: 7 more Sokoskinner skins have been found and added to the collection, bringing the total
up to 217 Sokoskinner skins. See the version 1.647 release notes for download instructions. Thanks to
Joris Wit for finding these 7 skins.
+ Minor changes.
Version 1.648
+ Skins galore: 27 more Sokoskinner skins have been found and added to the collection, bringing the
total up to 210 Sokoskinner skins (current status: 217). See the version 1.647 release notes for download
instructions. Thanks to Jordi Domenech for sharing an older snapshot of the Sokoskinner collection,
including these 27 skins.
+ The skin format includes two slots inherited from the original YSokoban skin format which Sokoban
YASC doesn't use: "Immovable-box-on-floor" and "immovable-box-on-goal". There is no reason for having
them or using them because when the user queries about movable boxes in a given game position, the
natural solution is instead to draw attention to the movable boxes by displaying the skin's box highlight
animation for these boxes. Nevertheless, the slots have now been filled in for all the accompanying skins,
just to show how to do it right. The astonishing fact is that literally everybody else has until now created
skins in YSokoban format the wrong way, filling in these slots with imagery which highlights the
immovable boxes, typically by splashing a crude, ugly red "X" or "no admittance" sign on top of the box
drawings. This is the exact opposite of what the user needs, and the correct solution is, naturally, to dim
the immovable boxes, not to highlight them.
+ Minor changes.
Version 1.647
+ Skins galore: The huge skin collection with 183 (current status: 217) high-quality skins by Sokoskinner
(Annie Lee) has been converted from their original Sokoban++ format to the so-called "common skin
format". Each individual skin has been equipped with hand-tailored settings for the best viewing
experience in Sokoban YASC. Even though Sokoban YASC is agnostic about the skin format and also
can load Sokoban++ skins directly, it's often more convenient with skins in the common skin format, also
so other Sokoban clones with support for that format can use the skins. The Sokoskinner skins are not
GPL-licensed material, so they cannot be bundled with Sokoban YASC, and you must find them
elsewhere on the internet. Look for an installation package named something like
"Click_me_to_install_SokoSkinner_skins_for_Sokoban_YASC_1_2.exe", where the version number may
change over time. At the time of writing, the installation package can be found on this website:
"http://sokoban.dk/". It's also available via this link, for a limited period of time after publication of this
Sokoban YASC version:
"https://www.dropbox.com/s/8887vb0dcnhyd60/Click_me_to_install_SokoSkinner_skins_for_Sokoban_YA
SC_1_2.exe?dl=1". Members of the Yahoo Sokoban group can also download the skins from this website:
"https://groups.yahoo.com/neo/groups/sokoban/info".
+ New feature: In the main gameplay window, right-click the "Settings" button, or press F4, to load the
next skin from the current skin folder. This is much more convenient than going through all the trouble of
first opening the settings window (an easy way to do that is to press F2) and then the skins window (an
easy way to do that is to press F2 again). Combining the right-click or the F4 key with the shift key loads
the previous skin in the folder.
+ New feature: Export skins. Sokoban YASC is agnostic about the skin format and can (with a proper skin
format description) load skins from any Sokoban clone which uses bitmap images and/or text files in INI-
file format. This includes several of the existing major PC Sokoban clones. Often, it's more convenient to
convert foreign skins to the so-called "common skin format", also so other Sokoban clones with support
for that format can load the skins. This new export feature can be found in the "Settings" window in form
of the new menu item "Skins | Export skin...". Only basic skin information is exported, in particular
animation imagery, if any, isn't exported. In practice this is not a severe limitation, and it means that the
exported skin always is a standard format skin with images arranged in a 4 columns x 8 rows grid. Please
note, however, that there is this new option in 'Settings': "Control | Tools | Skin export | Base format,
columns x rows". The default is the economical minimum 4 x 4. If the skin is intended for use with other
Sokoban clones, you may need to change the value to the standard 4 x 8 layout, which fills in the
animation frames even though the resulting "animation" just is a still picture.
+ New menu item on the "Settings" window menu: "Skins | Load default skin... | Default buttons and
background". This new menu item can be either checked (default) or unchecked. When checked, loading
one of the default skin variants also loads the default blue buttons and the default blue sky background
image. The rationale is that after having loaded other skins, with their own buttons and background
images, it may be too difficult or too much work for a casual user to figure out how to restore the original
buttons and background via the tree view, which contains all the settings organized in a hierarchical
structure.
+ The default maximum skin zoom factor has been changed to 200%. Earlier, it was simply the maximum
allowed value, 999%. This had the unpleasant effect, that an unfortunate combination of a skin with small
images, a small level with few columns and rows, and a large window on the screen could force the
image scaling to go much higher than its physical limits for producing imagery with a reasonable quality.
Normally, there is no reason to go beyond 200%, and for all skins with a reasonable image quality, image
scaling always produces good enough results up to at least that limit.
+ Added a new minor feature to the duplicate finder: "Create new collection with currently displayed
levels". One of the duplicate finder options is to find the duplicates of a given collection. After having
found these duplicates, the application offers the choice of displaying the collection subject to various
filters, e.g., "levels in the collection with no duplicates" and "levels in the collection with no solutions". With
this new feature, a copy of these filtered levels can be written to a new level file. Thanks to Sokobano for
this suggestion.
+ Minor changes.
Version 1.646
+ Added a new minor feature to the level and skin capture tool: "Load the scaled view of the image as a
new image". The capture tool has always had an image zoom feature to help improve the mouse pointing
accuracy. Upscaling the view of an image, however, doesn't change the mouse pointing granularity. After
upscaling, it's still impossible to split the original pixels in, say, halves or quarters. For some types of
captured, inaccurate images, it may help to do so, i.e., to split the original pixels in halves or quarters.
This new feature makes it possible to do that. Thanks to Anian Wu for this suggestion.
+ The image zoom feature in the capture tool had some outmoded image size limits, unsuitable for taking
a screenshot on a 4K monitor (3840x2160 pixels). The new limits allow a 200% zoom factor for a 4K
screenshot, but not 400%.
Version 1.645
- Bugfix: There are two versions of Sokoban YASC: The standard version with a 50x50 board size limit,
and an experimental special version with a 100x100 limit. On rare occasions, while playing a level in
reverse mode, the special version could cause a so-called stack overflow error, leaving the Windows
operating system no other choice but to terminate the program with a "The program has stopped working"
error message. (Technical information: The large board size for the special edition requires a lot more
runtime stack memory. In reverse mode, checking a box-pull for creating a "freezing box" deadlock
depends on a recursive search. This search used more stack space per recursion depth than strictly
necessary, something which made the search vulnerable to stack overflow errors when facing very deep
recursion depths caused by levels with "snake game" box configurations.) Thanks to Anian Wu for
reporting this bug.
Version 1.644
+ The feature "Calculate pushes lower bound" has been improved. Earlier, the calculation often took too
long time to be of practical use for many large levels. Now the calculation can be made in a few seconds
for many of these large levels. Please see the built-in help text, or the version 1.572 release notes, for
information about how to use this feature.
Version 1.643
- Bugfix: With multiple views of a level on the screen, and then importing continuation moves from the
clipboard leading all the way to a new best solution which dethroned an earlier found solution, then the
new best solution was registered correctly. On the screen, however, it appeared as if the currently opened
view showed the solved position, but if the user tried to step though the solution moves here (as opposed
to opening the new solution in another view), then the player made seemingly random jumps on the
board, completely unrelated to the actual solution. Thanks to Andrea Bini for reporting this bug.
Version 1.642
+ Added new option to 'Settings': "Control | Move animation | Animate moves on mouse wheel up/down, if
animation is enabled" with default value "No". Put differently, when using the mouse wheel to undo/redo
moves, the default behavior is now that the moves are performed instantly. Earlier, mouse wheel up/down
animated the moves according to whether move animation was enabled or not. Thanks to Matthias Meger
for pointing out that the new default behavior is better.
Version 1.641
- The two skins "AntiqueDesk" and "Nightshift3" by Gerry Wiseman worked perfectly all right, but they
used an obsolete syntax for their accompanying settings, having a header line with square brackets
around the skin name, e.g., "[Nightshift3]". The common so-called INI file syntax uses square brackets to
denote a section header. If the skin file for some unusual reason was renamed, the user had to update
the bracketed name in the settings accordingly, something the user could not be expected to know or
notice. For exactly that reason, it was only the very first versions of the application which relied on
bracketed header lines to identify the beginning of the settings embedded in the skin image. Thanks to
Tyge Fogh for reporting that the two mentioned skins used the old syntax.
Version 1.640
- Bugfix: In the "Open" window, the file task operations "Copy", "Move", "Delete", and "Rename" did
nothing if the user had edited level notes right before the file task operation. No harm was done, but some
of the file task operations displayed a spurious error message on the screen.
+ Minor changes.
Version 1.639
- Bugfix: The "Capture levels and skins" tool updated an already captured skin incorrectly in scenarios
like this one: Originally, the skin had been captured from an image with the player on a goal square. Later,
the skin was used for capturing a level from an image with the player on a floor square. If the user in that
session saved the skin manually (as opposed to letting the application save it automatically) or decided to
use the skin for playing the game, then the player-on-goal image in the skin was overwritten by the
player-on-floor image, even though the skin recognized both images correctly when the skin was used for
capturing levels from other images.
Version 1.638
- Bugfix: The accompanying YASS Sokoban level solver classified a few too many game positions as
deadlocked positions. The bugfix reduces the score from 85 to 84 solved levels of the 90 levels in the
XSokoban level set, the quasi standard Sokoban solver test suite. It may sound strange that bugfixes
make the result worse, but it happens frequently in Sokoban solver programming, when the bug has to do
with deadlock detection. Classifying too many positions as deadlocks reduces the number of positions the
solver has to deal with, and often this makes the task easier for the solver.
+ Minor changes.
Version 1.637
+ Added two more divider widgets to the "Open" window; one between the thumbnail preview of the
selected level and the textual level information, and another between the folder list box and the file list
box. The window already had two divider widgets for other groups of information, and after adding the two
new ones, the window layout is very flexible, making it easy for the users to adjust the layout according to
their personal preferences and needs. Thanks to Tyge Fogh for bringing this up.
+ The accompanying YASS solver and YASO optimizer have changed policy regarding unsolvable levels
which happen to be valid and possibly solvable after normalization, e.g., after removal of boxes and goals
which the player cannot reach. Now YASS and YASO classify these levels as unsolvable and reject them.
Earlier, the YASS solver could return a solution of the normalized level to the host application (e.g.,
Sokoban YASC), leaving the host no other option but to discard the solution because it wasn't a solution
of the original version of the level. Thanks to Matthias Meger for pinpointing this discrepancy by means of
the following level example. 8#|#@$.#$.#|8#
- Bugfix: Opening the "Settings" window and closing it again without making any changes by clicking the
"OK" button (as opposed to closing it by clicking the "X" close window button or the "Cancel" button)
caused display troubles the next time the "Open" window was activated. The thumbnail previews of the
levels were garbled until the user resized the window or closed the application. The canvas was never
cleared, so when the user browsed through the levels in a folder or a file, each level was drawn on top of
all the previous ones. It was only a cosmetic error and no harm was done.
+ Minor changes.
Version 1.636
+ Added new option to 'Settings': "Control | Do/undo moves | Shift key action" with default value "Show
Snapshots and Solutions window". This is how it always has worked, but now the shift key can
alternatively substitute the up arrow key, combined with remapping the up arrow key so it acts the same
as the down arrow key. This is ergonomically better for some keyboards, where the up and down arrow
keys are half-size keys sharing one slot in the keyboard layout. The remapping applies to both shift keys.
Ideally, the remapping should be implemented for the right shift key only, but for some unknown reason
the application doesn't receive information about which shift key was pressed. Thanks to Carlos Montiers
for this suggestion.
+ The "create level prefilled with walls" feature found in the level editor has been significantly improved by
adding a new constraint, discarding all level candidates having a 2xN floor area which is connected to the
rest of the board by just one floor square. Occasionally, one area of this type on the board would be
acceptable, but the generator in its current form tends to overdo it, so it's better to reject them entirely.
+ A console mode version of the YASGen Sokoban level generator can be downloaded from the same
website as Sokoban YASC. A new application, "YASGenOrimaze", has been added to that package. This
new application generates Sokoban levels constructed from Orimaze puzzles (see the 1.632 release
notes for a description of Orimaze puzzles). The application has found the longest Orimaze puzzles of
dimensions 1x1..8x4, 5x5, and 6x5. The package contains Sokoban levels, including solutions, based on
all these longest Orimaze puzzles. Thanks to Anian Wu and Matthias Meger for running the time-
consuming calculation of the longest 6x5 and 8x4 Orimaze puzzle respectively.
+ Minor changes.
Version 1.635
- Bugfix: The application didn't handle it gracefully on exit, if the user at that time had pending updates
(e.g., new solutions) to an opened Sokoban level file in a folder to which the user had no write access
rights. The application tried to display an error message, but because the shutdown already was in
progress, the message itself made the application terminate abnormally with a "memory access violation"
error message (not to be confused with the folder write access rights issue).
+ Minor changes.
Version 1.634
+ On the "Open" window menu, the default value for the option "Show solutions?" has been changed to
"Yes", so the list with levels in a file includes a column showing the best found solution for each level.
Earlier, that column was disabled by default in order to save screen space, but many users probably
never noticed that they can get a very useful overview of their solved levels by enabling that column.
+ A console mode version of the YASS Sokoban level solver can be downloaded from the same website
as Sokoban YASC. In that package, there is also a special version of the solver which can solve Sokoban
levels constructed from Orimaze puzzles (see the 1.632 release notes for a description of Orimaze
puzzles). This special solver has been improved in different ways, making its conversion back and forth
between a Sokoban level and its underlying Orimaze puzzle even more forgiving about small deviations
from regular Orimaze-based Sokoban levels.
+ Minor changes.
Version 1.633
+ The release notes for the previous version has been augmented with a detailed technical description of
the then introduced new level editor feature "Create level prefilled with walls".
- Bugfix (1.632): The "magnifying glass" image had disappeared from the toolbar image set for the
"Capture" window. No harm was done, but the "Select image size" button in the "Capture" window
appeared on the screen with a wrong image.
+ Minor changes.
Version 1.632
+ New feature: The level editor offers a new feature, "Create level prefilled with walls", which attempts to
place walls on the board so it has interesting rooms and corridors. These partially constructed levels can
either be used as inspiration, or perhaps more often as seeds for the built-in level generator after
selecting one or more particularly interesting candidates. Thanks to Raymond Groenestein for inspiration
and a fruitful exchange of ideas about procedural generation of Sokoban levels.
Technical information
This walls generator is a significantly improved version of the one presented in Joshua Taylor's PhD
thesis "The Procedural Generation of Interesting Sokoban Levels" from 2015 and in his earlier technical
report "Procedural Generation of Sokoban Levels" from 2011, co-authored by Ian Parberry.
The first notable improvement is that the wall templates are put on the board by means of a recursive
backtracking algorithm, very much like the knight's tour algorithm for visiting all the squares on a
chessboard, except that the templates are put on the board in spiral order starting from the center. That
way, violations of constraints which involve the entire board, such as the "all floors must be connected"
constraint, can often be detected early on, thereby reducing the time spent searching futile paths.
The second notable improvement is that the constraints dealing with the entire board, such as the "all
floors must be connected" constraint, are checked each time a 3x3 region of the board has been filled
(5x5 squares including the template border). Taylor's program only performs these checks as a post-
processing step, making it highly unlikely that larger level candidates ever pass the tests.
These improvements enable the board generator to fill very large boards, say, up to about 100x100
squares more often than not, without getting stuck in time-consuming futile search paths, something
which Taylor's program cannot be expected to do, in particular not after making the first of the two
following further modifications (a few minor ones are not described here).
Four of Taylor's 17 wall templates have been discarded because they are not believed to contribute in a
positive manner. The "all-walls" template takes up space for more interesting wall constellations, and
there will be walls enough on the board anyway. The "all-floors" template, and the two templates with a
single wall only, can easily produce board candidates which violate the open area constraints.
The final notable improvement is an additional constraint, discarding all level candidates having a 2xN
floor area which is connected to the rest of the board with just one floor square. Occasionally, one area of
this type on the board would be acceptable, but the generator in its current form tends to overdo it, so it's
better to reject them entirely.
This is not true, of course. The programs would be far too inefficient to be of any practical use if they
really tried to solve levels in reverse. Solving a level implies that the level has been fully constructed with
boxes and goals, possibly leaving it to the generator/solver to choose a suitable player position.
But putting boxes and goals on the board and then expect the resulting level to be solvable is hopelessly
over-optimistic, and the generators would waste most of their time just proving levels to be unsolvable, or
not solvable under the given time and computer memory limits.
Long before Taylor published his 2015 thesis, both Haywood and I explained it to him in great detail that
we use a backward breadth-first search for the farthest state from the goal state.
On 2011-10-24, Haywood explained it very clearly to Taylor here (date retrieved: 2016-20-11):
https://groups.yahoo.com/neo/groups/sokoban/conversations/messages/4577
The misrepresentation of what SokEvo and YASGen do, makes Taylor's generator, as presented in his
2015 thesis, look more special than it is, when it uses that method.
In contrast, back in the 2011 technical report, Taylor and Parberry were legally excused, so to speak,
when they wrote that their program was the first one to use that method because it had not been
described earlier in the academic literature at that time, and except for the - in this connection - rather
obscure but actually very detailed description found in the built-in help text in Sokoban YASC, there was
no other known material stating otherwise.
It's not exactly rocket science to figure out that a backward box-pulling breadth-first search for the farthest
state from the goal state is the best way to generate Sokoban levels, and unsurprisingly, SokEvo and
YASGen are also not the first programs to have used that method. The first known program using that
method is SokoGen by Jack Duthen. Later, he gave a fine description of his program here (date retrieved:
2016-20-11):
https://groups.yahoo.com/neo/groups/sokoban/conversations/messages/4789
+ A console mode version of the YASS Sokoban level solver can be downloaded from the same website
as Sokoban YASC. In that package, there is now also a special version of the solver which can solve
Sokoban levels constructed from Orimaze puzzles. Orimaze is a sliding block puzzle similar to the 15
puzzle, where the player moves tiles around on a board with only one free slot. But in contrast to the 15
puzzle, each tile is labeled "horizontal" or "vertical" and can only move along its designated axis. The
package contains both a stand-alone console mode version of this solver and a plug-in version which
works together with host applications like Sokoban YASC.
+ Minor changes.
Version 1.631
+ Michael Vinther has kindly updated the license for his ImageFileLib package, so it now is dual-licensed:
Either its original license, or GPL version 2, or later. Sokoban YASC uses the PNG relevant parts of
ImageFileLib to load images in PNG format, and the license information has been updated accordingly.
Recently, a clash between the letter and the spirit of the original license was discovered, a clash which in
effect made the original license incompatible with the GPL license. The original ImagefileLib license
permits usage in "freeware products and free source distributions either in the original or modified form. I
[Michael Vinther] only require that my name is mentioned in the program". So far, this is fully compatible
with, and in the spirit of, GPL. But the original license has also this clause, which isn't compatible with
GPL: "The library may not be used in commercial products without permission from the author". Roughly
speaking, GPL protects code so it stays open code. A vendor may use it commercially, also without asking
the original author for permission, but the GPL code "taints" the entire project so the vendor is obligated to
make all of it open source under the GPL license. Thanks to Michael Vinther for this license update.
- Bugfix: On rare occasions, the accompanying YASS solver caused a memory access error, leaving the
Windows operating system no other choice but to terminate the program with a "The program has
stopped working" error message. Thanks to Sokobano for reporting this bug.
- Bugfix: The level generator accepts a template (a possibly only partially constructed puzzle board) as
seed for the generation. There is a "fixed template" option, which makes the boxes and goals from the
template immutable. If that feature was enabled, and if the template was a walls-only board with no boxes
or goals, then the generator repeatedly generated level candidates with no boxes, only mutating walls on
the board. This happened at such a fast rate that the user couldn't stop the generator by clicking the
"Stop" button. No harm was done in the sense that the user could still use all other branches of the
application, including leaving the generator window and closing the application normally, but for the
remaining part of that session with the application, the generator was inaccessible and running in a busy
loop. Now the generator uses its normal mutation policy to add boxes to level candidates based on a
walls-only template.
+ Minor changes.
Version 1.630
+ Significant improvements of the accompanying YASS solver have increased its score from 79 to 85
solved of the 90 levels in the XSokoban level set, the quasi standard Sokoban solver test suite. (Current
status: 84 solved. See the release notes for version 1.638.)
+ Added an adaptation of the "Macintosh" skin from Scott Lindhurst's "Sokoban for the Macintosh"
program. The source material consisted of low-resolution raster graphics images with only 16x16 pixels
for each object, e.g., boxes and walls. Sokoban YASC has always used a high quality image scaling
method, when skins are scaled to make the Sokoban puzzles fit the size of the game window, but an
object with only 16x16 pixels is too small for upscaling by more than, say, a factor 1.5 before the graphical
quality suffers too much. Fortunately, there are specialized so-called pixel art scaling algorithms, which
excel in upscaling such low-resolution material. With the help of a program featuring the xBRZ algorithm,
the skin has been scaled up by a factor 4 to 64x64 pixels for each object with surprisingly good results.
Thanks to Scott Lindhurst for permission to distribute this skin under the GPL license, and thanks to Tyge
Fogh for collaboration on this adaptation.
+ New feature: The "Capture levels and skins" tool has the new option "Ignore small color differences".
The capture tool has always been able to cope with small color differences as soon as the user has
specified where the level is located in the image. But a fully automatic capture, without manual assistance
from the user, required an exact match of colors as well as scale. This new feature is enabled by default,
but it can be disabled by removing the check mark from the new menu item in the capture window,
"Settings | Color quantization... | Ignore small color differences". Theoretically, this new feature can cause
problems for existing skins used for capturing levels from images, but it's believed not to be a problem in
practice. A misidentification resulting from the more relaxed object comparisons can only happen if the
skin has so similar objects (e.g., boxes and goals) that the skin would make the game unplayable.
+ New feature: "Show a grid on top of a skin". Some skins make it difficult to distinguish the individual
floor squares on the board, and for some of these skins it may improve their gameplay qualities to draw a
grid programmatically on top of the skin. The grid options can be found in 'Settings' under "Graphics |
Board | Grid". Appropriate images are required. For instance, the walls must have been drawn with at
least a one pixel wide border.
+ Added a new minor feature: "Initialize skin with the number of columns and rows (for skins where the
automatic detection fails)". Depending on the size of the individual tiles (e.g., walls, boxes, and pusher) in
a skin in the "Common skins format", there are some combinations of column counts and row counts
where the automatic detection fails. In these cases, this new feature comes to the rescue. It can be found
on the menu in the "Skins" window, and it is exactly the same initialization as already offered on the same
menu under the name "Initialize skin for the capture tool", but the new menu item makes it clear that the
initialization now can serve the new purpose too.
+ Added two new options to 'Settings': "Graphics | Board | Figures | Player on goal square | Use player
image for highlighting reachable squares" and "Graphics | Board | Figures | Box on goal square | Use box
image for highlighting reachable squares", both with default value "No". These options come in handy for
skins like the newly added "Macintosh", where the player in the player-on-goal image cannot be cleanly
separated from the background.
+ Added new option to 'Settings': "Control | Miscellaneous | Board dimensions: Show floor count" with
default value "No".
+ The console mode version of the YASGen level generator can be downloaded from the same website
as Sokoban YASC. In that package, there is now also a three-dimensional variant, generating levels for
3D-Sokoban. The rules are the same as for normal two-dimensional Sokoban, but with the third
dimension added as a twist.
- Bugfix: When using the level capture tool and selecting a matching skin for the extraction process, the
initially selected folder for the "Open file" dialog was the folder of the most recently opened picture (from
which to extract a level), not the folder of the most recently opened skin. Thanks to Sokobano for
reporting this bug.
- Bugfix: On very rare occasions, the accompanying YASS level solver could falsely classify a level as
unsolvable.
+ Minor changes.
Version 1.629
- Windows 10 compatibility: The Windows 10 operating system ships with the default text size set to
150% of the unscaled size. This aggravates a problem caused by the new default behavior recently
introduced by the Windows operating system for text sizes bigger than 100%, which in effect makes all
texts displayed on the screen by the application look blurry. Sokoban YASC has always been a well-
behaved application and has always handled scaling issues itself. The only thing missing was to disable
the new default Windows behavior. In this new version, texts again always appear on the screen as they
should, but unfortunately, Windows still scales the application specific mouse cursors, making them look
ugly. If somebody knows how to disable this scaling, a tip will be highly appreciated.
+ Minor changes.
Version 1.628
+ Added a new minor feature: "Replay solutions for solved levels". After replaying a solution for the
current level, like the normal replay feature always has done, the application automatically advances to
the next solved level and replays it, and so on. To use it, keep the keyboard keys [Shift] and [Ctrl] pressed
while clicking the "Solution" button on the screen with the mouse. Alternatively, use the keyboard shortcut
key combination [Shift] + [Ctrl] + [L]. Thanks to Wayne Campbell for suggesting this feature.
+ Minor changes.
Version 1.627
- Bugfix: The accompanying YASS level solver had begun classifying some insolvable levels as invalid
levels rather than just unsolvable levels. Levels with an immovable box at a non-goal square were
affected. No harm was done since the level was unsolvable, so it was just a matter of the wrong
explanation appearing on the screen. Thanks to Valdis Berzins for reporting this bug.
+ Minor changes.
Version 1.626
+ The solution optimizer tool allows the user to specify a generic "default settings" optimization mode for a
given optimization task, leaving the decision about which mode to use to the currently loaded optimizer
plugin, which presumably offers some sort of default value selection. Now this actually used optimization
mode is shown on the screen while the task is running instead of just showing the text "default settings".
When the task has finished, the mode for the task reverts back to "default settings", so the original
request is kept intact for any further processing. Likewise, if the optimization was successful and
produced a new improved solution, then this new solution inherits "default settings" as optimization mode.
Thanks to Paul Voyer for bringing this up.
+ Minor changes.
Version 1.625
+ Updated the "KSokoban" skin by Anders Widell with animations, improved walls, and boxes with
different colors at floor squares and goal squares. Thanks to George Petrov, author of YSokoban, for
collaboration on this skin.
- Bugfix: During installation of a new version of the application on top of an existing version, there could
theoretically, but extremely unlikely to happen in practice, be a tiny so-called "memory leak", meaning that
a small amount of the available computer memory wasn't recycled after it had been used temporarily
during the installation. No harm was done. The leak has probably never occurred in practice, and even it
has, the leak was too small to have any impact on the application's ability to run, and it was gone when
the user closed the session with the application which installed the new version.
Version 1.624
- Bugfix: File names with "&" characters were not always displayed correctly on the screen. For instance,
in the "Open" window, the short file name on the file list was correct, but the full name displayed as a hint
text when the mouse cursor hovered over the file name was incorrect. The "&" character was omitted and
the next character underlined. This is the default treatment given to "&" characters by the Windows
operating system when text is displayed on the screen, and this behavior should be explictly disabled for
the file names. It was only a cosmetic error, and no harm was done. Thanks to Park Jubin for reporting
this bug.
Version 1.623
- Bugfix: There was a logical flaw in the duplicate finder variant which searches for levels similar (not
necessarily 100% identical) to the currently selected level. The flaw caused a few similar levels to be
overlooked. The more frequently used duplicate finder variants, which search for identical levels, were not
affected. Levels undergo a quite sophisticated normalization process before being compared. One of the
ingredients of the process is normalizing rotations and mirroring. This is important when searching for
identical levels, but it was a logical flaw also to apply it when searching for similar levels. Here it is
necessary to compare against all 8 rotations/mirroring forms of a level. Thanks to Wayne Campbell for
reporting this bug.
Version 1.622
- Windows 10 compatibility: The Windows 10 operating system ships with the default text size set to
150% of the unscaled size. This aggravates a long-standing bug in the Windows operating system (i..e,
not a bug in Sokoban YASC) related to the "Minimize" button on the upper right-hand corner of an open
window. When the user clicks "minimize" on a secondary window like the "Tools" window in Sokoban
YASC, the operating system is responsible for showing the minimized window at the bottom of the screen,
but with text settings bigger than 100%, the operating system sends the minimized window outside the
visible screen area, and it's not always possible to reactivate the application with Windows 10, leaving no
other option but to terminate the task abnormally using the task manager. Earlier, the keyboard shortcut
Alt+Tab, i..e, switching between the open applications, could always reactivate the application, also if
clicking the icon on the taskbar didn't work. As a work-around, the "Minimize" button is now disabled for all
secondary windows in Sokoban YASC. The only window which really needs the "Minimize" functionality is
the "Tools" window, and here the users can just as well - and probably already often do - remove the
application temporarily from the screen by clicking the application icon on the taskbar. Thanks to Larry
Woods for reporting this issue.
+ Minor changes.
Version 1.621
- Bugfix: Corrected a typo in the "Settings" window: "detroned" should be "dethroned". Thanks to Park
Jubin for reporting this typo.
Version 1.620
+ In the "Open level" window, the field with the level notes always started in read-only mode in each
session with the application. This was a deliberate choice, to protect the notes against stray keypresses,
but it can be argued that this is too conservative. Now the read-only state is kept between sessions, so
users don't have to enable editing repeatedly if they often edit level notes. This is also consistent with the
behavior implemented for solution notes in the "Snapshots and solutions" window, which always has done
it that way. Thanks to Paul Voyer for this suggestion.
Version 1.619
- Bugfix: The application wouldn't start an optimizer plugin if the level had the maximum size, i.e., 50x50
squares in the standard version, and 100x100 squares in the special edition. Instead, the message
"Invalid level" falsely appeared on the screen in the optimizer status field.
Version 1.618
- Alleviated a benign, subtle, and very small imperfection of the level file format, a phenomenon best
described as "false macros". The first level in a level file (only the first level) cannot have a title line
header with a "=" character because such a line will instead be interpreted as a key-value pair macro like
"Author=NN" belonging to the preceding file header section of the file. The first level may, however,
"cheat" by having a title in its comment lines below the board in form of a "Title: xyz" key-value pair, and
this title can contain "=" characters. When the program saves the file, this title is also written as a title line
above the level. The next time the file is opened, the program reads this new line, not as part of the level,
but as a new "false macro" definition belonging to the file header section because of the "=" character.
This happens repeatedly each time the file is saved and re-opened, each time adding one more "false
macro" line to the file header section. Now the program makes an effort to remove this rare type of "false
macros", so the file doesn't grow each time it's saved. Thanks to Larry Woods for reporting this issue.
Version 1.617
+ Added a new menu item to the popup context menu in the optimizer window: "Clear area of the board
selected for optimization". Sometimes, it's easier with a menu item than using the mouse to deselect the
area. Thanks to Findus for this suggestion.
+ Minor changes.
Version 1.616
+ Improved one of the less important supporting features in the level editor: "Normalize board, making it
rectangular" now flood-fills unreachable squares starting from the four sides. Earlier, it used a more
simple method, essentially "drawing lines with walls" to fill the unreachable squares starting from the four
sides. Because the "horizontal lines" could block the "vertical lines" and vice versa, this simpler method
sometimes overlooked opportunities for filling unreachable outer squares. Thanks to Anian Wu for
suggesting to improve this feature.
+ Minor changes.
Version 1.615
- Bugfix: There are two versions of Sokoban YASC: The standard version with a 50x50 board size limit,
and an experimental special version with a 100x100 limit. The latest special version had been assembled
the wrong way, so it suffered from occasional crashes. (Technical information: The large board size for the
special edition, and the special version had mistakingly been compiled with the same rather small stack
limit as the standard version.) Thanks to Anian Wu for reporting this bug.
Version 1.614
- Bugfix: On a shutdown or restart of the computer while Sokoban YASC was running, and if the user
had not by chance opened the level generator settings window during the session, and if some of the
generator settings had non-default values, then the application issued the message "The generator
settings have changed. Do you want to save the changes?" No harm was done even if the shutdown or
restart was forced and the operating system didn't wait for a response to the message. Any pending
unsaved level solutions found during the session would be picked up by the error recovery the next time
the application was launched.
+ Minor changes.
Version 1.613
+ Added an undocumented feature for selecting a push interval to be optimized by the optimizer. The
interval is given by the positions of a start marker and an end marker. Normally, when the user clicks and
drags the mouse inside the slider area, the nearest marker is moved. Now the middle mouse button
always selects and moves the end marker, and it toggles the "repeat interval" mode for the solution.
+ Added a new menu item to the optimizer menu in the "Tools" window: "Set optimization interval for all
selected solutions". It copies the interval and the interval repeat mode for the currently focused solution to
all the solutions selected for optimization. The new menu item can also be found on the right-click context
menu for the optimizer task list.
+ Minor changes.
Version 1.612
+ Added a skin script for importing skins from the "SokobanP" Sokoban clone.
+ Added optimal skin settings for new versions of the "Sokoban for Windows" skins "Classic" and
"GreenMetallic".
+ Added a new skin option for pushers and boxes: "Background color masks exterior pixels only". When
activated, all pixels inside the contour are part of the object, even if the pixel color matches the specified
background color. Sometimes this option can save the day when skin objects have colors too similar to
the background color. Otherwise, the affected interior pixels are transparent when the object moves
around on the board.
+ Minor changes.
Version 1.611
- Bugfix: In the "Tools" window, the solver, the optimizer, and the generator have almost the same screen
layout. The user can customize the size of the different group boxes. Changing the widths worked all
right, but setting the height of their common group boxes to something different than the default value
made the application reset these group box sizes to default values the next time the application was
opened. Thanks to Paul Voyer for reporting this bug.
- Bugfix: In the "Solver" window, if the task list was empty, then activating the button "Add remaining
levels from the opened collection to the task list" had no effect if the opened collection contained exactly
two levels. Thanks to Matthias Meger for reporting this bug.
+ Minor changes.
Version 1.610
+ Each window, e.g., the "Tools" window and the "Open" window, has its own font settings. Normally, an
application just inherits these window font settings from the user's global system settings to ensure a
uniform overall appearance of the applications running on the computer. It can, however, be practical to
have the option to adjust the fonts, in particular the font sizes. Now the window fonts have been made
customizable, with individual settings for each window. It goes without saying, that increasing the font size
above a certain limit will break the layout of any window, and that it's up to the user - after experiments
with different sizes - to choose suitable values which don't break the window layout.
+ Added a new minor option in the "Settings" window: "Control | Tools | Optimizer | Separate "best moves"
and "best pushes" solutions: Initialize optimization accordingly". The default value is "Yes", matching the
earlier behavior for levels with separate "best moves" and "best pushes" solutions. When the option value
is "No", these solutions are initially put on the task queue with "Settings" as selected optimization method
(leaving the choice to the optimizer plugin and its settings) instead of "Moves/pushes" and
"Pushes/moves" respectively. Thanks to Paul Voyer for this suggestion.
- Bugfix: Remembering the widths of the three horizontally arranged panels in the solver and the
optimizer windows from one session with the application to the next had stopped working in one of the
previous releases.
+ Minor changes.
Version 1.609
+ Added about a dozen small improvements and changes, most of which are important even though they
are too small to deserve a detailed description.
Version 1.608
- Added a small refinement to the level file reader, so it doesn't misinterpret a text line with a level title
like "#50 (3)" as a board line. All the characters happen to be valid board line constituents. To interpret the
numbers "50" and "3" as run-length encoding counts, the reader just required a valid board line character
after the number. The new version notices that "3" can't be a run-length encoding count because it's not
followed by a character denoting a wall, a floor, or an object on the board. Titles ending with a number like
in the example occurs frequently if the user makes a compilation with levels from several level sets. When
necessary, Sokoban YASC adds such numbers to keep all titles unique.
- Bugfix: The duplicate finder tool offers the convenient feature "Synchronize solutions for duplicate
levels", which distributes solutions to all similar versions of a level, no matter in which level collection the
level is located. On rare occasions, the synchronization missed an opportunity for copying a solution from
one level to another. Thanks to Findus for reporting this bug.
+ Minor changes.
Version 1.607
- Bugfix: The duplicate finder tool offers the convenient feature "Synchronize solutions for duplicate
levels", which distributes solutions to all similar versions of a level, no matter in which level collection the
level is located. On rare occasions, the synchronization missed an opportunity for copying a solution from
one level to another. Thanks to Findus for reporting this bug.
Version 1.606
- Bugfix: On rare occasions, the accompanying YASS solver could terminate abnormally with an "Access
violation" error message. If the solver against all odds found a packing order for a large level with more
than 85 boxes, but less than 125 boxes, then a flaw in a guard against overflowing an internal table could
kick in if the number of intermediate parking squares in the packing order exceeded a certain percentage
of the number of boxes on the board.
- Bugfix: On rare occasions, the accompanying YASS solver could get caught in a long packing order
calculation without noticing that a user-defined time limit should terminate the search. Normally, the
calculation checks the time limit frequently, but there was one path through the calculation which ran
unchecked, something which affected very large levels only. No harm was done since the user could still
terminate the solver manually.
Version 1.605
+ Minor changes.
Version 1.604
+ Minor changes.
Version 1.603
- Bugfix (1.594): In connection with the "Optimize a range of pushes" feature, there is the supporting
minor feature "Create level based on selected range of pushes and copy it to the clipboard". It worked
fine, and the created level could be imported and processed by any text editor. The level could, however,
not be imported again directly from the clipboard by Sokoban YASC without triggering an error message
on the screen because the level name contains several "/" characters, as in "Level 22, Solution/Moves
876/340, {Interval 125/45 - 296/111}". Many operating systems use "/" as separator between folder names
and file names instead of "\". To enhance compatibility, Sokoban YASC treats both characters as
separators, and this caused havoc during the import of the level. Thanks to Findus for reporting this bug.
Version 1.602
+ New optimizer feature: "Partition solution into subintervals". For a large level with a long solution, it's
sometimes helpful to split the solution in subintervals and process them individually by the optimizer.
Since version 1.594 it has been possible to select an interval to be optimized, and it's this feature which
now has been extended, so starting from the selected interval, the rest of the solution can be split
automically into subintervals of the given size and then optimized. To use this feature, first select an
interval. Then open the context menu by right-clicking the task on the task queue with the mouse. Here
you'll find the new menu option "Partition the rest of the solution into subintervals". Background
information: The accompanying YASO and YASS optimizers split large solutions into subintervals
automatically, if the solution size and the memory limits of the computer make this necessary. The new
manual split feature can be seen as a light-weight variant of the automatical split, and since the difference
can be many hours of computation time for large solutions, the new manual split feature is often
preferable. Thanks to Findus for statistics showing that this new feature is useful.
+ New optimizer option: In the accompanying YASO and YASS optimizers, the retrograde analysis in the
precalculation of deadlocks can be disabled (by setting "deadlock complexity" to 0), so only "first-order"
deadlocks are found. This is useful in connection with the new subinterval optimization mentioned above.
If the intervals are small and the level is large, then the full-blown precalculation of deadlocks with
retrograde analysis can take longer time than the actual optimization, and with small intervals the benefit
of having a large set of deadlocks available during the optimization is negligable. This new option makes
the deadlock complexity a more dynamic value than it used to be, and for that reason, it's now subject to
the expire-after-24-hours policy which protects the optimizers against settings tailored for one specific
puzzle and then forgotten by the user.
+ Added new option to 'Settings': "Control | Tools | Optimizer | Intervals | Subinterval overlap (%)" with
default value 10.
+ New feature: "Make screenshots". Press [Ctrl]+[.] to make a screenshot of the current game position.
Press [Shift]+[.] to replay the game from the current position and make a screenshot for each move. The
screenshots are saved in the folder "Application data folder\Screenshots", overwriting any existing files
with no warnings.
- Bugfix: After importing a previously saved solver task list or optimizer task list, the editor window
showed an empty board, or more precisely a wall-filled board. No harm was done, and the level showed
up correctly again after returning to the main window and then re-opening the editor.
+ Minor changes.
Version 1.601
- The text format for puzzles stored in a text file allow run-length encoding of the boards and using "|" as
row separators when multiple board rows are combined on a single text line. A "|" at the end of a text line
is optional and may be omitted. The newly added support for empty interior rows (version 1.600) was,
however, too restrictive about text lines ending with such a redundant "|". As expected, a text line with a
single "-" was interpreted as an empty interior row candidate (depending on the context), but if the line
ended with "-|", with nothing but empty rows in the line, then it was not interpreted as an empty interior
row candidate. Thanks to Matthias Meger for noticing and reporting this issue.
Version 1.600
+ Added support for levels with interior empty rows. There are a few levels in existence with empty rows
for artistic purposes. Sokoban YASC has always been able to let the user play such levels, but the
application didn't allow the user to load them, so in effect this feature was unavailable. The reason was,
that the level file format specification had no syntax for a safe interchange of levels with empty rows. This
has changed now, thanks to a suggestion by Anian Wu. In levels files, an empty square on the board is
typically represented by a space character, but "-" or "_" are also allowed as alternatives when it's
important or convenient with a representation, which graphically makes it easier for a human reader to
distinguish the individual squares, and which avoids the common "delete multiple spaces" optimization
found in many text processing applications. The new file format specification states that interior empty
rows are allowed and written with at least one "-" or "_" in the row. Given that an application can check
there are normal board rows both before and after an empty interior row, this small alteration of the syntax
is unlikely to introduce many new misinterpretations when arbitrary text files are scanned for Sokoban
levels. For implementors, note however that because of the run-length encoding feature, the textual
representation of a board row is not necessarily a complete text line. Thanks to Anian Wu for suggesting a
syntax for interior empty rows, thanks to Matthias Meger and Eric Sunshine for valuable feedback, help,
and discussions about this new feature, and thanks to Eric Sunshine for supplying the new text in the file
format description.
+ Added new option to 'Settings': "Control | Windows | Tools window | Collection name in title-line" with
default value "No". Thanks to Findus for this suggestion.
+ Minor changes.
Version 1.599
+ Added new option to the alternating optimizations machinery in the optimizer tool: "Trigger alternating
optimizations at least once", as opposed to "Trigger alternating optimizations only after finding
improvements", which is the default behavior and which until now has been the only option. Thanks to
Findus for this suggestion.
- Bugfix (1.567): Scenario: In the "Capture levels and skins" tool, at the "Skin" step, selecting to use the
captured skin for playing the game in the main window. If the "Settings" window hadn't been visited earlier
during the session, then all settings, except those related to the captured skin, were reset to default
values.
+ Minor changes.
Version 1.598
- Bugfix (1.597): In the "Tools" window, resizing the thumbnail level preview and the other panels had
stopped working for all three tools where it should be applicable, i.e., the solver tool, the optimizer tool,
and the level generator. Thanks to Findus for reporting this bug.
Version 1.597
+ Added a "Select the entire image" button to the "Board" step in the "Capture levels and skins" tool. The
functionality has always been available via the menu entry "Edit | Select all", but its usefulness justifies
this more prominent exposure. Thanks to Anian Wu for this suggestion.
- Bugfix: Scenario: In the "Capture levels and skins" tool, at the "Board" step, specifying where the board
is located in the image. If the zoom factor was bigger than 100%, and if the top or left coordinate of the
board was zero, then clicking-and-dragging the mouse to resize the board rectangle didn't work properly.
Version 1.596
+ Improved the graphical quality a little when replaying moves in this scenario: The skin in use has very
different images for "box/box-on-goal" and/or "pusher/pusher-on-goal", and a box is being pushed from a
non-goal square to a goal square, or vice versa, without changing direction. Typically, these skins benefit
a lot from the option "Use box/pusher-on-floor images for animation also when the object moves across a
goal". When this option is enabled, a box doesn't appear as the "box-on-goal" image until the box is put to
rest at a square when the pusher changes direction either to push another box, or to push the box again
from a different direction. There was, however, a tiny fraction of a second at the transition from a non-goal
square to a goal square, where the box was shown as a "box-on-goal" even when the push direction
didn't change. With very different "box" and "box-on-goal" imagery, and depending on the replay
animation speed, this could look like flicker. The improvement only applies to the replay animation. "Do
move" and "undo move" animations during gameplay have the same imperfection, but here it's less
noticeable because the animation speed is typically much higher than it is for "replay".
- Bugfix: The "Capture levels and skins" tool allows capturing levels even if they don't have a proper
border, i.e., a rim filled with walls or boxes at goal squares. This doesn't happen often, but when it does,
the capture tool automatically adds a border to guarantee that the level can be saved in a format which a
Sokoban clone can recognize and open correctly. There was, however, the problem that before the border
was added, the level had been exposed to normal postprocessing, which includes being trimmed for any
empty columns and rows. For some borderless levels, this trimming can eliminate board squares needed
by the pusher to move around on the board. The new behavior is that a borderless level is never trimmed,
but simply consists of the captured area in its entirety. Thanks to Anian Wu for reporting this bug.
+ Minor changes.
Version 1.595
- Bugfix (1.594): Scenario: Optimizing a solution-slice succeeded (see version 1.594 release notes), and
"glue" moves had been inserted automatically to combine the optimized slice with the rest of the solution.
In that case, the optimized solution showed up on the optimizer task queue with a title like "Solution
[moves]/[pushes]", but without counting the added "glue" moves. No harm was done because it only
affected the appearance on the task queue. Later, when the level was updated with the optimized
solution, the title contained the correct number of moves. Thanks to Findus for reporting this bug.
Version 1.594
+ New feature: "Optimize a range of pushes". The optimizer tool now supports specifying a range of
pushes to be optimized, as opposed to always optimizing the entire solution. This feature comes in handy
when working with levels and solutions which are too large for the optimizer. Note that optimizing a non-
tail slice gives rise to two or three obstacles for a successful optimization. An optimizer doesn't
necessarily produce a move sequence, where the pusher ends at the same square as it did in the original
sequence. If the pusher ends in the same access area, then Sokoban YASC helps and inserts optimized
non-pushing moves between the last push in the optimized slice and the first push in the non-optimized
tail. Depending on the required number of "glue" moves, this can make the combined solution worse than
the original, despite the fact that the optimizer improved the processed slice. If the optimized slice ends
with the pusher in a different access area than the original, then there is nothing to do, and the optimized
slice is discarded. In "Settings", there is a new option related to this new feature: "Control | Tools |
Optimizer | "Wall-ify" boxes outside range of pushes to be optimized". The default value is "Yes", meaning
that boxes are treated as walls if they aren't pushed in the selected slice of the solution. This reserves the
available memory for trying to push the boxes in the selected slice. For small levels and with optimizer
settings which don't cause memory to be exhausted when all boxes are considered, it may be slightly
better to change the value to "No". To select a range of pushes, use the slider which appears when the
mouse cursor is moved over the level name field above the board. Thanks to Matthias Meger for valuable
feedback on this new feature, as well as the next on the list, and thanks to Findus for help in finding the
motivation to implement these features.
+ New feature: "Optimize an area of the board". The optimizer tool now supports specifying that only
pushes in a selected area of the board shall be optimized, as opposed to always optimizing pushes all
over the board. This feature comes in handy when working with levels and solutions which are too large
for the optimizer. Note that currently, this feature only works with the two accompanying optimizers YASS
and YASO because the optimizer plugin interface doesn't have a standardized syntax for area selection.
To select or unselect an area, right-click the board and drag the mouse.
+ In connection with the new "optimize a range of pushes" feature, a minor supporting feature has been
added: "Create level based on selected range of pushes and copy it to the clipboard". It can be found on
the "Edit" menu and appears on the right-click popup context menu as well. There is a new option in the
"Settings" window for it: "Control | Level format | Copy to clipboard | Export level based on solution slice:
Include titles", so level and solution names can be suppressed if the level is to be imported in another
Sokoban clone which only can read plain boards and solutions without texts.
+ Added a minor feature to the "Optimizer" tool: "Repeat alternating optimizations only if moves, pushes
or box lines improved". With alternating optimizations enabled, the default behavior is like it always have
been, i.e., that an improvement of any of the six metrics triggers a new round of optimizations. The new
feature can be found in the optimizer main menu. When "Repeat" is enabled, a new menu item "Settings |
Alternating optimizations... | Repetition settings..." appears on the menu. Thanks to Findus for suggesting
this feature.
- In the accompanying YASO optimizer, the multithreaded vicinity search method has been substituted
by its predecessor, a single-threaded search. For small levels, the multithreaded version may be faster,
but for medium and large levels, the synchronization overhead required by the multithreaded search far
outweights the benefits. Sometimes, the multithreaded version is more than 10 times slower when
optimizing moves and pushes, and optimizing boxlines is even worse. Here a factor 40 has been
observed. The first phase of the vicinity search, which generates the box configurations for the search in
the second phase, is still multithreaded because it scales well with the number of processors. Thanks to
Findus for providing statistical material about the two different vicinity search versions.
+ Minor changes.
Version 1.593
+ Changed the sound settings so only "Level solved" and "Illegal move" sounds are enabled by default. It
has always been questionable whether a puzzle game like Sokoban should be accompanied by sound
effects, but at least it was tolerable in Sokoban YASC which by default always has played them discreetly
with only 25% of the user's normal sound volume. However, it looks like this programmatic adjustment of
the sound volume doesn't always work anymore, for instance on computers which transfer sound and
video through a single HDMI cable to the monitor and the speakers. Here Sokoban YASC cannot control
the sound volume, and the sound effects are played with the user's normal sound volume. In that case,
the sound effects are nothing but a nuisance, also because they are neither technically nor artistically
good enough for that.
+ Decreased the loudness of some of the sound effects, so all sounds have more similar levels.
+ Minor changes.
Version 1.592
- Bugfix (1.591): In the accompanying YASO optimizer (and in the single-threaded version of the
optimizer in the combined YASS solver and optimizer), the "Quick vicinity search" optimizations had
stopped running as many times as intended. An example: With settings 20/10, the intention is to perform
quick optimizations with 10/0, 20/0, and 999/0 until no more optimizations can be found, before the more
time-consuming full 20/10 search is launched. The optimizer only performed the first and the last of the
intended quick optimizations, i.e., 10/0 and 999/0 in the example. This didn't influence the quality of the
optimization, it could just increase the running time slightly.
+ Minor changes.
Version 1.591
+ In the accompanying YASO optimizer (and in the single-threaded version of the optimizer in the
combined YASS solver and optimizer), the first of the two phases in the "Vicinity search" method now runs
15-70% faster for some solutions. The first phase generates box configurations which are small variations
of the positions along the solution path. This significant improvement is the result of filtering out a large
group of duplicate box configurations before they are even generated, as opposed to the old method
where these duplicates first were filtered out when they were added to the database. Thanks to Matthias
Meger for figuring out the answer to the difficult question why the new filter in its first incarnation didn't
produce exactly the same box configurations as the old method, and for showing how to reinstate that
property.
+ Added a new option to the settings for the level generator: "Discard trivial opening pushes". Trivial
opening pushes are forced pushes, where there only is one legal push because the player has "carved" a
tunnel on the board, and a box is blocking the exit. Because of the way a level generator works, it's
inevitable that this form of "tunnel-digging" is very popular because it adds a few pushes to a generated
level, but trivial forced pushes never contribute to the complexity of a level. The level generator has
always been able to discount trivial pushes at the end of the game. These so-called "tail pushes" simply
bring the boxes directly to their final goal squares.
+ In contrast to the YASGen stand-alone level generator, the version with a proper graphical user
interface built into Sokoban YASC didn't really support "Discount trivial tail pushes" even though there
was an option for it on the generator "Settings" window. Now the built-in version of the level generator
also supports this option.
- Bugfix (1.586): In the "Capture levels and skins" tool, the newly added minor feature "automatically add
a wall-filled border if the level has open sides" sometimes added a border when it wasn't necessary.
Thanks to Anian Wu for reporting this bug.
- Bugfix: In the level editor, clicking "Select all" had stopped showing the correct "Select" mouse cursor
on the screen. The "Select" drawing tool worked correctly, but with the "Erase" mouse cursor appearing
as visual indicator of the currently selected drawing tool.
+ Minor changes.
Version 1.590
+ In the accompanying YASS solver, the awkward pause in the so-called "perimeter search" between the
backward search and the forward search has been eliminated. The pause occurred when all the game
positions found during the backward search were stored on disk. Depending on the number of game
positions, this could take minutes with a magnetic hard disk drive because the storing operation wasn't
implemented efficiently, writing only one game state at a time to the disk. Now it's implemented with
buffering, so only a few disk write operations take place, and then the entire operation typically only takes
a few seconds. The pause was particularly awkward because for many levels solvable by the perimeter
search, the solution is found soon after the forward search begins, making the pause feel even more as a
waste. Eliminating the pause has also made it possible to remove the artificially reduced maximum
number of backward search game positions, which was mentioned in the version 1.589 release notes.
+ Minor changes.
Version 1.589
- Bugfix (1.588): The accompanying YASS solver had stopped working for many levels which hadn't a
goal-room theme. When the specialized goal-room solver module doesn't find a solution, the solver
switches to a so-called "perimeter search", which consists of first a backward search and then a forward
search trying to find a meeting point between the two frontiers. The deadlock detection in the forward
search hadn't been reset properly after the goal-room solver module, causing most game positions falsely
to be discarded as deadlocked, so no solution was found unless the initial but weaker backward search
found a solution on its own.
- Bugfix (1.588): In the accompanying YASS solver, all game positions found during the backward
search leg of the so-called "perimeter search" are stored on disk. That can take a long time, and to
ensure there still is room for a forward search within a user-specified time limit, the backward search only
visits and saves a limited number of game positions, no matter how much memory the solver has been
given. By mistake, the forward search in the latest version of the solver didn't use all the available
memory either, because it by mistake inherited the artificially reduced game positions capacity from the
backward search.
Version 1.588
+ Small improvements of the accompanying YASS solver have increased its score from 75 to 79 solved of
the 90 levels in the XSokoban level set, the quasi standard Sokoban solver test suite. (Current status: 84
solved.)
Version 1.587
- The new 400% zoom option in the "Capture levels and skins" tool didn't take into account that with such
a high magnification, it's necessary to compensate for the pixel center position when the user specifies
where the board is located in the image. If the user entered the correct pixel coordinates of the board, the
grid appearing on the screen with zoom 400% was 2 pixels off, depicting the center of the unscaled pixel
instead of its top-left corner. That was confusing because it looked as if the grid position needed
adjustments. If the user did that, it probably wouldn't affect the capture of the level from the image, but the
skin capture would be inaccurate, typically 1 pixel off, and in order to use the skin, the user would have to
back and adjust the coordinates once more to get the correct selection.
+ Minor changes.
Version 1.586
+ Added a minor feature to the "Capture levels and skins" tool. Previously, the zoom factor options were
100% and 200%. This has been extended to 100%, 200%, and 400%. The reason this wasn't done from
the beginning is that the memory footprint can be huge, growing exponentially with the size of the image.
This is still a concern, given that the user might have other memory consuming tasks running in the
background, e.g., a solver and an optimizer. Now the capture tool allows a 400% zoom for images up to
2600 x 1600 pixels (a somewhat arbitrary limit), and as an attempt to keep in bounds the memory
consumption, the zoom factor is always reset to 100% when the user exits the "Tools" window and returns
to the main window. Thanks to Anian Wu for bringing this up.
+ Added a minor feature to the "Capture levels and skins" tool. If a level isn't completely surrounded by
walls and/or boxes at goal squares, then the capture tool now automatically adds a wall-filled border, not
because it's necessary to play the level - Sokoban YASC is deliberately very forgiving about the level
format and only requires that the level is playable - but because a wall border is required before Sokoban
clones can read the level from the text files, which normally are used for storing Sokoban levels. It's a
known phenomenon that users can play and save "no-border" levels in Sokoban YASC, but that these
levels cannot be imported again. This is a feature and not a flaw because it gives the user as much
flexibility as possible. Now the capture tool contributes by adding a border, if there isn't one already and if
there is room for it. If adding a border would exceed the maximum level size, the level can still be saved
to a file, or copied to the clipboard, but the user won't any longer be allowed to play it in this application.
Thanks to Anian Wu for bringing this up.
+ Added a minor feature to the "Capture levels and skins" tool. At the point where the user enters
information about the contents of each square on the board, there is a new "Edit..." button which allows
the user to copy the already entered squares into the level editor, leave the capture tool, and instead
begin editing the board in the level editor. This might be useful in the scenario, where the captured level is
incomplete or illegal, in which case the capture tool won't allow the user to complete the level and
advance to the "Save and play" step. Again, this new feature isn't strictly necessary because if the level is
illegal or incomplete, the user will have to fake the missing information, and this can just as well be done
using the capture tool, with the advantage of having the original captured image to look at in the
background, but sometimes, it may be easier or more comfortable to finish the level by using the level
editor. Thanks to Anian Wu for bringing this up.
+ Added a minor feature to the "Capture levels and skins" tool. The user specifies where the board is
located in the image by moving the mouse and clicking at the sides of the board. Now the user can nudge
the lines marking the sides of the board into their proper positions by using the keyboard arrow keys.
Typically, this is more convenient and more intuitive than adjusting the selection later by using the spin
edit controls. Thanks to Anian Wu for this suggestion.
- Bugfix: The "Capture levels and skins" tool couldn't process captures with almost microscopic boards.
When the column width or row height for the squares on the board was 4 pixels, or less, the processing
stopped with a "Division by zero" error message. Thanks to Anian Wu for reporting this bug.
- Bugfix: After creating a new level in the level editor, and then immediately going to the optimizer
tabsheet with no other optimization tasks on the queue, the thumbnail image of the new level didn't show
up properly if the user changed the size of the thumbnail image. Thanks to Anian Wu for reporting this
bug.
+ Minor changes.
Version 1.585
- Bugfix: For some types of very large levels, the accompanying YASS solver plugin became
unresponsive when it precalculated a goal area packing order. Selecting "Terminate" had no effect
because the calculation in progress took too long time to run to its completion. The only way to stop it was
to terminate the application, which still was possible, despite the hung plugin.
Version 1.584
+ Minor changes.
Version 1.583
- Bugfix: For some types of very large levels, the accompanying YASS and YASO solver and optimizer
plugins became unresponsive when they precalculated the deadlock situations. Selecting "Terminate" had
no effect because the calculation in progress took too long time to run to its completion. The only way to
stop it was to terminate the application, but because of the hung plugin, the shutdown procedure didn't
work gracefully either, but ended with a Windows error message about the application having stopped
working.
Version 1.582
- Bugfix (1.567): With the introduction of the "Capture levels and skins" tool, a bug slipped into the
installation procedure. During the installation of a new version of the application on top of an existing
version, the installation procedure terminated abnormally with an "Access violation" error message. The
installation proper had run to its completion at that point, and the installed application worked correctly, so
it was merely a matter of the installation procedure not shutting down in an orderly manner.
Version 1.581
+ Added a new minor feature: The file conversion methods (found on the menu in the "Open" window)
has been extended with a "Normalize board" conversion, and a variant which additionally makes the
board rectangular, with all outer cells filled up with walls. Previously, these normalizations could only be
made in the level editor, applying them to the currently loaded level. It's practical also to be able to
perform these normalizations for one or more level collections as a single operation. Thanks to John
Polhemus for this suggestion.
Version 1.580
+ Working with the solver and the optimizer, and in particular when several levels and solutions are to be
processed, it can be practical to save the task list from one session to the next. To that end, the solver
and the optimizer now allow exporting and importing the task list. This new feature can be found in the
"File" menu. Please note that import/export introduces an unbounded time gap between creation and
execution of a task. It's the user's responsibility that the original level still exists at the time the task is
executed. If not, the task will still run to its completion, but the result won't be saved anywhere.
- Bugfix: The shutdown procedure had stopped working under some circumstances. Sometimes, the
application terminated abnormally if a solver or optimizer was running in the background at the time the
user closed the application. No harm was done because next time the application was launched, the error
recovery mechanism caught any pending unsaved solutions produced by the solver and optimizer
plugins.
Version 1.579
+ In reverse mode play, the player starting position is now discreetly marked on the board. This helps
when the boxes form different "pockets", where the reverse mode game first is solved when the player
ends in the correct zone. Thanks to Raymond Groenestein for this idea.
+ Minor changes.
Version 1.578
+ Minor changes.
Version 1.577
- The function "Save level as a new file..." in the main game-playing window provides more functionality
than promised, and more than it's obligated to offer. When the user either deliberately or by happenstance
specifies the name of an existing file (different from the original name), then "Save as..." asks the point-of-
no-return question "Do you want to overwrite the existing file?" This is normal behavior for this type of
functionality, and the user has the responsibility to make the decision, but users could be tempted to
ignore the question and rely on the observed behavior: If the existing file was a Sokoban level file, the
level was added to the file instead of overwriting it. This could be seen as a feature, whereas it in reality
only is a safety net which seldom hurts. It was added in version 1.559 in connection with the "Support for
running multiple instances of the application concurrently" feature, which introduced the necessary
machinery. There was one scenario where the safety net didn't kick in: If the most recently viewed level
file in the "Open" window was identical to the destination file for the "Save as..." operation, then "Save
as..." did overwrite the existing file, as it says it will, instead of copying the selected level to the existing
file. Now the behavior has been made consistent, so users in effect can use "Save as..." as "Copy level to
existing file", even though this functionality exceeds what "Save as..." is obligated to do. Thanks to Paul
Voyer for reporting the problem with this feature.
Version 1.576
+ Minor changes.
Version 1.575
- Bugfix: On rare occasions, the automatic deadlock detection falsely reported a deadlock situation.
Technically, the culprit was the corral deadlock detection mechanism. It did find the correct answer, i.e.,
that the game position wasn't a deadlock, but even so, it sometimes gave the wrong answer when a box
outside the fenced-in area escaped from the corral by passing through it. Thanks to Jordi Domenech for
reporting this bug.
Version 1.574
+ Minor changes.
Version 1.573
+ Added a new minor feature: "Suppress level titles and author names when exporting levels to the
clipboard". In the "Open" window, exporting level sets to the clipboard has always included level titles and
author names. This is the appropriate choice, and any decent Sokoban clone will bypass text lines with
non-board characters, so it should not be a problem when the exported level set is meant to be imported
in another Sokoban clone. However, there are clones with a primitive import function which rejects level
sets with anything but raw board lines in the file. Thanks to Paul Voyer for bringing this up.
+ Added a new minor feature: In the optimizer window, a new menu item has been added to the right-click
popup menu for the solutions table: "Reset optimization method to 'Settings' for the selected solutions".
Previously, if the task list contained many solutions with specialized optimization methods like "box
lines/moves" after a batch run with alternating optimization methods, it could be tedious to reset the
methods manually if a new run with default settings was to be conducted. Thanks to Findus for bringing
this up.
Version 1.572
+ Added a new minor feature: "Calculate pushes lower bound" which is available via the keyboard
shortcut "0" (the digit zero, not the letter "O"). Normally, the calculation finds the result almost instantly,
but theoretically, the calculation time can explode for large levels. To that end, there is a time limit for the
calculation in 'Settings': "Control | Pathfinding | Maximum pushes lower bound calculation time". The
program code for the calculation has always been present in the YASS solver, but it was never made
available to the end user until now.
+ Minor changes.
Version 1.571
+ Added new levels by David W. Skinner, including built-in solutions. Currently, there are built-in solutions
for all levels bundled with the application.
- Bugfix (1.570): The deadlock detection has always been very robust, but ironically, adding even more
safety code suddenly caused false "frozen box" deadlock warnings under some circumstances.
+ Minor changes.
Version 1.570
+ The application has always had the undocumented minor feature "Show board coordinates" which is
reachable via the keyboard shortcut "Ctrl+Alt+F2". When enabled, it shows the board coordinates for the
square currently pointed to by the mouse. This feature has now been made official by listing it in the
"Settings" window as "Control | Path finding | Show board coordinates". Thanks to Findus for this
suggestion.
+ Minor changes.
Version 1.569
+ In the "Extract levels and skins from images" tool, the user specifies where the board is located in the
image by using a combination of "point-and-click-on-the-image" operations with the mouse, and fine-
tuning adjustments with the spin edit controls for board width, board height, column width, etc. When
specifying the outline of the board it's often practical to have the choice between freezing either the
number of columns and rows, or the size of the columns and rows. To that end, there is a "Lock" check
box which, when checked, freezes the size of the columns and rows. The lock was, however, only applied
to adjustments made with the spin edit controls, and not when the user made more convenient "point-
and-drag" operations with the mouse. Thanks to Raymond Groenestein for reporting this omission.
Version 1.568
- Bugfix: There were some minor layout inaccuracies in the new level capture tool window when the
Windows operating system used small fonts, i.e., the default 100% font size. Thanks to Raymond
Groenestein for reporting this.
- Bugfix: After seeding the level generator with a fixed template, and after starting the generator, the
thumbnail view of the seed level didn't always show up correctly on the screen. The board could be
invisible if the template had connected goals, and backward search had been selected as generator
method. It was only a cosmetic error, and no harm was done. The other level candidates showed up
correctly, and the generator gave all candidates a proper treatment.
+ Minor changes.
Version 1.567
+ Major update: A new "Extract levels and skins from images" tool has been added to the application.
Thanks to Raymond Groenestein for suggestions, inspiration, help with the English texts, and in particular
for the right and bright idea to base such an extraction tool on what essentially is a Sokoban level editor
with the added twist that its background image is the image from which the user wants to extract the level
and/or the skin. Also thanks to all who have helped testing the new tool.
+ Minor changes.
Version 1.566
+ Minor changes.
Version 1.565
+ Minor changes.
Version 1.564
- Bugfix: Sokoban YASC supports importing levels in run-length encoded format, but the import failed if
the level had maximum width (50 columns).
Version 1.563
- Bugfix: In the "Load skin" window, Sokoban YASC has a tool for editing textual information embedded in
a skin image. Putting settings and skin information directly in the image makes a skin self-contained, so
distributing a skin is as simple as it can be. This editor tool didn't take into account that Sokoban YASC at
a time added support for loading skins in PNG image format, but without also adding support for saving
images in PNG format, a task which requires substantial additional machinery. The application silently
changed the updated image to BMP format without changing the file name extention to ".bmp", and even
though the image was intact and accessible from dedicated image editors and viewers, it couldn't be
loaded by Sokoban YASC anymore because of the wrong file name extension. The new version sets the
correct ".bmp" file name extension and notifies the user about the format change.
+ Minor changes.
Version 1.562
+ Added tailor-made settings for some new "SokoSkinner" skins to achieve the best graphical results.
+ Minor changes.
Version 1.561
+ Improved the import of skins in Sokoban++ format by changing which imagery is used when objects
(players and boxes) move around on the board. Skins contain separate drawings for objects at non-goal-
squares and goal-squares. By default, both sets of drawings are put to use when objects are standing still
and when they are moving. Some Sokoban++ skins are not designed with move animation in mind, and
overall it produces a more stable move animation for the existing Sokoban++ skins when non-goal-square
drawings are used as long as the object moves, no matter whether the object is located at a non-goal-
square or a goal-square. Additionally, the Sokoban++ import script has been enhanced with tailor-made
settings for several "SokoSkinner" skins to achieve the best graphical results.
Version 1.560
+ There is the oddity that the built-in default skins don't match the default values in the "Settings" window
completely. When the user loads a default skin normally from the "Settings" window, then everything
works correctly. If the user instead attempts to load the standard skin by resetting the graphics settings in
the "Settings" window by clicking the "Default settings" button, then the default "red boxes" skin shows up
as expected, but its box highlight animation has minor deficiencies for some scale factors. This
discrepancy has been solved now by letting the application change the relevant settings from "default
values" to "default skin values" when appropriate, so the user won't notice any difference between the two
methods for loading the standard skin.
+ Fine-tuned the settings for the "yellow crates" built-in default skin. Previously, the crate highlight
animation had minor deficiencies for some scale factors.
Version 1.559
+ Improved the support for running multiple instances of the application concurrently. It has always been
possible to run multiple instances of the application concurrently, but it was dangerous to do it. When a
level file is opened, all its levels are loaded from the harddisk into the computer memory (RAM). Later,
when the user leaves the level file (either by loading another file or by closing the application), the entire
file is written back to the harddisk if anything has changed in one of the levels. This meant that if the user
opened the same file in multiple instances and updated it in any way, then the "last saving instance won
the entire file", meaning that updates to the file from other instances were lost. Now the application
checks for competing updates to a level file when it's written back to the harddisk. The synchronization
avoids loosing snapshots, solutions, levels, and level changes; but it's important to keep in mind that the
synchronization is not and cannot be perfect. Two major limitations are: 1) Textual information like level
notes are "atomic", so one of the saving instances still "wins". 2) Level matching is only implemented as
an exact match (as opposed to the sophisticated matching in the built-in duplicate finder), so even the
smallest trivial modification of a level leads to duplicate levels (but more importantly, their snapshots and
solutions survive and the solutions can be unified later by the duplicate finder, or manually by the user).
+ The size of the "thumbnail" level preview in the "Tools" window can now be adjusted according to the
user's preferences. Earlier, it was only possible to adjust the width because changing the height "steals"
work space from the more important task lists, e.g., levels to solve, and solutions to optimize. The typical
computer monitor panel size has grown since the application was designed, and nowadays there is
normally ample room for both an above minimum height "thumbnail" preview, and a reasonable number of
visible items on the task lists.
+ Improved the default "red boxes" and "yellow boxes" skins by adding Gerry Wiseman's animations of
players and boxes. The animations have long been available in the external versions of these skins,
which also are bundled with the application, but now the built-in default skins benefit from them as well.
The third default skin, "yellow crates", has also been improved with a box animation, albeit a simple one.
+ Improved the default "red boxes" and "yellow boxes" skins by using Gerry Wiseman's editions of the
"Games 4 Brains" images of walls, players, and boxes. The edited images have long been available in the
external versions of these skins, which also are bundled with the application, but now the built-in default
skins benefit from them as well.
Version 1.558
- Fixed a problem with the level generator when the user locked/unlocked the computer, e.g., by using a
password-protectled screen saver. The generator triggered an "Access denied" message, and the
message window ended up behind the application window, so for the user it looked as if the application
had stopped responding. The error message window would first become visible when the user switched
to another application running on the computer. The generator continued normally after the user closed
the error message window, so no harm was done. The generator already had some machinery to
suppress the error message, but it wasn't always applied. Thanks to Anthony Brouse for reporting this
problem.
Version 1.557
- Corrected a typo in the puzzle file format description. Thanks to "carlossokoban" for reporting it.
Version 1.556
+ Major update: The accompanying solution optimizer has changed from a singlethreaded to a
multithreaded program, so it now can use all available processors on the computer for the "Vicinity
search" optimization method. That's the most powerful of the implemented optimization methods, but it's
also a very time-consuming task. Therefore, it's a most welcome improvement that multithreading reduces
the running time by 50% or more, when the computer has 2 or more processors. The new optimizer is an
independent plugin, YASO (Yet Another Sokoban Optimizer) instead of being a part of the old YASS
solver and optimizer plugin. That way, it has also been possible to increase the limits in the optimizer to
1000 boxes and 70x70 boards, whereas the YASS solver plugin limits are 255 boxes and 50x50 boards.
Note that the old singlethreaded optimizer still is available as part of the YASS solver and optimizer
plugin, so if you manually switch between different optimizers, you should normally select the new YASO
optimizer rather than the singlethreaded version in YASS. Thanks to all who have helped testing the new
optimizer, and thanks in particular to Findus for testing early unstable versions.
+ The level file format has been streamlined by removing the macro feature and the puzzle type (game
type), and the format description has been further polished. The macro feature allowed level notes and
solution notes to share common texts, e.g., about copyright. These macros made it complicated for other
programmers to write a conforming level reader. It was more work than it was worth having the macro
feature. The existing macros have been fully expanded in the level files bundled with Sokoban YASC.
Internally, macros are still supported by the application, so users will not note any difference. The puzzle
type (game type) had only been half-heartedly specified and implemented, with a global puzzle type for
the entire level file instead of allowing different sections of the file to hold different puzzle types. Also, the
keyword "game" was ill-chosen; "puzzle type" would have been better. Thanks to Eric Sunshine for
bringing these topics up, and for greatly improving the file format description.
+ Until now, the level collection "dh5" has shipped with built-in solutions made by the level designer, David
Holland. They have now been substituted with my own solutions, so Sokoban YASC again ships with my
own built-in solutions for all levels bundled with the application. Thanks to David Holland for lending me
his solutions until my own solutions were ready.
+ Minor changes.
Version 1.555
+ Improved the status bar hint texts for the "Alternating optimizations" feature, making it more clear that
the objective for this feature is to optimize the X/Y metrics (e.g., "moves/pushes") for a solution, and that
the feature isn't there for optimizing both X/Y and Y/X in one go. The former only triggers alternating
optimizations after a successful first X/Y optimization, whereas the latter would imply always trying both a
X/Y optimization and a Y/X optimization. Even though the latter also would be a meaningful feature, it
wouldn't blend well with the typical use of the optimizer task queue, where the user often has both a
"moves/pushes" and a "pushes/moves" solution, and it would be a waste if the "Alternating optimizations"
feature gave both of them an "optimize both X/Y and Y/X" treatment. Thanks to Findus for reporting that
the hint texts needed improvements.
Version 1.554
+ For a level "collection" with only a single level, the duplicate finder only offered the option "Find levels
similar to the current level", whereas the option "Find duplicates of current collection" was disabled. The
former is an inexact search, allowing minor differences after level normalization. The latter searches for
exact matches after level normalization has been applied. Sometimes this option comes in handy for
single level "collections" too. Thanks to Findus for this suggestion.
Version 1.553
+ Minor changes.
Version 1.552
- Bugfix: The built-in level generator can be seeded with a template level. If it was a fixed template with
walls only (i.e., no boxes or goals), the generator didn't take the template into account. Instead, the
generator seeded itself with a fresh, randomly created level.
+ Changed the name of two of the picture position options, "Picture" and "Frame", to the better terms "Fill"
and "Stretch".
Version 1.551
- The "Copy level collection to clipboard" feature in the "Open level" window had never been updated so
it used the late coming user-defined floor filling character in the settings. With floor-filling enabled, the
floors were always filled with underscores, even if the user has specied a hyphen as floor-filling character.
The omission only affected copying an entire level collection to the clipboard, as opposed to copying a
single level.
Version 1.550
+ Added new levels by David W. Skinner, including built-in solutions. Currently, there are built-in solutions
for all levels bundled with the application.
+ Added "Copy clipboard item to Windows clipboard" and "Paste levels from Windows clipboard" to the
context menu (i.e., the right-click menu) for the level editor's internal clipboard window. Thanks to Findus
for this suggestion.
+ Corrected a drawing error in the wall for the skins "Games 4 Brains Animated - Red" and "Games 4
Brains Animated - Yellow" by Gerry Wiseman, based on the original "Games 4 Brains" skin by Jan
Reineke.
+ Minor changes.
Version 1.549
+ Added "Paste levels and solutions from clipboard" to the context menu (i.e., the right-click menu) for the
solver window, the optimizer window, and the snapshots window. The function has always been available
via menus and toolbar buttons, but it is sometimes convenient also to have access to the function from
the context menu. Thanks to Sokobano for this suggestion.
- Bugfix: Scenario: Create a new level in the editor. Without leaving the "Tools" window (e.g., to play the
level in the main window), use a solver plugin to solve it. Change from the solver tool to the optimizer tool
and start optimizing the newly found solution. Still in the "Tools" window, save the new level to disk.
Return to the main window. Both the solver-generated solution and the optimized solution, if any, were
lost. The bug only affected unnamed levels which just had been created in the editor, and which hadn't
been returned to the main game playing window before launching the optimization task.
+ Minor changes.
Version 1.548
- Bugfix: In the accompanying YASS solver and optimizer, the most important optimizer method "Vicinity
search" wasted computation time by running one iteration too many. When a method has made all the
improvements it can find, the method should not be activated again unless at least one other method
finds further improvements, but "Vicinity search" got one more try, before it stopped. Thanks to Paul Voyer
for reporting this bug.
Version 1.547
- Bugfix: In the duplicate finder window, the user can delete levels manually one by one, either via the
menu or by using the keyboard shortcut Ctrl+X. On rare occasions, a deletion didn't take effect. The
problem could occur when the deleted level was a member of a level collection where some levels had
non-unique titles. (Note that duplicate levels and duplicate level titles are two unrelated issues.) Thanks to
Findus for reporting this bug.
+ Minor changes.
Version 1.546
+ Added new levels by David W. Skinner.
Version 1.545
- In the main window, when the user clicks "Open" to select another level, the "Open File" dialog is
shown. The file list has always correctly focused the user's currently opened file, but before the program
did that, it loaded the first file on the list. Normally, this is fast enough to go unnoticed, but if the file
contained a large level collection there could be a noticeable delay. This superfluous load has now been
eliminated.
- Bugfix: Scenario: Using the level generator in the "Tools" window and simultaneously running other
plugins like solvers and optimizers. In that case, and especially on single-processor computers, there is
sometimes a short delay when the user stops the level generator by clicking "Terminate" before the
generator really stops. If the user in the meantime switched to another tool or another window, the
generator terminated with an "access violation" error message. No harm was done, and the application
continued normally after the user closed the message window.
+ Minor changes.
Version 1.544
+ Added new levels by David W. Skinner, including built-in solutions. Currently, there are built-in solutions
for all levels bundled with the application.
Version 1.543
+ Added new levels by David W. Skinner, including built-in solutions. Currently, there are built-in solutions
for all levels bundled with the application.
Version 1.542
+ Improved the newly added freeze check in reverse mode gameplay so it also checks neigboring boxes
(recursively), and not just frozen boxes which are two squares apart horizontally or vertically. Here is a
small example (courtesy of Matthias Meger) with a run-length encoded board and a 1-pull deadlocked
reverse mode snapshot:
8#|#-.4-#|#-@-*.$##|#-$5-#|#-#-3#-#|#7-#|9#
[]D
(Use the mouse to select the board and the snapshot, and then press [Ctrl]+C or [Ctrl]+[Insert] to copy the
text to the clipboard.)
- Bugfix (1.541): Scenario: Reverse mode gameplay, using the keyboard to make moves instead of the
mouse, combining an arrow key with [Ctrl] to avoid pulling a box that otherwise would be pulled along. If
pulling the box would create an overflow/underflow deadlock, detaching the box with [Ctrl] didn't take
effect, resulting in the message that the move was blocked because it would create a deadlock. The
problem only affected keyboard moves, not mouse moves.
+ Minor changes.
Version 1.541
+ Added revised "Sasquatch" levels by David W. Skinner, including built-in solutions. Currently, there are
built-in solutions for all levels bundled with the application.
+ Beautified David Holland's "dh1" levels and "dh5 #2" so they don't have a jagged outline.
+ Improved the deadlock detection in reverse mode gameplay with one more class of deadlocks: Pull
frozen boxes which are two squares apart horizontally or vertically. Here is a small example with a run-
length encoded board and a deadlocked reverse mode snapshot:
7#|#5-#|#$$.$.#|#.-@$-#|#-$.-.#|#5-#|7#
[]luLurrddldLdrrruuuLddrL
(Use the mouse to select the board and the snapshot, and then press [Ctrl]+C or [Ctrl]+[Insert] to copy the
text to the clipboard.)
+ Improved the deadlock detection in reverse mode gameplay with one more class of deadlocks:
Overflow/underflow regions. An overflow occurs when a set of B boxes only can reach a set of T target
positions and B > T. (In reverse mode gameplay, target positions are box starting positions.) An underflow
occurs when a set of T target positions only can be reached by a set of B boxes and T > B. For efficiency,
underflow detection is only implemented for T = 1, just as it is for forward mode gameplay. Here is a small
example with a run-length encoded board and a deadlocked reverse mode snapshot:
7#|#5-#|#$$.$.#|#.-@$-#|#-$.-.#|#5-#|7#
[]lR
(Use the mouse to select the board and the snapshot, and then press [Ctrl]+C or [Ctrl]+[Insert] to copy the
text to the clipboard.)
+ Playing the game in full screen mode using a high-resolution screen, the history slider is so long that it
sometimes is difficult to keep the mouse cursor inside the mouse sensitive area when the mouse is
moved left and right. To improve the situation, the height of the mouse sentive area has increased by 16
pixels above the visual appearance of the sliders on the status bar, i.e., the history slider and the replay
speed slider. The oversized mouse sensitive area first kicks in when the window size reaches 1280 x 500
pixels. Thanks to David Holland for this suggestion.
+ Minor changes.
Version 1.540
+ Completed adding built-in solutions for David W. Skinner's new levels. Currently, there are built-in
solutions for all levels bundled with the application.
+ Added new levels by Evgeny Grigoriev, including built-in solutions.
Version 1.539
- David W. Skinner had made a mistake in his new "Sasquatch X-50" level. It has been corrected now.
Version 1.538
+ Added new levels by David W. Skinner.
Version 1.537
- Bugfix: When a level had been solved in reverse mode, and this was the first found solution for the
level, then on rare occasions it could happen that the application didn't automatically create the
corresponding normal forward solution. In that case, the user had to save the reverse mode solution
manually and then select the menu item "Create forward solution".
Version 1.536
+ Minor changes.
Version 1.535
+ "Sokoban for Windows" (SfW) by Bjoern Kaellmark is currently one of the best Sokoban clones, and it
also offers a comprehensive collection of levels for download from its homepage. The level format is,
however, slightly incompatible with the otherwise versatile import format in Sokoban YASC. The SfW
levels have titles after the board, tagged with a leading ";". The ";" tag is an old deprecated convention
and Sokoban YASC has always handled it correctly, but Sokoban YASC expects titles before the board,
and notes between the levels, possibly with a "Title:" key/value pair. The effect was that an SfW level got
its title from the preceding level during import. Furthermore, copy-pasting an SfW collection into Sokoban
YASC via the clipboard gave the new collection a generic file name like "Levels" because the SfW text file
doesn't follow the convention to specify the collection name with a "Set:" key/value pair. Instead, the
collection name appears as the first non-blank line in the SfW text file, also tagged with a leading ";". The
level reader in Sokoban YASC has been tweaked to cope with both of these issues, but it's important to
note that all this is merely a hack added for practical purposes, and that Sokoban YASC does not
sanction the SfW level file format in any way.
+ "Sokoban for Windows" (SfW) by Bjoern Kaellmark recently upgraded its skin format so it uses PNG
images instead of BMP images, thereby breaking the Sokoban YASC skin import of SfW skins. After
adding a PNG image loader to Sokoban YASC (see the next point on this "Release Notes" list), the skin
import of SfW skins in Sokoban YASC is now working again.
+ Added partial support for images in PNG format, supplementing the existing support for BMP images
and JPG images. The limitation is that any transparency information in the PNG image (e.g., a so-called
"alpha-channel") is dropped because Sokoban YASC is built to operate with 24 bits images only. Even so,
supporting PNG images in this limited form is an important improvement due to the fact that PNG is the
preferred format for web applications at this point of time. Sokoban YASC has been developed using the
programming language "Delphi 4" which hasn't native support for PNG images. New versions of Delphi
support PNG images, but it's not an option to build Sokoban YASC with new Delphi versions because
they don't offer backward compatibility for old projects. New Delphi versions are, very naturally, built from
the ground up using modern Unicode texts, whereas old projects like Sokoban YASC are from an era
where texts still were represented using 8 bits character codes, and contrary to what one might think, it's
neither a mechanical nor an easy transformation to change the text system in an old and huge project like
Sokoban YASC. Doing it amounts to reprogramming most of the project from scratch. Writing a PNG
image loader is such a huge undertaking that it's not practical to write one's own, so instead the solution
has been to find a third party product. The "ImageFileLib" project by Michael Vinther contains a PNG
image file loader coded in Delphi, and the code comes with a liberal GPL-compatible license, so after
massaging the code a little, it now serves as a plugin for Sokoban YASC. The plugin is called "PNG.dll"
and it's installed together with Sokoban YASC, so normally you will not notice that it's a separate module.
You only need to take notice of that if you belong to the small group of users who manually move the
application away from the default installation folder to a folder of your own choice. In that case, you must
move "PNG.dll" along too.
- Bugfix: Importing a certain type of Sokoban++ skins didn't work, or had stopped working. The bug
affected skins with all images for the skin gathered in a single image.
+ Minor changes.
Version 1.534
+ Added new levels by David Holland, including built-in solutions. Currently, there are built-in solutions for
all levels bundled with the application.
+ This version is the first one where the deadlock detection module also assists the user during reverse
mode gameplay. The assistance in reverse mode is, however, limited to one class of deadlocks: "Pull
corral deadlocks", where the player cannot escape a fenced-in area and eventually will paint herself or
himself into a corner with some boxes located at non-goal squares.
+ Minor changes.
Version 1.533
+ Added new levels by David W. Skinner, including built-in solutions. Currently, there are built-in solutions
for all levels bundled with the application.
+ Improved the status bar hint texts for the duplicate finder tools "Update solutions for duplicate levels"
and "Create new collection from solved levels..." so they document a subtle limitation related to "similar
levels" versus "duplicate levels". The limitation has rarely any practical importance, and it only applies to
the search for levels similar to the currently selected level. In particular, it doesn't affect the duplicate
finder when it searches for all duplicate levels.
Version 1.532
+ Minor changes.
Version 1.531
- Bugfix: Duplicate finder scenario: After searching for levels similar to the currently selected level, the
user has the option to distribute solutions to all identical levels. If the search had been performed with a
match threshold less than 100%, and if one of the found levels wasn't a compatible duplicate, but only a
similar level with a solution, then the distribution failed with an "Internal error" message. Thanks to
Matthias Meger for reporting this bug.
- Bugfix: Sokoban YASC has a 100,000 moves limit for solutions and snapshots. Levels imported from
different programs may have longer solutions and snapshots, and Sokoban YASC handles them
gracefully by treating them as part of the level notes. That way, the oversized snapshots and solutions
aren't lost when the level file is imported and updated by Sokoban YASC. However, during the attempt to
import an oversized solution or snapshot, a bug (an index out of range) sometimes triggered an access
violation error message on the screen. The bug was harmless and didn't affect the treatment of the level.
+ Minor changes.
Version 1.530
+ Minor changes.
Version 1.529
+ Delphi 6 compatibility: Sokoban YASC has been developed and maintained using the Delphi 4 compiler.
It turns out that newer versions like Delphi 6 treat menu items differently in that they automatically adjust
and add accelerator keys (underscore markers) when new menu items are added dynamically during a
session. This affected the level duplicate finder, where the user's selected folders are stored as menu
items. By adding underscore markers for the accelerator keys, Delphi 6 in effect changed the folder
names to nonexisting folders so the duplicate finder didn't process the selected folders. This didn't affect
the official release of Sokoban YASC produced with Delphi 4, so it was only a matter of compatibility with
newer compiler versions. Thanks to Findus for reporting this issue.
Version 1.528
- Bugfix: Using the keyboard shortcut "Ctrl+Alt+B" to copy the normalized board to the clipboard correctly
normalized the level, also with respect to rotate/mirror transformations, but before the board was sent to
the clipboard, the board was subject to a superfluous "rotate 90 degrees, flip horizontally" transformation.
The output was consistent so no harm was done, i.e., duplicates always produced the same normalized
board, but for correctness the superfluous transformation should not be there.
Version 1.527
- Bugfix: Scenario: From the main window, go to the "Open level" window. Copy the currently selected
level to the clipboard. Return to the main window. Copy the normalized board to the clipboard using the
keyboard shortcut "Ctrl+Alt+B". Depending on the rotations and the mirroring of the normalized board,
and if the level had solutions or snaphots, this scenario sometimes triggered an error message about an
"Access violation". No harm was done, and the application continued normally after closing the message
window. Thanks to Findus for reporting this bug.
+ Minor changes.
Version 1.526
+ Minor changes.
Version 1.525
+ Dropped the reference to "the clipboard" from the description of the recently added key/value pair
"Collection: Name" in the "File Notes" section of the file format description. This makes the description of
the copy/paste operation more universal, given that not all operating systems use a clipboard component
(or metaphor) for copy/paste. Furthermore, even with operating systems having a clipboard, some users
know how to perform copy/paste without ever having heard about the clipboard. Thanks to "sokoban_jay"
for these two observations.
Version 1.524
- Bugfix: The skin import had stopped working correctly for a small group of skins in the format used by
the "Sokofan" program. The affected group was Sokofan skins with directional pusher images, and with
the pusher drawn on a uniformly colored background (as opposed to being drawn on top of the floor
image and the goal image).
Version 1.523
+ Added new levels by Rick Sladkey, including built-in solutions. Currently, there are built-in solutions for
all levels bundled with the application.
+ Added the key/value pair "Collection: Name" to the "File Notes" section of the file format description.
The pair is optional but recommended. It assigns a name to the puzzle collection when the clipboard is
used for copying an entire collection from a website or e-mail and pasting it into a Sokoban program.
Sokoban YASC has always supported the key/value pair "Set: Name" for that purpose, but it was never
documented anywhere, and the word "Collection" is better than the more generic "Set". Thanks to Eric
Sunshine for writing the English text for the file format description of this option.
+ Minor changes.
Version 1.522
+ Added new levels by David W. Skinner, including built-in solutions. Currently, there are built-in solutions
for all levels bundled with the application.
+ Minor changes.
Version 1.521
+ Added new levels by David W. Skinner, including built-in solutions. Currently, there are built-in solutions
for all levels bundled with the application.
Version 1.520
+ Added new levels by David W. Skinner, including built-in solutions. Currently, there are built-in solutions
for all levels bundled with the application.
+ Minor changes.
Version 1.519
+ Minor changes.
Version 1.518
+ Minor changes.
Version 1.517
+ In the accompanying YASS solver and optimizer, the solver deadlock detection calculation is now
slightly more accurate when it finds "underflow" deadlocks related to boxes freezing at goal squares. The
change is too small to improve the solver results, so the modication is more a question about making the
algorithm better. Thanks to Matthias Meger for this suggestion.
+ Minor changes.
Version 1.516
- Bugfix: The duplicate finder didn't always search though all the folders it was supposed to. The flaw only
affected the functions "Find levels similar to current level" and "Find duplicates of current collection" and
not the "Find all duplicate levels" function. If the selected level or collection was located in a subfolder of
one of the folders selected for investigation, then other files in the same folder (and its subfolders) were
not investigated. Thanks to Findus for reporting this bug.
- Bugfix: The duplicate finder tools, e.g., "Synchronize solutions for all duplicates", could on rare
occasions stop with the message "Internal error". The flaw was in the built-in control mechanism which
triggered the message, and not the tools themselves. Thanks to Matthias Meger for reporting this bug.
+ Minor changes.
Version 1.515
+ Windows 7 compatibility: In the accompanying YASS solver and optimizer, the last time the settings
were updated is now stored using a universal date/time textual format instead of the local format. For
some unknown reason, Windows 7 seems not to recognize the local format correctly in some (but not all)
countries when the application later reads the date/time back. The symptom was that the optimizer
method settings were reset to default values on each invocation of the optimizer, instead of waiting 24
hours before the users settings expired. The 24 hours expiration time mechanism based on storing the
last date/time using the local format has always worked with earlier versions of Windows, so this seems to
be a Windows 7 compatibility issue. Thanks to Ivan Ivanov for reporting this problem.
Version 1.514
+ Found a partial workaround for the sometimes unwanted effect that Windows always closes a menu
after the user has select an item on the menu. The "solution" is to simulate keyboard events which re-
open the menu. This cannot be fully guaranteed to work, and the screen updating also looks ugly, but in
practice this is good enough when menus are used as a cheap method for offerering "radio button"
multiple choices for infrequently used settings and functions, where it would be too much work to
implement full-blown dialog windows with the choices. An example is the recently added "Replace"
function in the level editor, where the user needs to choose "Find..." and "Replace with..." objects, e.g.,
boxes and goals. In this case, the workaround has been applied successfully to the main menu. Applying
it to the popup menu failed, because the first time (and only the first time) the program attempts to put the
popup menu back on the screen, the popup menu doesn't respond to the keyboard event which opens
the sub-menu with the "Find..." and "Replace..." options. As yet another workaround, the application
switches from the popup menu to the main menu, when the user changes the options found on the popup
menu.
Version 1.513
+ Added a new function to the level editor: "Fill selected area with a wall border, leaving the interior
unchanged". This complements the already existing feature "Fill selected area with a wall border, filling
the interior with floors". Thanks to Ming for this suggestion.
+ Added a new function to the level editor: "Replace", e.g., change boxes to goals. Thanks to Ming for this
suggestion.
+ In the accompanying YASS optimizer, there is a new undocumented backdoor to preserve the user's
optimizer method settings, which otherwise expire after 24 hours. These settings are so critical for the
optimization efficiency, that the normal user cannot be trusted to keep them updated. The ideal settings
can vary wildly from one level to another, so even when the user succeeds in fine-tuning the settings for
one level, it's very unlikely that these settings are as good as the default settings for the next level. So to
protect the casual user from running with poor settings, the optimizer resets them to default values 24
hours after they last have been used. The settings are so important that it even is out of the question to
give the user a "Keep settings?" option, but for the expert users, who know exactly what they deal with
when they fine-tune the optimizer method settings, it is nevertheless practical to have such an option.
This is now possible by editing the configuration file for the YASS solver and optimizer plugin. It's the text
file "YASS.ini" which can be found in the folder "...\Documents\Sokoban\Sokoban YASC\Plugins". In the
section "[Optimizer]", add the line "Optimizer method settings expire after 24 hours=No" to disable the
reset. Thanks to Sokobano for bringing this up.
+ Minor changes.
Version 1.512
+ Added new levels by Aymeric du Peloux ("Cosmopoly 21" and "Cosmopoly 22"), including built-in
solutions.
+ Minor changes.
Version 1.511
+ Added new levels by Aymeric du Peloux (13 "MyrioCosmos" levels), including built-in solutions.
- Bugfix: The level editor was not geared to handle the situation with multiple running instances of the
application. All instances used the same file on disk to store the editor history, in effect destroying the
history and causing several error messages to appear during the editing process. The editing itself
worked correctly though. Now each instance uses its own history during the session. There is, however,
the question about which of these editor histories to save from one session to the next. For simplicity, it's
undefined which one survives, so with multiple running instances, users should not rely on editor history
persistence.
- Bugfix: The bug in the accompanying YASS solver and optimizer, which was reported fixed in version
1.509 was still there, only in a weaker form. As mentioned in the release notes for version 1.509, the bug
could theoretically affect the push-optimal guarantee when the solver searched for push-optimal solutions,
but the chances of this happening was infinitesimally small.
Version 1.510
+ Added new levels by David W. Skinner, including built-in solutions. Furthermore, David W. Skinner has
streamlined the naming convention for his levels by officially renaming the level collections "Mas
Sasquatch" and "Mas Microban" to "Sasquatch II" and "Microban II" respectively.
+ Minor changes.
Version 1.509
- Bugfix: In the accompanying YASS solver and optimizer, there was a small bug in one of the deadlock
detection patterns dealing with boxes freezing at goal squares. In practice, the bug didn't affect the
solver's capabilities, but in theory the bug could affect the push-optimality guarantee when the solver
found push optimal solutions. However, this is mostly a theoretical concern, since the chance of this
happening was infinitesimally small.
Version 1.508
+ Minor changes.
Version 1.507
- Bugfix: On rare occasions, the "Normalize board" feature in the level editor produced incorrect results.
The user could always select "undo", so no harm was done, except that level normalization wasn't
available for this level. Level normalization plays an important role for the duplicate finder tool, but the bug
only affected the editor. Thanks to Eric Sunshine for reporting this bug.
+ Minor changes.
Version 1.506
+ Added a new "Games 4 Brains Animated - Yellow" skin. The former "Games 4 Brains Animated" skin
has been slightly modified and renamed to "Games 4 Brains Animated - Red". Thanks to Gerry Wiseman.
+ Added 2 new keyboard shortcuts to the main window: Ctrl+Alt+B: "Copy normalized level to clipboard".
Shift+Ctrl+Alt+B: "Copy normalized level to clipboard (run-length encoded)". Exporting the normalized
board may be useful for some types of external database lookups. There is, however, no standard for
level normalization so the outcome is highly dependent on the implementation. In Sokoban YASC, level
normalization is a quite sophisticated calculation, accounting for dead squares and boxes, player starting
position, forced initial pushes, rotations, etc. Thanks to Findus for suggesting the keyboard shortcuts.
+ Minor changes.
Version 1.505
- Increased the "Background color tolerance" settings for the new "Game 4 Brains Animated" skin from
the default value 5% to 7%. Previously, a certain combination of window size and level size produced
scaling artifacts (looking like "horns") for the boxes.
Version 1.504
+ Added a new version of the "Games 4 Brains" skin with animations. The new version goes by the name
"Games 4 Brains Animated" and can be found in the "Common skins" folder. Thanks to "Games 4 Brains"
(website: http://www.games4brains.de) for permission to use their excellent graphics in Sokoban YASC,
and thanks to Gerry Wiseman for a gentle clean up of the original material, and for creating the beautiful
animations in this version.
+ The default "Games for Brains" skin has always had to get by with low-quality image scaling because
the high-quality image scaling had problems with scaling images drawn with a uniformly colored
background. Often, the background pixels smeared the border pixels of the object, in effect adding an
outline around the object. Recent improvements of the high-quality image scaling method has reduced
the problem, so the default skin now can use high-quality scaling for the player and for the boxes, where it
makes a significant difference. The goals happen to look better with low-quality scaling because it gives
the goals a smooth gradient-fill effect, and the walls don't really benefit from high-quality scaling. You
need to load the default skin anew for this change to take effect.
+ Minor changes.
Version 1.503
- Bugfix (1.480): With multiple views of a level on the screen, and a game state where the screen showed
legal moves or pushes, resizing the window caused the legal moves to appear in all views instead of just
the currently selected one.
+ Minor changes.
Version 1.502
- Bugfix: The skin module has always had some limitations regarding skins with these two properties: 1)
Fully transparent floors, and 2) high-quality scaling of the objects (player, boxes, etc.). The problem is that
scaling adds an outline around the objects. (The default skin has transparent floors, and it only uses low-
quality scaling for this very reason, with the result that the objects are slightly blurred.) Some time ago, an
attempt was made to get rid of this limitation, but it wasn't fully operational. The outline removal worked
reasonably well, but a bug caused other graphical errors after changing the window size and after
changing from one level to another. Thanks to Gerry Wiseman for reporting this bug.
+ Minor changes.
Version 1.501
+ Small improvements of the accompanying YASS solver have increased its score from 73 to 75 solved of
the 90 levels in the XSokoban level set, the quasi standard Sokoban solver test suite. (Current status: 84
solved.)
+ The level collection "Martel and Meger" has changed name to "Crazy Monk". The authors prefer this
catchy pseudonym, and it's also under this pseudonym that the levels appear elsewhere.
+ In the accompanying YASS optimizer, there has been a subtle change in the vicinity search module, so
it sometimes samples the search space a little better. The vicinity search is guided by the user-defined
limit on the number of tested neighbor squares around each square, e.g., 20 neighbor squares.
Essentially, neighbor squares are found by "drawing" concentric circles around the center square, and
unless the limit happens to complete the outmost circle, the square selection depends on the order in
which the squares are visited, e.g., in clockwise or counter-clockwise order. The outmost circle is
completed if the limit is of the form "1+(2*n*(n+1))" where "n" is a natural number including 0, i,.e.
(0,1,2,3...). For other limits, a few squares will be selected differently depending on the visit order.
Examples: With limit 10, a clockwise visit order picks 3 different squares than a counter-clockwise visit
order. With limit 20, the difference is 1 square only. With limit 100, the difference is 13 squares. This new
version of the optimizer varies the visit order for each search, thereby sampling the search space a little
better. The visit order varies according to a fixed scheme so the optimizer still produces reproducible
results. Thanks to Matthias Meger for suggesting to vary the visit order.
+ Minor changes.
Version 1.500
+ Completed adding built-in solutions for the "Holland" level collection by David Holland. This means there
are built-in solutions for all levels bundled with the application at the moment.
+ Minor changes.
Version 1.499
+ Completed adding built-in solutions for the "GRIGoRusha" level collection by Evgeny Grigoriev.
- Bugfix (1.480): With multiple views on the screen, each view has the menu option "Combine with
matching opposite game mode snapshots (i.e., reverse/forward snaphots) to form solutions", which can
be activated when such a snapshot exists. This worked correctly if the matching snapshot was loaded as
another view, but it failed and triggered an error message if the snapshot instead resided on the
'Snapshots' window.
+ Minor changes.
Version 1.498
- Bugfix: There was a problem with the 'Settings' windows for solver and optimizer plugins on computers
with multi-core processors. If the user opened one of the plugin 'Settings' windows while a plugin was
running, then the application sometimes terminated abnormally with an "access violation" error. Thanks to
Matthias Meger for reporting this problem.
+ Minor changes.
Version 1.497
+ Completed adding built-in solutions for David W. Skinner's "Sasquatch VIII" levels and "Sasquatch IX"
levels. This means there are built-in solutions for all levels by David W. Skinner currently bundled with
Sokoban YASC.
+ Minor changes.
Version 1.496
+ Added a new menu option to the tools palette for the duplicate finder: "Create new collection from
solved levels". Thanks to Findus for this suggestion.
- Bugfix: In the accompanying YASS solver and optimizer, there was a logical flaw in one of the deadlock
detection patterns dealing with gate squares. If the pusher happened to be located at the gate square in
the starting position, the bug could on rare occasions make the solver report that a valid level was
unsolvable. Thanks to Findus for extensive testing of the correctness of the deadlock detection module.
- Bugfix (1.494): Fixed a bug in the new "Forklift driving style" feature which in replay mode (as opposed
to game play mode) caused the vehicle to make a U-turn instead of driving in reverse when the vehicle
moved from a goal square to a non-goal floor square. Thanks to Jean-Pierre Martel for reporting this bug.
+ Minor changes.
Version 1.495
- In contrast to the main window and the "Open" window, there was a tiny constraint on the clipboard
import feature in the "Tools" window. The constraint didn't affect functionality, but only the ease of use. If
the currently loaded level was new or modified, and the user had placed a solution on the clipboard and
selected "paste from clipboard" in the "Tools" window, then the solution wasn't imported straight away as it
would have been if the "paste" operation had been activated in the other windows. Instead, the
application responded with a message like "This level is new. Do you want to save it?" In other words, the
user should decide what to do about the new or modified level before new data could be imported from
the clipboard, even though this decision isn't really necessary at this point - even for a new or modified
level - when the clipboard only contains solutions and snapshots (in contrast to new levels). Thanks to
Carlos Montiers for mentioning this matter.
Version 1.494
+ Added a new "Fixed template" option to the level generator settings. Internally, the level generator has
always supported seeding the generator with a fixed template, i.e., a level candidate with immutable
objects like goals and walls. However, the user interface was not in place, so there was no way to take
advantage of this feature. When "Fixed template" is enabled, and the level generator is seeded with a
single level (e.g., via the editor), then this level is treated as a fixed template with immutable walls and
goals or boxes (depending on the search direction).
+ When the optimizer window is opened, all solutions for the currently loaded level are always put on the
task list, but only the best solutions (for moves and pushes) are automatically selected for optimization. If
the level has both a best-moves solution and a best-pushes solution, they get 'moves/pushes' and
'pushes/moves' respectively as default optimization. Until now, all other solutions were put on the list with
'Settings' as default optimization, meaning the optimization method should be taken from the optimizer
plugin settings. When the level has both a best-moves solution and a best-pushes solution, it's often more
convenient that the secondary solutions also default to 'moves/pushes' and 'pushes/moves' optimization if
they have the same number of moves or pushes as the best solutions. Thanks to Jean-Pierre Martel for
this suggestion.
+ Added a new option to 'Settings': "Control | Move animation | Forklift driving". Some skins, e.g.,
"Nightshift3", model a real warehouse with boxes and a forklift truck. With a real forklift, it's often
preferable to drive a short distance in reverse instead of making a U-turn, hence this new option can
enhance the move animation "realism". Thanks to Jean-Pierre Martel for this suggestion.
+ Updated the "Nightshift3" skin so its move animation uses the new "forklift driving" style.
+ Minor changes.
Version 1.493
+ Minor changes.
Version 1.492
+ The level normalization service function is used both by the editor (where is can be activated via the
menu) and by the duplicate finder before it compares the levels. It's strange, but despite the fact that the
level normalization is quite sophisticated, it had never been equipped with the ability to turn all frozen
(immovable) boxes into walls, e.g., when two boxes are placed next to each other up against a wall.
Previously, the level normalization only turned cornered immovable boxes into walls. Note, however, that
the duplicate finder - in contrast to the level editor - only is allowed to turn immovable boxes on goal
squares into walls. If an immovable box on a non-goal square is changed to a wall, then it creates a
mismatch between the number of boxes and the number of goals. That would change the level status
from "unsolvable" to "invalid", and the level would be dropped. Thanks to Findus for suggesting to extend
the check to all frozen boxes.
+ After a batch run with the solver, there was no way to differentiate between the (rare) unsolvable levels
and the normal failures, where the solver plugin just cannot solve the levels. Now unsolvable and invalid
levels (according to the plugin) are marked as such on the task list after processing. Thanks to Findus for
mentioning this issue.
+ Even though it's considered a malfeature in a modern Sokoban game, the application now has an "auto
advance to next level when a level has been solved" option. It can be found in the 'Settings' window in the
"Control | Miscellaneous" section.
- Sokoban YASC imposes a 100,000 moves limit on each snapshot and solution. It can happen that a
level file contains a longer valid snapshot or solution created by a different application, and in that case
Sokoban YASC silently truncated it to a 100,000 moves snapshot. This could cause the loss of a solution.
There is no way that Sokoban YASC can handle longer snapshots and solutions, but to avoid loosing
them, the application now treats longer snapshots and solutions as a part of the level notes. That way,
long snapshots and solutions are correctly carried around as part of the level, but they are, of course, not
processed by - or visible to - Sokoban YASC as anything but unstructured text. Thanks to Findus for
suggesting to do something about this truncation issue.
- Bugfix: Level names for levels inside a level collection only need to live up to the naming restrictions
imposed by the application. Selecting "Save as..." in the main window to save the level as a new
indvidiual file means that the level name must live up to the more strict limitations imposed by the
Windows operating system. There are a few levels in circulation with control characters in the name (i.e.,
characters with ascii values below the space character like TAB), and it that case selecting "Save as..."
didn't open the "Save..." dialog window because Windows refuses to do so with an illegal filename. Now
the application substitutes control characters in level names and snapshot names by underscores at level
load time, so this problem never happens. Thanks to Findus for reporting this bug.
+ Minor changes.
Version 1.491
- Bugfix: There was a bug in the recently added "closed diagonal" deadlock detection algorithm which on
rare occasions caused the application to show an "access violation" error message when the user tried to
push a box in a game. Thanks to Eric Sunshine for reporting this bug.
+ Minor changes.
Version 1.490
- Bugfix: There was a minor bug in the level generator which mostly affected the screen display and not
the level generation itself. Scenario: In the editor, send the level as a seed to the level generator. In the
generator, set a check mark next to the seed level. Start the generator. Now the check mark for the seed
level was removed as it should be, but the "selected" count on the screen and the checkbox for
"select/unselect all candidates" were not updated accordingly.
+ Minor changes.
Version 1.489
+ Completed adding built-in solutions for David W. Skinner's "Sasquatch VII" levels.
- Bugfix: A serious bug could on rare occasions cause loss of solutions in level files. That's about as
serious as a bug can get, but fortunately it only happened after a sequence of steps rarely seen in normal
game play: In the main window, open a level with a best solution from before the current naming scheme
was introduced (probably in version 1.323), with "Best Solution", "Solution/Moves", etc. The name is
automatically updated in the 'Snapshots' window, so the old name won't be visible here. The only place it
can be seen is in the raw level file. Make the exact same moves as in the best solution. Activate the
'Open' window. Leave the 'Open' window again by selecting 'Cancel'. Back in the main window, close the
application or load another level. The next time the level was loaded, it became clear that the best
solution had vanished. Thanks to Daniel Cielak for reporting this bug.
- The newly added "closed diagonal" deadlock pattern detection didn't block pushes leading to a
deadlock if the player started from the square inside the diagonal, i.e., the square which after the push
would be surrounded by boxes and walls. This omission was harmless, of course, since it didn't block any
legal pushes, but the more accurate deadlock detection, the better.
- Heavily downscaling a skin (e.g., for a thumbnail preview, or to make a large level fit in a small window)
often had the effect that the skin became darker or brighter, seemingly at random. Reading "Physically
Based Rendering" by Matt Pharr and Greg Humphreys has led to a better understanding of the image
scaling algorithm, making it possible to avoid this unwanted effect. The problem was that the "Lanczos 3"
filter weights don't sum to 1.0 for the neighbor pixels contributing to each pixel in the scaled image.
Normalizing the weights so they sum to 1.0 avoids changing brightness. This improvement is particularly
welcome now in connection with the recently added "multiple views" feature.
+ Minor changes.
Version 1.488
+ Minor changes.
Version 1.487
+ The "closed diagonal" deadlock pattern has been extended to handle walls as well as boxes. Thanks to
Matthias Meger for a lot of help with testing and constructing the "closed diagonal" deadlock detection
algorithm.
- Bugfix: Scenario: A large level has been loaded in the main game-playing window. The precalculation of
deadlock sets is running in the background and hasn't completed yet. The user changes to another level.
It can take some time before the precalculation running in the background finishes processing the
previously loaded level, and before that happens, the user terminates the calculation manually by clicking
the discrete "..." button on the status bar. If the user had enabled the option "Control | Deadlock detection
| Show simple dead squares" in the 'Settings' window, then the manual termination in this scenario had
the effect that the currently loaded level was updated with dead squares found by the background
calculation for the previously loaded level. This affected both the screen presentation and the game play
(i.e., by falsely blocking some perfectly legal pushes) until the level was loaded again. Thanks to Matthias
Meger for reporting this bug.
+ Minor changes.
Version 1.486
+ As mentioned in the release notes for version 1.472, Microsoft has made it impossible to prevent the
screen saver from running, except from faking keyboard events. This is what Sokoban YASC does every
50 seconds, based on that the minimum screen saver idle time threshold is 1 minute. A small refinement
has been added. Now the faked keyboard events are only issued if Sokoban YASC is the application
which currently has the focus. The downside is that disabling the screen saver in Sokoban YASC only
works as long as Sokoban YASC is the focused application, and furthermore, it's not perfect because it
doesn't cover the settings screens for solver plugins and optimizer plugins. Even so, it seems the best
choice because it avoids potential conflicts with other applications. Thanks to Eric Sunshine for this
suggestion.
+ Completed adding built-in solutions for David W. Skinner's "Sasquatch VI" levels.
+ Minor changes.
Version 1.485
- Bugfix (1.483): There was yet another logical flaw in the implementation of the new "closed diagonal"
deadlock pattern. The release notes for version 1.483 stated: "Unless all the boxes around the diagonal
are located at goal squares, at least one of the boxes must be pushed inwards, and if that cannot be done
without forming an immovable 2x2 region where at least one box isn't located at a goal square, then the
game position is a deadlock". It's correct that pushing a box inwards always creates a new smaller
"closed diagonal". There are, however, some "closed diagonals" where pushing a box inwards creates a
new smaller "closed diagonal" with all boxes at goal squares, which aren't deadlocked. Then the
remaining boxes can move freely, without any "2x2 immovable region" constraints. Thanks to Matthias
Meger for reporting this bug.
Version 1.484
- Bugfix (1.483): There was a logical flaw in the implementation of the new "closed diagonal" deadlock
pattern. A matching box constellation was labelled as a deadlock even if all the boxes were located at
goal squares.
Version 1.483
+ Added a new "closed diagonal" deadlock pattern. An example: Imagine a diagonal going left and up,
with empty floor squares surrounded by boxes. Each empty diagonal square has one box to the left and
one box to the right. At the bottom, the diagonal is "closed" by 3 boxes forming an "L". At the top, the
diagonal is "closed" by 3 boxes forming an "L" rotated 180 degrees. Unless all the boxes around the
diagonal are located at goal squares, at least one of the boxes must be pushed inwards, and if that
cannot be done without forming an immovable 2x2 region where at least one box isn't located at a goal
square, then the game position is a deadlock. Earlier, this type of deadlock was only detected for short
diagonals of length 1 or 2, but now the diagonal can be of any length. This deadlock type occurs mostly in
large open levels with many boxes, where it's easy for a human player to overlook it until a much later
stage in the game.
+ Completed adding built-in solutions for David W. Skinner's "Sasquatch V" levels.
- Bugfix (1.469): In the accompanying YASS solver and optimizer, using the recently added optimization
methods "Optimize box lines, moves" and "Optimize box lines, pushes" could sometimes make the
optimizer methods "Permutations" and "Global Optimizations" enter an infinite loop (because one branch
of the optimizer treated any moves/pushes improvement as an improvement even if the box lines count
increased). The user could still terminate the optimizer manually, so no harm was done. Thanks to
Sokobano for reporting this bug.
+ Minor changes.
Version 1.482
- Using the newly added "multiple views" feature, it could be disturbing that the mouse cursor shortly
changed to "hour glass" when the user switched from one view to another, especially if the mouse click
which selected the new view also was the beginning of a "move box" operation, where the mouse cursor
changes again to "drag item". Now the "hour glass" cursor doesn't appear anymore when the focus
changes from one view to another, even though it strictly speaking is the correct thing to do because
depending on the skin and the size of the selected view, it can take a few seconds to change focus.
Version 1.481
+ Using the newly added "multiple views" feature, the currently selected view, i.e., the one where the user
currently plays the game, only had a caption with moves and pushes, but no secondary metrics (e.g., box
lines) even when the display of these secondary metrics is enabled in the settings. During game play, only
moves and pushes appeared automatically on the screen, and the secondary metrics were only added if
the user let the mouse hover over the caption. This was - and is - intentional and is motivated by the fact
that it theoretically can take a long time to calculate the secondary metrics. In contrast to moves and
pushes, it isn't always practical to update the secondary metrics incrementally during the game, and the
calculation from scratch takes time proportional to the number of moves. However, the display
mechanism now measures the calculation time, and as long as it doesn't take more than 3 milliseconds,
the secondary metrics appear automatically on the screen during game play. In practice this means that
the secondary metrics are always available on the screen for all but the largest levels.
- Bugfix (1.480): With multiple views on the screen, if the user resized the window (e.g., by clicking
'Maximize') while replaying a game in one of views, then a groundless error message appeared, saying
that the system was out of memory. No harm was done, and the game continued normally after the user
closed the message window.
+ Minor changes.
Version 1.480
+ Added a new major feature: Multiple views. Previously, if the user wanted to try out different paths in a
puzzle, there was nothing else to do but to save/load snapshots to/from the 'Snapshots' window and then
play one of the paths at a time in the main window. With the new multiple views feature, several paths can
be played simultaneously. For instance, if the user tries to solve a puzzle by playing it both forwards and
backwards, then both paths can now be played at the same time in the main window. The options for the
new feature can be found in the 'Settings' window under "Graphics | Multiple views". There are 2 existing
options which are important for the new feature as well. The option "Control | Snapshots | Include
secondary metrics in titles" now also applies to the caption above each view. The option "Control |
Miscellaneous | Restore last position when a level is reopened" now also controls whether the multiple
views are restored or listed as snapshots in the 'Snapshots' window. It's worth noticing that the application
takes care of all snapshots visible on the screen, just as the snapshots stored in the 'Snapshots' window.
This means the snapshots are stored on the disk when the level is closed unless the user explicitly
deletes them.
+ Minor changes.
Version 1.479
+ The JSoko application by Matthias Meger has changed naming conventions in its skin format so it's
more in tune with the Sokoban++ skin format. Thanks to Matthias Meger for reporting this. Sokoban
YASC has been updated accordingly, so JSoko skins still are imported correctly.
+ Completed adding built-in solutions for David W. Skinner's "Sasquatch IV" levels.
+ Minor changes.
Version 1.478
- Bugfix (1.469): The was a logical flaw in the new logic added in version 1.469 in the service function
responsible for calculating the boxes which can reach a given square on the board. Rectifying it brings
things back to square one, where the calculation sometimes gives up if the level is too big or too complex
for the calculation. The application has always imposed a time limit on the calculation for that reason, so
no harm is done, i.e., the application never stops responding for more than a few seconds during the
attempt to do the calculation, no matter how big the level is. For the vast majority of the levels, the
calculation only takes a few milliseconds, in which case the results seem to appear on the screen
instantly, so it's mostly from the a theoretical perspective that it would be desirable with a further reduction
of the exponential growth in the calculation.
+ Minor changes.
Version 1.477
+ The level format has been relaxed so it allows spaces between moves, e.g., "uuu rr dd rdL". This extra
bit of flexibility comes in handy sometimes, and it doesn't seem to cause any problems for the level
format. Thanks to Matthias Meger for this suggestion.
+ The files history and folders history in the 'Open' window have been split up in two sets, so there is one
set for "Open levels" and another set for "Open anything but levels". Previously, it was sometimes mildly
annoying that testing several foreign type skins in succession could push the level history off the list.
Thanks to Matthias Meger for bringing this up.
+ The readability has improved for the folders history and the files history in the 'Open' window. An
example: Instead of showing a file name as raw text like "...\Documents\Sokoban\Sokoban YASC\Levels\
MyLevelFile.sok", the item on the drop-down list now presents itself in two columns, where the first
column contains the file name "MyLevelFile.sok" and the second column contains the folder name "...\
Documents\Sokoban\Sokoban YASC\Levels\". Thanks to Matthias Meger for this suggestion.
+ Minor changes.
Version 1.476
+ Added support for the skin-format used by the program "JSoko" by Matthias Meger (2009 format).
+ There are basically two types of skin formats: Image-based skins and text-based skins, where the text
refers to images and other resources (e.g., sounds) found in other files. The primary skin type supported
by Sokoban YASC is the "Common Skin Format" which is image-based, but the application also supports
all major formats in use by other free Sokoban clones. Many of these formats are text-based (consisting
of a so-called INI-file), and previously, Sokoban YASC simply showed the foreign script in the "Open skin"
window when the skin was selected. Some of the text-formats operate with all images gathered in a single
image. In that case, Sokoban YASC now displays this image, just as if it had been an image-based skin,
the only difference being that for the text-based skin, both the image and its controlling script are
displayed on the screen.
- Bugfix (1.469): In the accompanying YASS solver and optimizer, there was a bug in the newly added
"Optimize by exploiting symmetry" module. Only symmetrical levels were affected. The bug could on rare
occasions cause the entire optimization task to stop prematurely. It happened when more than one
symmetry improvement could be found in a solution. The optimizer had been programmed so it should
handle that situation, but it didn't work correctly. Thanks to Sokobano for reporting this bug.
- Bugfix: In the accompanying YASS solver and optimizer, the optimizer could stop working if it was
allowed to run long enough to generate 4.2 billion pushes. Internally, YASS operates with a limit on the
number of pushes, and it was defined as a 32-bit unsigned integer, which has 4.2 billion as the highest
value. This limit can be reached after some hours of computation, and from then on, no improvements
were found, and the user had to stop the optimizer manually by clicking "Stop". Thanks to Ming for
reporting this bug and for helping with the debugging. Likewise, thanks to Findus who reported this bug
earlier, but back then, the attempt to track it down failed.
Version 1.475
- Bugfix (1.469): In the accompanying YASS solver and optimizer, the newly added optimization methods
"Optimize box lines, moves" and "Optimize box lines, pushes" could on rare occasions "forget" to analyze
a few branches of the game tree, and consequently overlook opportunities for finding improvements in
these branches. (Technically, the bug was an inaccurate stopping criteria for finding positions with 'n' box
lines and advance to positions with 'n+1' box lines.)
+ Minor changes.
Version 1.474
- Bugfix (1.469): In the accompanying YASS solver and optimizer, there was a bug in the newly added
"Optimize by exploiting symmetry" module. Only symmetrical levels were affected, but the bug often
caused the entire optimization task to stop prematurely, reporting "No optimizations found". Thanks to
Wolfgang Haas and Sokobano for reporting this bug.
Version 1.473
+ Minor changes.
Version 1.472
+ Changed the alternating optimizations feature so it only alternates between "moves/pushes" and
"pushes/moves". Previously, it alternated between the metrics the user had specified for the task, with the
advantage that it offered full flexibility for the alternation feature. In practice, however, this flexibility has no
importance because "moves" and "pushes" are the only metrics of interest, so sacrificing the generality is
not a great loss, and it elegantly solves a user-interface problem with the newly added feature: Injecting
alternating box lines optimization tasks. With the old general scheme, there was no way to instruct the
optimizer to start with such a box lines optimization, before the "moves/pushes" alternation sets in. It was
always the other way around: First alternation of "primary/secondary" metrics (e.g., "moves/pushes"), and
then alternating "box lines/x" tasks. This limitation was known from the start, but no satisfactory solution
was found. With the new "moves/pushes alternation only" scheme, the user's original metrics for the task
apply to the first optimization only. In particular, the user can now select a "box lines/x" optimization which
should run before the "moves/pushes" alternation sets in. Thanks to Sokobano for suggesting to solve the
user-interface problem this way.
+ Windows Vista compatibility: Microsoft has changed the screen saver logic for password protected
screen savers, so an application cannot prevent them from running. That is not what users and
applications need, so this change of behavior is an awkward step backward, and it forces applications to
try all sorts of tricks to circumvent this obstacle. Fortunately, Windows treats simulated keyboard events
generated by the application exactly the same way as true keyboard events, so an application can
prevent the screen saver from running by faking keyboard activity periodically. That is what Sokoban
YASC does now every 50 seconds, based on that the minimum screen saver idle time threshold is 1
minute. Thanks to Ming for mentioning this issue.
+ Internally (meaning it has no consequences for the user), a few things have been changed for
compatibility with newer versions of the Delphi development tool (more specifically Delphi 6), so other
developers also can work on the application, which has been developed and still is maintained using
Delphi 4.
+ Minor changes.
Version 1.471
+ Completed adding built-in solutions for David W. Skinner's "Sasquatch III" levels.
- Bugfix: Alternating optimizations could sometimes take one turn too many, performing one optimization
task twice. It happened if the last alternating task, which doesn't find any improvements, was optimizing
box lines (attempting to escape a suboptimal local minimum) as opposed to an alternating task optimizing
normal primary/secondary metrics.
- Bugfix (1.469): The option "Disable screen saver" had been disabled, i.e., it had no effect. There is an
open issue regarding screen savers under Windows Vista and newer Windows versions, where Microsoft
has changed the behavior for screen savers with password protection. Such a screen saver is launched,
even when the application suppresses the launch command(!), which until now has been the correct
method to prevent a screen saver from running.
+ Minor changes.
Version 1.470
+ Improved the structure of the settings for alternating optimizations. Thanks to Sokobano for
suggestions.
- Bugfix: Deleting new solutions in the optimizer window (or more precisely deleting optimizer tasks, since
newly found solutions are never destroyed in the optimizer window), and then re-running some
optimizations which produced the same results looked confusing because the new duplicates weren't
added to the list on the screen again. With alternating optimizations enabled, this also made the
alternations stop prematurely.
+ Minor changes.
Version 1.469
+ Added "Optimize box lines, moves" and "Optimize box lines, pushes" as new optimization methods in
the accompanying YASS solver and optimizer. A solution optimized on box lines may not be that
interesting in itself, but box lines optimization is sometimes a useful method to escape from a suboptimal
local minimum, before further attempts to optimize on moves or pushes. Thanks to Sokobano for
reporting this, and for experimental results.
+ Added a new optimization method in the accompanying YASS solver and optimizer: "Optimize by
exploiting symmetry". In a symmetrical level, the solution path may contain one or more symmetrical
positions. When that happens, there is normally a choice between two or more pushes which are
identical, except for rotations and mirroring. For non-trivial levels, the other optimization methods cannot
detect optimizations based on these choices. As so often before when it comes to optimization, the idea
to exploit symmetry is the invention of Sebastien Gouezel, who implemented it in his seminal optimizer.
The implementation in YASS, however, is radically different and is an independent piece of work. The only
thing the new module has in common with his program is the idea to exploit the symmetry. The new
optimization method runs as an integrated part of the "Rearrangements" method, and the user doesn't
need to do anything special to apply it to symmetrical levels. Thanks to Sokobano for information about
this method.
+ Added new option to the top bar menu in the optimizer window: "Settings | Alternate 'first/second' and
'box lines/first' optimization metrics". An example: After optimizing "moves, pushes", a "box lines, moves"
optimization is attempted, and if it succeeds then "moves, pushes" is tried again. This us sometimes a
useful method to escape from a suboptimal local minimum.
+ Added new option to the top bar menu in the optimizer window: "Alternating optimizations order...",
offering the choice which alternating optimizations to try first: "Primary/secondary" metrics or "Box
lines/first" metrics.
+ Moved the replay speed slider from the left side of the statusbar to the right side, next to the "Replay"
button. Since they work in tandem the proximity is ergonomically better, especially if the game window is
maximized.
+ Added new option to 'Settings': "Sound | Reset sound effects on loading a skin". The default value is
"No". It's a dilemma what to do about sound effects when a skin is loaded. If the previous skin had its own
skin-specific sound effects, then it's best to reset them before a new skin is loaded. If the user has chosen
the sound effects, then it's best to leave them untouched. Previously, the application conservatively made
a reset, but now with this new option available, it makes more sense with "No" as default value because
there are so few skins which have their own sound effects. Thanks to "George from Virginia" for this
suggestion.
+ Improved the speed of the service function responsible for calculating the boxes that can reach a given
square on the board. (The modification was removed in version 1.478 because it had a logical flaw.) The
previous version improved the speed by 25-30% by polishing the old program code. This version, on the
other hand, benefits from an improved logic, so large levels filled up with boxes are calculated almost
instantly. The only level type which still can bring the calculation to its knees is a large wide open level.
For an empty 50 x 50 level, the calculation takes less than a second, so even in this situation, the
response time is perfectly all right. The calculation time has always been good enough for the vast
majority of the levels, and with the new logic it's even more unlikely that the calculation exceeds the time
limit, which guards the application so it doesn't stop responding to user commands.
- Bugfix (1.465): High-quality scaling of screen background images had stopped working for large images
if cropping had to be applied to select a suitable center section for filling the window. The effect was that
only a part of the image showed up on the screen.
- Bugfix: When the current game position matches a snapshot played in the opposite direction, e.g., a
reverse mode snapshot when the game on the board is played in normal forward mode, then the two of
them can form a solution. In the 'Snapshots and Solutions' window, the right-click popup menu offers the
choice to concate them. This concatenation failed sometimes because it didn't initialize the deadlock
detection information correctly before the process, so it could happen that legal pushes falsely were
rejected as being illegal. It was only the concatenation which was affected, and the deadlock detection
worked correctly again when the game was resumed.
- Bugfix: Clicking a wall square highlights the movable boxes. In reverse mode, there was one special
case which didn't work: If a box could be pulled in one direction only, and the player happened to be
located at the same square as it would occupy after the pull, then the box wasn't highlighted. The bug
only affected "Show all movable boxes". Clicking the box itself highlighted its legal pulls correctly.
- Bugfix: In the accompanying YASS solver and optimizer, there was a bug in the "Vicinity search"
optimizer method which affected levels with forced initial pushes. Sometimes, these levels made the
optimizer terminate abnormally with a program error. Thanks to Sokobano for reporting this bug.
+ Minor changes.
Version 1.468
+ Improved the speed of the service function responsible for calculating the boxes that can reach a given
square on the board. The improvement is 25-30%, but since the speed always has been more than good
enough for normal levels, the difference is only noticeable for a few extreme levels. It's seldom that the
improvement has any practical importance. The default pathfinding time limit is 2 seconds (see the option
"Control | Pathfinding | Maximum search time" in the 'Settings' window), which ensures that the
application doesn't stop responding for too long, but often, extreme levels with several hundred boxes
cannot be calculated with such a small limit.
+ Minor changes.
Version 1.467
+ Increased the maximum number of boxes from 1000 to 1200. The limit is somewhat arbitrary, and 1200
makes it possible to create a checkerboard pattern on a 50x50 cells board, with half of the board filled
with boxes (48 x 48 / 2 = 1152) which is a reasonable upper bound on the population density without
creating immovable boxes. Thanks to Ming for this observation and suggestion.
Version 1.466
+ Minor changes in the "Jumanji3" skin. Thanks to Gerry Wiseman.
Version 1.465
+ Added a new improved version of Gerry Wiseman's "Jumanji3" skin. Thanks to Gerry Wiseman.
+ Minor changes.
Version 1.464
+ Added new levels by David W. Skinner.
Version 1.463
- Bugfix: Clicking the middle mouse button is a shortcut for toggling between normal play and reverse
mode play. If squares were highlighted (e.g., after activating "show legal pushes for a box") then these
highlights remained on the screen after the toggle until the user made the next action. It was only the
shortcut which was affected. Clicking the "Toggle" button itself worked correctly.
+ Minor changes.
Version 1.462
+ Minor changes.
Version 1.461
+ The common skin format now supports encoding of the outer wall trimming as colored lines at the
bottom of the skin settings cell located at the 4th column and the 4th row of the image. Second-last row: A
left justified colored line represents left trimming, and a right justified line represents right trimming. Last
row: A left justified colored line represents top trimming, and a right justified line represents bottom
trimming. The colored lines don't use the first and the last pixels in the rows, thereby leaving the entire cell
height free to use for information encoded along the left and the right side of the 4,4-cell. Sokoban YASC
supports these colored lines at the bottom of the 4,4-cell, but does not depend on them. Skins bundled
with Sokoban YASC have all their skin-specific settings embedded as text in the inner rectangle of the
4,4-cell, including wall trimming. The rationale for having the colored lines encoding is that it makes it
much easier for other clones to retrieve the most important skin-specific settings.
+ Changed the name of the option "Outer wall razor, pixels" to "Outer wall trimming, pixels". Thanks to
Eric Sunshine for this suggestion.
+ Completed adding built-in solutions for David W. Skinner's "Mas Sasquatch" levels.
+ Added built-in solutions for David W. Skinner's level sets "Microban", "Mas Microban", and "Loma".
- Removed a small limitation in the level editor. The level editor has always had the limitation that when
the user selected an area of size 50x49 or 49x50 (i.e., maximum size except 1 column or 1 row) then it
was impossible to move the area by a drag-and-drop operation. For the user this was, of course, an
unexpected behavior and it could be a minor nuisance in the few cases where the user dealt with a
maximum size level. The limitation had to do with the implementation of the board auto-size-and-
positioning logic which keeps the board in the middle, so the user can add new columns and rows without
manual repositioning. Software development is often a process more similar to organic growth than to
blue-printed design, and the original auto-size-and-positioning module had ended up so it was next to
impossible to figure out how to avoid the limitation. The only practical way to fix it was to code a new
module. There has been some controversy whether this issue was a limitation or a bug. For the developer
it was just a regrettable limitation because 1) the behavior was known and intended from the time of
shipment, and 2) it didn't cause any malfunctioning in the application. For the user, on the other hand, it
could be seen as a bug because 1) the behavior was unexpected, and 2) it prevented the user from
moving the selected area.
+ Minor changes.
Version 1.460
+ The "NightShift3" skin by Gerry Wiseman has been replaced by a new version, where the pusher
animation is similar to the box animation. Thanks to Gerry Wiseman.
+ Minor changes.
Version 1.459
+ Added new option to 'Settings': "Control | Tools | Duplicate finder | Advanced identity check
(disadvantage: misses some symmetric duplicates)". The default value is "No". When it's enabled, the
duplicate finder's board normalization service function removes redundant floors which meet these
criteria: 1) A box can never be located at the floor, and 2) the pusher never needs the floor to get in
position for pushing a box. An example: The entire right side of the (run-length encoded) board "5#|#3-7#|
#-$3-#--@#|#3-#5-#|#3-#-#3-#|#5-#3-#|#.--7#|5#" can be eliminated, producing the normalized board "5#|
#3-3#|#-$3-#|#3-#@#|#3-#-#|#5-#|#.--3#|5#". This improvement can also be seen in action in the editor
after enabling "Settings | Normalization is permitted to move player and boxes" in the editor's menu bar.
Removing these redundant floors requires a sophisticated and time-consuming calculation, and it only
affects a few levels. Unfortunately, it also makes it impossible to catch some symmetric levels because
the selection of which floors to remove inevitably depends on the orientation of the board, and
consequently that rotated and mirrored boards may be normalized differently. That's why the removal is
disabled by default.
- Bugfix (1.454): For reverse mode play and darkened illegal squares, version 1.454 promised to return to
using the images where the objects (player and boxes) have been separated from the background. The
application only did that for non-goal floor squares, probably on purpose. However, there doesn't seem to
be any reason for not doing the same for goal squares, so this is what the application does now. The
advantage is that the special background is visible behind the object, also for goal squares.
- Fixed a mathematical terms ignorance issue related to the calculation of the in-between frames for the
"stand still" animations. The calculation isn't an extrapolation but an interpolation, hence, the options
found in the 'Settings' window have been renamed accordingly.
+ Minor changes.
Version 1.458
+ Added a new improved version of Gerry Wiseman's "SokoGems" skin. Thanks to Gerry Wiseman.
+ Minor changes.
Version 1.457
+ Changed the default value for the "Open positions limit?" option in the level generator settings from
"enabled" to "disabled". It's a dilemma what the default value should be. Often, the users are best served
with "enabled" because the cutoff provides faster progress. One cannot even say that the cutoff always
leads to shorter levels. Maybe it just leads to a different class of levels so overall, "Enabled" seems a
reasonable choice, at least for the default board size, 6x6 squares. However, the casual user cannot be
expected to be aware of the existence of this cutoff and the impact it has on the search. For instance, if
users seed the generator with levels bigger than the default size, they will so to speak be "cheated" if the
cutoff makes the generator produce shorter levels than it otherwise could have done.
+ Flipped the two default row colors for the level duplicate finder tool, so the first of the duplicates appears
on the screen as highlighted.
+ Minor changes.
Version 1.456
- Bugfix (1.401): The level generator could enter an infinite loop and make the application stop
responding in this scenario: The user selected so small limits (e.g., a board with only 5x3 squares) that
the level generator could enumerate all legal permutations. In the general case, the level generator
cannot know when all permutations have been enumerated, so it simply continues trying to create new
ones until it finds one, or until the user terminates the job.
Version 1.455
- Bugfix (1.436): In large levels with more than 255 boxes, the deadlock detection and the pathfinding
could falsely categorize some pushes as being illegal. The bug was introduced in version 1.436, when the
deadlock detection started to check whether boxes freezing at their final goal squares prevent the player
from filling other goals. Thanks to Findus for reporting this bug.
- Added a workaround for a problem some Windows versions have with texts in rich-text format. The
problem occurred during clipboard export of solver statistics and optimizer statistics. When a level name
ended with a non-ascii character, some Windows versions responded with "Richedit line insertion error".
Since the statistics don't really need rich-text formatting, the simple "solution" is to collect the statistics as
plain text instead of using a rich-text component. Thanks to Ming for reporting this issue.
+ Minor changes.
Version 1.454
+ Added a new improved version of Gerry Wiseman's "Magneto" skin. Thanks to Gerry Wiseman.
+ Changed the "Copy board to clipboard" feature so it copies the current board state to the clipboard.
Previously, it copied the game starting position, but the new scheme is more useful. The change applies
to all 3 "Copy board to clipboard" keyboard shortcuts, Ctrl+B, Alt+B, and Shift+Ctrl+B. Thanks to Zlatko
Tsanev for this suggestion.
+ The terms "push-reachable squares" and "pull-reachable-squares" denote the sets of all the squares
reachable by one or more boxes when they are pushed/pulled around on the board during normal
play/reverse mode play. The pull-reachable squares may contain squares which aren't members of the
push-reachable squares. These not-push-reachable squares are, of course, illegal squares no matter
whether the game is played forwards or backwards. The pathfinding and the deadlock detection, however,
didn't block pulls to not-push-reachable squares in reverse mode play. Thanks to Matthias Meger for
suggesting to do that.
- A small drawing flaw in the walls of the "AntiqueDesk3" skin has been fixed. Thanks to Gerry Wiseman.
- Bugfix (1.450): In normal game mode it works fine with the newly added improvement, having separate
player and box images for "stand still" and "object in motion". The original player and box images are
better for "stand still" because they don't suffer from the inevitable inaccuracies, which creep in when the
objects are separated from the background, as they must be for "object in motion" images. However,
using the original images doesn't work satisfactory in reverse mode play and when squares are darkened
by the somewhat obscure but quite useful "Show simple dead squares" feature. In both cases, the original
images hide the special background superimposed on the board by the application. To avoid this conflict,
reverse mode play and the simple dead squares now again use the objects separated from the
background, i.e., the "object in motion" images. Thanks to Matthias Meger for reporting this conflict.
- Bugfix: In the duplicate finder, some levels appeared twice on the list (as if they were duplicates) in this
scenario: The current folder was selected for scanning, and one or more of its subfolders was on the list
of scanned folders too. It was levels in these subfolders which appeared twice. Thanks to Findus for
reporting this bug.
- Bugfix: The deadlock detection could on rare occasions falsely categorize some pushes as being illegal.
Thanks to Findus for reporting this bug.
- Bugfix: The accompanying YASS solver and optimizer and the built-in YASGen level generator had
some problems on computers with more than 2 GiB memory. Each individual 32-bit program, like
Sokoban YASC and YASS, can only work with 2 GiB memory, even when the computer has more than
that. Sokoban YASC and YASS allowed the user to reserve up to 75% of the physical memory for the
transposition table, but didn't impose a 2 GiB limit. If the user reserved more memory, it resulted in an
abnormal termination of the application during processing. The new versions impose a 2 GiB memory
limit, but it's an open question what the exact limit should be in order to avoid all memory access errors
related to this topic. Feedback is welcome. Thanks to Michael for reporting this bug.
+ Minor changes.
Version 1.453
- Bugfix: SuperSoko skins don't have player images, and therefore Sokoban YASC loads them together
with its own default player image. In this process, the player image was downscaled to the same tile size
as the SuperSoko images. This was unnecessary and caused a loss of drawing details if/when the skin
later is upscaled so the board size matches the game window. Only the player image was affected, not
the player-on-goal image.
+ Minor changes.
Version 1.452
+ Improved the move animation settings slightly for the pusher-on-goal object in the "AntiqueDesk3" skin.
Version 1.451
+ Added a new version of Gerry Wiseman's "AntiqueDesk3" skin where the goal squares are darker than
the floor squares, thereby improving the already excellent gameplay qualities of the skin. Thanks to Eric
Sunshine for this suggestion and to Gerry Wiseman for the drawings.
+ Stopped bundling the Gerry Wiseman skin "Metalica2" with the application. This skin is identical to the
newer "Metalica3" except for not having a grid. The grid improves the gameplay quality, so despite the
fact that the grid-less version is a perfectly good-looking skin, it doesn't feel justified to distribute both
versions.
+ Stopped bundling the Gerry Wiseman skin "NightShift2" with the application. Even though it has some
independent creative qualities of its own, such as its box animations, the skin can to some extent be seen
as a forerunner for "NightShift3". There has been talk about giving "NightShift2" a face-lift, so maybe it will
be resurrected later.
Version 1.450
+ Added a new improved version of Gerry Wiseman's "AntiqueDesk" skin. This edition is a replacement
for both the original "AntiqueDesk" skin and for "AntiqueDesk2". Thanks to Gerry Wiseman.
+ Added two new options to 'Settings': "Graphics - Board - Figures - Player on goal square - Use "Player"
image for move animation" and "Graphics - Board - Figures - Box on goal square - Use "Box" image for
move animation". The idea is that for some skins, it's easier to separate the object (player or box) from
the background when the object is drawn on top of the floor square instead of the goal square. Easier
separation improves the quality of the objects (there are less background artifacts) so it looks better when
the objects move around on the board.
+ Updated settings for the accompanying skins which can benefit from the new feature described in the
preceding point.
- Bugfix: The option found in the 'Settings' window, "Control - Pathfinding - Show legal moves - Player
cursor - Enabled", which controls whether the application highlights the pusher when it's selected with the
mouse, wasn't taken into account. Instead, the application used the value of the similar "... Box cursor -
enabled" option.
- Bugfix: Resizing the main window during replay of a game is something which seldom happens in
practice, but the application should nevertheless handle it gracefully. The application has always had the
necessary machinery to do that, but at some point it had stop working correctly under all circumstances.
Sometimes it left artifacts of the pusher image at the wrong (the old) position on the screen.
+ Minor changes.
Version 1.449
+ The Gerry Wiseman skins "Alchemyst", "AntiqueDesk3", "ChineseCheckers", "Jumanji3", "Magneto",
"MarbleMagic", and "Skulloban" have all been replaced by new improved versions. Thanks to Gerry
Wiseman.
+ Small improvements of the accompanying YASS solver have increased its score from 72 to 73 solved of
the 90 levels in the XSokoban level set, the quasi standard Sokoban solver test suite. (Current status: 84
solved.)
- The accompanying YASS solver performs a small optimization after it finds a solution. The solver tries
to reduce the number of box changes by rearranging the existing pushes. Normally this doesn't change
the number of pushes in the solution, but on rare occasions it can happen that the transformation
produces a new solution where the solved position occurs twice, i.e., where some of the tail pushes are
unnecessary because the puzzle already has been solved. This situation is handled correctly now, so it's
the shortest solution which is returned, instead of the long one with the superfluous pushes after the first
solution.
- Bugfix: The 'Tools' window has its two "hosts" for solver plugins and optimizer plugins. These hosts
failed to import a solution from the plugins if the solution suffered from the malformation mentioned in the
preceding point, i.e., when the solution contained superfluous pushes after reaching the solved position
for the first time.
- Bugfix: In the accompanying YASS solver, there was a bug in one of its self-monitoring checks so it on
rare occasions reported an error in the capacity calculation for the deadlock patterns, even though
nothing was wrong. The error report appeared after a solution had been found, and the solution itself was
not affected in any way.
- Bugfix: In the accompanying YASS solver, there was a bug so the solver on rare occasions falsely
reported that a level was unsolvable.
- Bugfix (1.434): The level reader module has some special logic for proper identification of levels with
short rows which only serve a decorative purpose and which are too short to be proper level rows. This
logic was in a sense logically correct, but it suffered from exponential growth so, say, 20 succeeding rows
with only a single wall cell each, would overwhelm the application so it stopped responding.
- Bugfix (1.401): The level generator could on rare occasions cause the application to stop responding.
The scenario was this one: By preparing the next candidate(s), the generator choosed only to produce a
single offspring, instead of producing two by invoking the crossover function. If this single offspring for
some reason was discarded, e.g., if it after adding in mutations turned out to be a duplicate, then the
generator went on an processed what it expected to be the second offspring produced by the crossover
function. Since crossover hadn't been invoked, the generator processed un-initialized "ghost" data with
unpredictable consequences.
+ Minor changes.
Version 1.448
+ The "Metalica2" skin by Gerry Wiseman has been replaced by a new version with darker floors and
walls, thereby improving the graphical qualities as well as the gameplay qualities. Thanks to Gerry
Wiseman.
+ Added a new "Metalica3" skin by Gerry Wiseman. This new skin is identical to "Metalica2" with an
added grid. Thanks to Gerry Wiseman.
+ Internally, the skin mechanism now operates with separate "stand still" and "object in motion" images.
Skins in the "Common skin format" have pusher and boxes drawn on top of floor images and goal
images. This forces the skin mechanism to identify the objects in the images by "lifting" the objects up
from the background using a "digital pair of scissors" which in practice is a pixel-by-pixel thresholded
subtraction of the background (floor or goal) from the image including both the object (pusher or box) and
the background. After scaling an image such a "lifting" is inevitably a little imprecise around the outline of
the object, in particular if the object includes a smooth gradient shadow. Previously, the skin mechanism
used the "lifted" object both for "stand still" and "object in motion" states. For "object in motion" there is no
alternative because only the "lifted" object (without background) should move across the board. For
"stand still", on the other hand, there isn't really any reason to use the imprecise "lifted" object. Instead,
the skin mechanism can just as well show the (scaled) original image and thereby keep as many details
from the original image as possible. Thanks to Gerry Wiseman for bringing this up.
+ Minor changes.
Version 1.447
+ Small improvements of the accompanying YASS solver have increased its score from 70 to 72 solved of
the 90 levels in the XSokoban level set, the quasi standard Sokoban solver test suite. (Current status: 84
solved.) Additionally, the solver has a new timeslicing scheme for the different solver methods: 50%
packing order search, 25% backward search, and 25% forward search. Previously, all methods were
allowed to run until memory was full, and sometimes this caused the packing order search method to use
up the time before the other methods got a chance.
+ The accompanying YASS solver has a new "Stop when solved" option. The default value is "No".
Previously, if the search was controlled by a time limit, then some of the solver methods used up all the
time to search for shorter solutions. That was inconvenient in a batch run, solving several levels, if the
only purpose was to just find any solution for the levels.
+ The "NightShift3" skin by Gerry Wiseman has been replaced by a new version featuring new pusher
animations and box animations. Thanks to Gerry Wiseman.
+ Renamed the skin tile "Wall top" to "Wall cap" throughout the documentation and the settings. Thanks to
Eric Sunshine for pointing out there is this proper English term for it, and thanks to John Polhemus for
updating the skin tutorial.
- Bugfix (1.436): There was a tiny bug in the deadlock detection module in the accompanying YASS
Sokoban solver. Theoretically, the bug could have both a negative and a positive impact on the solver's
ability to solve levels, but it's extremely unlikely this has ever happened in practice, so fixing the bug is
mostly a question about correctness.
- Corrected a minor graphical error in the "Metalica2" skin by Gerry Wiseman. Thanks to Eric Sunshine
for reporting this issue.
+ Minor changes.
Version 1.446
+ The "Sokoban for Windows" program recently changed the format for its solution files in order to
support long solutions with more than 65535 moves. The file conversion module here in Sokoban YASC
has been updated accordingly. The file conversion detects which format (old/new) the solution files have,
so the conversion is still fully automatic and no user intervention is required.
Version 1.445
- Corrected a graphical error in the "Metalica2" skin by Gerry Wiseman. Floor squares and goal squares
hadn't the exact same gray background color. The difference was invisible on a normal computer screen
with 24 or 32 bits color depth, but it was clearly visible on, say, a cell phone with only 16 bit color depth.
Thanks to Gerry Wiseman for repairing the skin, and to Eric Sunshine for reporting this issue.
Version 1.444
+ Changed the default population size from 20 to 50 in the YASGen level generator tool. The relationship
between genetic algorithm (GA) parameters and results is complex, and there is no straightforward
answer to the question what the optimal population size is. Generally, genetic algorithms don't benefit
from overly large populations, but on the other hand the population size must be large enough to ensure
some diversity, and tests seem to indicate that 50 is a better choice than 20.
Version 1.443
+ Added the "Disciple" level set by "Crazy Monk" (Jean-Pierre Martel and Matthias Meger), including built-
in solutions.
Version 1.442
- Corrected a spelling error in the built-in help: "manor" => "manner". (In my defense, I knew the
difference between these words perfectly well, but I hadn't written that part of the text myself and I had
overlooked the mistake by proofreading.) Thanks to George Miles for pointing it out.
Version 1.441
+ Minor changes.
Version 1.440
+ Added a partial work around for the missing support of network files. Normally, Sokoban YASC stores
application data like levels and skins in a subfolder under the user's "Documents" folder. However, if this
folder is located on a network instead of the local computer, then Sokoban YASC doesn't work. This
version tries to circumvent this limitation by making an attempt to store the application elsewhere on a
local drive. Alternatively, there is a new command line parameter "/documents" followed by a path, which
specifies which local folder to use for the application data. An example:
Notice the use of "..." around parameters with embedded spaces. You need to substitute "C:\" with the
actual drive letter in case your Windows system in on a different drive, and depending on the Windows
version you need a localized text for "Program Files". Furthermore, the folder must be located somewhere
where you have read/write access. You can run the program manually from a command line with these
parameters (Windows "Start" button and "Run..."), but to avoid typing the parameters repeatedly it's better
to edit the installed shortcuts to the application, i.e., the desktop shortcut and the start menu shortcut.
Depending on the Windows version and setup, it may be necessary to run the application with
administrator rights in order for the work around to work. Thanks to Dale Powell for reporting the missing
support for networked files issue.
Version 1.439
- Bugfix: In the 'Snapshots and Solutions' window, the right-click popup menu offers the choice to create
a forward solution based upon a backward solution when the latter is the currently selected one on the
list. The new solution was, however, simply added to the snapshot list without taking into account that the
new solution might be a new best solution, and that the "Best solutions" information presented in the
window should be updated accordingly.
Version 1.438
+ Minor changes.
Version 1.437
- Bugfix (1.436): In the accompanying YASS solver and optimizer, there was a bug in the new packing
order calculation which on rare occasions prevented the solver from finding the packing order it was
supposed to find. Often, the calculation could find a different packing order, so correcting the bug is
mostly a question about correctness, and it has practically no impact on the number of solved levels.
Version 1.436
+ Major new feature: Error recovery. In the general case it would be impractical for the users if level files
were updated each time a new solution has been found. There is no upper bound on the number of levels
in a collection, and loading, updating, and saving a huge collection could make the whole operation
unbearably slow. Also, if the user finds a new solution by playing the game in the main window, it would
be incorrect behavior to update the level immediately because the user should be given the chance to
save the level as a new file instead of updating the existing file. Previously, a hardware failure could lead
to loss of newly found, but not yet stored solutions. This situation has greatly improved now that all
solutions are logged as soon as they have been found. If the application terminates abnormally, e.g.,
because of a power failure, then the logged solutions are recovered the next time the application is
launched. In the current implementation of the error recovery, there are a few limitations related to moving
and renaming levels (simple normal cases work), so it can happen sometimes that the error recovery
cannot find the level to which a solution belongs. These orphaned solutions does not evaporate into thin
air. Instead, you're offered the choice to copy the orphaned solutions to the clipboard, so you can retrieve
them from there and decide what to do with them.
+ Major improvement: The accompanying YASS solver has become significantly better at solving goal-
room themed levels like the ones found in the XSokoban level collection, which is the traditional test suite
for Sokoban solver programs. The collection contains the 50 original levels by "Thinking Rabbit" and 40
additional levels. The previous YASS version could solve 48 of them, the new version can solve 70.
(Current status: 84 solved.) There are two main factors contributing to this improvement. First and
foremost, the mechanism responsible for precalculating the expected packing order has grown from being
practically non-existent to a quite sophisticated, and often successful analysis. For instance, the new
packing order calculation takes into account that some levels require boxes to be parked somewhere on
the board before the boxes can be brought to their final goal squares in a later game phase. The second
main factor contributing to the improvement is that the deadlock detection, which always has been quite
sophisticated, has become even more thorough now, at the expense of a much higher running time.
Instead of searching though a lot of game positions, the solver now spends most of its time analysing
potential deadlock situations by scrutinizing all fenced-in areas encountered on the board during the
search.
+ In the accompanying YASS solver and optimizer, the first phase of the optimizer module "Vicinity
search" is now up to 20% faster. The first phase generates a large set of candidate game states and
previously, the module used what technically is called a "binary search tree" (BST) to keep track of the
game states that have been generated and stored in the internal database. The time it takes to look up an
item in a BST decays over time when million of items are added to the database, and previously this was
compensated by a periodical (each time a million items had been added) optimal reorganization of the
BST. That worked very well, but substituting the BST by another (slightly more complex) tree-type called a
"red-black tree" (RBT) has proven beneficial. A RBT keeps the lookup time near optimal throughout its
lifetime at the expense of only a slightly higher time cost per added item, so overall it outperforms a plain
BST using only a periodical reorganization.
+ Improved the deadlock detection by catching a large subset of the deadlocks where a box freezes at its
final goal square and thereby prevents the player from filling other goals. This may sound like a minor
refinement but technically it required quite sophisticated new machinery so this is something to take
notice of. For efficiency, the detection is limited to situations where A) a box freezes at a goal square, or
B) 2 adjacent boxes freeze at goal squares up against a wall. This makes it possible to perform all
calculations at load time, so normal game play doesn't suffer from any running time penalties.
+ Added new option to 'Settings': "Control | Solutions | Save old best solutions after finding better ones".
The default value is "Yes". Previously, a dethroned best solution was always deleted. That made some
sense in the early years when the user could not do much else with a best solution than replay it in the
main window. Now that the user has more options - such as trying to optimize solutions, and to edit the
notes for the solution - it's much more correct that the application by default keeps the dethroned
solutions and shows them in the 'Snapshots' window together with the other snapshots and solutions.
Thanks to Matthias Meger for bringing this up.
+ Minor changes.
Version 1.435
- David W. Skinner's level "Sasquatch V-33" begins and ends with short decorative rows which doesn't
affect the playability of the level. At some point, the last of the these rows had been separated by a blank
line from the board, and therefore it was treated as a part of the level notes. Thanks to Ming for reporting
this.
Version 1.434
+ One of the tasks the level loader is facing, is that it must distinguish between boards and meta data in a
level file. To do that, it uses a set of syntax rules. Reliability has always had first priority, and it has always
been a minor annoyance that the syntax ruled out short board rows with less than 3 characters. Overall
this is a quite reasonable rule to safeguard against stray typos in comment lines in the level file, e.g., a
line containing "#" only, but there are levels using short board rows for a decorative purpose. Now the
level loader handles these short rows better, without sacrifing the reliability. The enhanced syntax rule is
that short rows are interpreted as part of a board, provided the preceding and succeeding board rows
constitute a proper board.
+ In the accompanying YASS solver and optimizer, the maximum number of pushes for the solver has
changed from 500 to 600. The traditional solver test suite is the XSokoban 90 levels set. YASS can solve
2 more levels with the 600 limit, bringing the current total up to 48 solved levels. (Current status: 84
solved.)
- Bugfix: In the accompanying YASS solver and optimizer, there was a bug in the optimizer module "Box
permutations" which only appeared on rare occasions. Sometimes an optimizer finds a new best path by
introducing a cycle that weren't there in the original solution (sic). The optimizer has always had a cycle
removal service function to handle this situation, but in contrast to the other optimizer methods, "Box
permutations" didn't initialize the cycle removal correctly. The result was that the optimizer only worked on
the moves before the cycle, in effect just optimizing a fraction of the solution. Therefore, the statistics
reported on the screen indicated exceptionally good optimization results compared to the full solution.
When the optimization task terminated, the optimized part-solution was dropped, and no harm was done
to the original solution or the level itself. Thanks to Findus for reporting this bug.
+ Minor changes.
Version 1.433
+ Minor changes in the skin tutorial by John Polhemus.
+ Updated the file format specification to clarify that run length encoding of moves and boards may use
parenthesis for grouping, and that groups may be nested. An example: A board row represented by the
characters "#-#-#-##-#-#-#" may be encoded as "2(3(#-)#)".
+ Previously, the level reader only supported run length encoded groups for moves, but not for boards.
Now grouping is supported for boards too.
+ Minor changes.
Version 1.432
- Bugfix (1.430): With "Alternate first/second optimization metrics" enabled, it could sometimes happen
that if a solution gave rise to two independent best solutions, e.g., a best moves/pushes solution and a
best pushes/moves solution, then it was only the last one found, that in the end was saved to the level
file. The problem had to do with the way the application tried to avoid saving the dethroned solutions
produced during the run. There is no easy way for the application to keep track of the history, so for safety
all alternating solutions are saved now. Thanks to Sokobano for reporting this bug.
- Bugfix: After setting the option "Control | Level format | Copy to clipboard | Show combined moves" in
the 'Settings' window to "yes", and then copying a level to the clipboard, the program also saved level files
to disk with "(" ... ")" around the combined moves for the rest of the current session with the program. This
had, of course, no impact on the program's ability to read the levels back in. It was just not the requested
formatting of the level files.
+ Minor changes.
Version 1.431
- Sokoban YASC has always handled it gracefully if a level file is blocked by another application (e.g., a
word processor used for viewing/editing the raw file) at the time Sokoban YASC must update the file on
disk. When that happens, the level file is saved to a new file, and the user is informed about the new state
of affairs. However, if no other levels were opened before exiting Sokoban YASC, the next session started
out with opening the original version of the level file. This was confusing because the user would expect
to be working on the most recent version. The user probably doesn't notice which version it is, and if the
original file still is blocked by the other application, then further modifications of the level would - correctly,
but probably surprisingly for the user - lead to more copies of the original version. Thanks to Sokobano for
bringing this up.
Version 1.430
+ New optimizer feature: Alternate first/second optimization metrics. The optimizer can now make a flip-
flop so optimization continues with alternating first/second optimization metrics (e.g., moves/pushes and
pushes/moves) until no further optimizations are found. This feature is available from the optimizer menu
under "Settings | Alternate first/second optimization metrics...".
+ Minor changes.
Version 1.429
- Bugfix (1.428): The 1.427 bugfix in version 1.428 was flawed. It made the duplicate finder fail detecting
the identity for (a few) more symmetrical levels than before 1.427. What happened was that "width" and
"height" at the spur of the moment was put in as first tiebreakers for identical board transformations,
before the more time-consuming calculation of the normalized (top left) pusher positions. That was a poor
choice because "width" and "height" don't constitute a unique tiebreaker for the 8 possible board
transformations.
+ Minor changes.
Version 1.428
- Bugfix (1.427): The bugfix in version 1.427 was flawed. Sometimes duplicates of symmetrical levels
caused the duplicate finder tools "Update solutions for duplicate levels" and "Create new collection from
unique levels" to stop with an "Internal error" message.
- Bugfix (1.424): The duplicate finder tools "Update solutions for duplicate levels" and "Create new
collection from unique levels" deliberately didn't take player lines into account when solutions were
exchanged between identical levels (identical after normalization). Non-pushing moves are automatically
moves/lines optimized when identical levels share solutions, so it can cause an unwanted increase in the
number of solutions if every little player lines improvement triggers a new solution. On the other hand, this
also meant that the tools didn't exchange solutions if the player lines metric was the only one that had
improved. This is incorrect behavior in case the user has selected to keep the best solutions only.
Therefore the logic has changed now, so a player lines improvement also triggers a new solution - despite
the unfortunate explosion in the number of solutions if the original solutions haven't moves/lines optimized
non-pushing player moves. Thanks to Sokobano for reporting this bug.
+ Minor changes.
Version 1.427
- Bugfix (1.424): The level duplicate finder failed detecting identity for some vertically flipped levels. The 7
other transformations, e.g., rotate 90 degrees clockwise, were handled correctly. Furthermore, the
duplicate finder sometimes failed detecting identity for levels with internal symmetry (because the pusher
position - for efficiency - wasn't normalized until after a transformation representative had been chosen).
Thanks to Sokobano for reporting this bug.
+ Added new options to 'Settings': "Control | Tools | Optimizer | Alternate first/second optimization
metrics". The options are also available from the main menu under "Settings" when the optimizer tabsheet
is selected in the 'Tools' window. Actually, it's only the options that have been implemented. The feature
itself is not there yet, but it would be too much work to remove the options just because of the release of a
bugfix version like this one.
Version 1.426
+ Added new option to the "Scanned folders..." menu for the duplicate finder in the 'Open' window: "Scan
currently selected folder". Previously, files in the current folder were always scanned. Thanks to
Sokobano for this suggestion.
+ Minor changes.
Version 1.425
+ Added new skin tutorial by John Polhemus to the project download section.
+ Added new levels by David W. Skinner.
+ Added shortcuts to the main window for copying the board to the clipboard, as opposed to copying the
entire level to the clipboard including title, notes, solutions, and snapshots. The new shortcuts are Ctrl+B,
Alt+B, and Shift+Ctrl+B. The first two use "fill floors?" and opposite "fill floors?" setting respectively, and
the last one uses run-length-encoding. The shortcuts for "Copy continuation moves to clipboard" have
moved to Ctrl+G and Shift+Ctrl+G. Thanks to Raymond Groenestein for this suggestion.
+ Embedded settings in common skin images don't need to begin with a "[<file name>]" text line anymore.
If the line is present, it must still match the file name without path and extension. It's better to omit the line,
so spelling errors, or forgetting to update the text after renaming the file, don't affect the program's ability
to use the embedded settings correctly.
- With logfile enabled, it was only the first instance of the accompanying YASS solver and optimizer that
created a logfile when multiple instances were activated at the same time. The other instances performed
the task with the logfile disabled after notifying the user. Now secondary instances create a logfile named
"YASS <number>.log". Thanks to Sokobano for reporting this issue.
- Bugfix: In the accompanying YASS solver and optimizer, there was a subtle bug in the pushes/moves
"Vicinity search" optimizer module. The bug only occured on very rare occasions, with unpredictable
symptoms ranging from run time errors to infinite loops making it necessary to shut down the application.
Thanks to "blackrosequilts" and Sokobano for reporting this bug.
- Bugfix: "Ghost images" of the pusher and the boxes appeared on the screen in this scenario: The
current game state was a solution, and the screen showed a solution animation. If the user now selected
"undo" to go backwards in the game, and move animation was disabled in the settings, then the
animation images remained on the screen. The game itself was correct, and it was only a matter of a
missing screen update. Thanks to John Polhemus for reporting this bug.
+ Minor changes.
Version 1.424
+ The language in the built-in help text has greatly improved. Thanks to John Polhemus for rewrites,
suggestions, and proof-reading.
+ Added new levels by David W. Skinner.
+ Added new levels by Lee J Haywood, including built-in solutions.
+ New feature: Find duplicate levels. This new feature is found on the menu in the 'Open' window. The
duplicate finder has 3 functions: "Find levels similar to the currently selected level", "Find duplicates of
levels in selected collection", and "Find all duplicate levels". Levels are normalized before comparison
(using the normalization tool that also can be found in the level editor), and rotations and mirror
transformations are taken into account as well. The first function, i.e., "Find levels similar to the currently
selected level" allows some additional slack in the comparison so the function can find duplicates as well
as variations of a level. To that end, a similarity threshold has been added to 'Settings': "Control | Tools |
Duplicate finder | Current level | Match threshold (%)".
+ Player lines metric: The number of player lines has been introduced as a new fourth secondary metric
for the Sokoban game together with the three existing ones: Box lines, box changes, and pushing
sessions. The reason for having the secondary metrics can only be that they provide information about
the quality of a solution when the Sokoban game is viewed upon as a transportation task, and in that case
the number of player lines is at least as important as the other secondary metrics for the vehicle or the
robot that must perform the moves.
+ Player lines metric: Normally, Sokoban is played by using the mouse to drag and drop boxes from on
square on the board to another. The application calculates the optimal pushes to get the box to the
destination square, and it also calculates the optimal intermediate non-pushing player moves. The latter is
calculated by the so-called "player path finder". Previously, it only optimized the number of moves, but
now it secondarily optimizes the number of player lines as well. In situations where is makes a difference,
the new player path has fewer turns and therefore looks better. From an aesthetic point of view it's also
an important improvement that the new paths are further optimized so they in the vast majority of cases
display "inertia", i.e., when there is a choice the player keeps moving in its current direction until a turn is
unavoidable. This saves the user from seeing surprising and seemingly unmotivated turns in the middle of
nowhere. With "inertia", a turn is always motivated by an obstacle on the board, or by the optimality
constraint. One minor final contribution to the aesthetic value is that the paths also are optimized to take a
long run before a short run when there is a choice between which one to take first. The box path finder
has also been improved so it is more likely to minimize the number of player lines, but optimality is not
guaranteed here. Thanks to Matthias Meger and Jean-Pierre Martel for testing and finding bugs in early
versions of the new player path finder, and a special thanks to Matthias Meger for getting and sharing the
right idea about which algorithm to use in the final version of the new player path finder.
+ Player lines metric: Removed the options "Control | Solutions | Score Metrics Weights" from the
'Settings' window. The comparison of secondary score metrics for different solutions doesn't use a
weighting scheme anymore. Instead, the comparison uses a fixed ordering of the secondary metrics: Box
lines, box changes, pushing sessions, and player lines. Changing from a weighted comparison to a fixed
order comparison was partially necessitated by the introduction of "player lines" as a new fourth
secondary metric because its weight would not blend in well with the other metrics, and partially because
it has been questionable from the start, whether weighting was a good idea.
+ Player lines metric: The accompanying YASS solver and optimizer optimizes the player lines for the
found solutions. This is, however, only player lines optimization in a weak sense of the word. For
efficiency, most of the optimization methods only take the 5 other metrics into account during the search
for improvements. Then the best found solution has its non-pushing player moves optimized, before the
solution is returned from the plugin. Tests have shown it would increase the running time by 150% to
search for player lines optimizations; that's why it hasn't been implemented. However, the "vicinity search"
optimization method can to some extent take the player lines into account during the search with only a
minimal increase of the running time, so this is the only method actively searching for player lines
optimizations.
+ Player lines metric: The Sokoban plugin interface specification has been updated with the new player
lines metric. Currently, YASS is the only publically available optimizer plugin adhering to this standard,
and therefore the changes have been made with elegance of the specification in mind instead of keeping
backward compatibility, so any other existing plugins and optimizer host programs must be updated
accordingly in order to work together with Sokoban YASC and YASS.
+ The Sokoban plugin interface specification has been extended to allow optimizers to return more than
one optimized solution at a time. For instance, an optimizer could first optimize an existing solution for
pushes, and then for moves, and then return both solutions to the host program. Currently, YASS is the
only publically available optimizer adhering to this interface specification and it doesn't have this option,
but other optimizers may very well offer that feature later.
+ The optimizer tool in the 'Tools' window has been partially prepared for plugins returning more than one
optimized solution per task. A full implementation, however, will not be made until an optimizer appears
which uses this feature.
+ The accompanying YASS solver and optimizer plugin (version 2.90) has been updated according to the
modifications of the Sokoban plugin interface specification.
+ The import of run-length encoded level files has been improved with support for run-length encoded
move groups like "2(rrrU)". This enables the application to import solutions from the YSokoban solution
database. A group may itself use run-length encoding, e.g., "2(3rU)", and groups may be nested like
"2(3r2(urr)u)". The implementation imposes a 255 nesting level limit, which in practice should be more
than enough.
+ For a skin with a directional player it could graphically look strange if "undo moves" returned the game
to the starting position. The player's direction was reset to its default direction "down" even if the player in
the starting position was located on top of a wall. The effect was that the player was facing the wall. A
better scheme is if "undo moves" brings the game back to the starting position, then let the player point in
the direction of the undone move. Thanks to Matthias Meger for this suggestion. Note that this "avoid
facing a wall in the starting position" scheme only applies to "undo moves" and not to "reset game". The
rationale is that "reset game" should make the game look exactly as it did when it was loaded, and here
the player image for the default "down" direction is often the best signature image for the player.
+ Added new options to 'Settings': "Graphics | Open window | Colors | Collection background color", and
"Graphics | Open window | Colors | Collection text color". They default to their old values, lemon-chiffon
and black respectively. The collection item highlight colors aren't customizable. For consistency, the
Windows operating system highlight colors are used throughout the application.
+ The level normalization feature found on the menu for the level editor now comes in two flavors: The
original one, and a new variant where the outer squares are filled with walls so the board forms a
rectangle. Thanks to John Polhemus for this suggestion.
+ Added optimal settings for importing the skins "NeoKwinto", "Piastrelle 2", and "Plastico" from the
"Sokoban for Windows" clone by Bjoern Kaellmark.
- Bugfix: A serious bug could on rare occasions cause loss of solutions in level files. The problem didn't
affect level files maintained and updated by this application. Only manually edited level files and level files
from other applications were at risk. The scenario was this one: A level had more than one solution stored
in the file, and the 2 first solutions weren't the best-moves solution and the best-pushes solution in that
order. In that case, playing the level seemed normal, but when the level was closed, one or both of the
best solutions disappeared.
- Bugfix: Opening a level could practically lock up the computer if a level imported from another
application had, say, 1000 snapshots with identical names. Adding numerical suffixes to make the names
unique (e.g., "Snapshot 223") suffered from exponential growth. The application has always had built-in
logic to prevent that, but it was flawed.
- Bugfix: When the user has solved a level, the application quite naturally doesn't allow more moves in
the game. However, there was one rare (and somewhat contrived) situation where this rule wasn't fully
enforced. The user can drag-and-drop a box with the mouse from one position on the board to another. If
the user does that with the last box before the level has been solved, but specifies a different square than
the last unfilled goal square, then it can happen that the path to the selected destination square goes
through the last unfilled goal square. At that point, the application correctly stopped for more pushes, but if
the next moves on the original drag-and-drop path were non-pushing player moves, then these moves
were performed, until the path again contained a box push. The application stored the correct solution
without the additional moves, so no harm was done. Thanks to Matthias Meger for reporting this bug.
- Bugfix (1.401): A snaphot of a game was mistakingly named "Solution" instead of "Snapshot" in this
scenario: After finding a solution, the user browsed through the moves and made a snapshot of a position
on the solution path. The snapshot was correctly named "Snapshot" at this point, but next time the level
was loaded the snapshot appeared with a "Solution" name. The snaphot itself was intact, and it was only
a matter of wrong text. Thanks to Sokobano for reporting this bug.
- Bugfix (1.401): In the level generator, resizing the window had the effect that the thumbnail preview of
the currently focused level candidate didn't show up on the screen. Instead, there was only the
background image. The candidate itself was intact, and thumbnail previews reappeared after selecting a
different row, i.e., after changing focus to another level candidate, so it was only a matter of a missing
screen update.
- Bugfix (1.370): In the accompanying YASS solver and optimizer it caused problems if the Windows
date/time formatting settings had changed between two sessions with Sokoban YASC. The now wrongly
formatted date/time from the last session triggered an error message about "date/time conversion error".
There is no need for such a message, so now the application simply ignores the date/time information
from the prior session in case of conversion errors. Thanks to "xbluejimx" for reporting this bug.
- Bugfix: In the accompanying YASS solver and optimizer, the optimizer terminated abnormally with a
program error if the level was so small that it had a trivial 0-push solution after the level had been
normalized, i.e., when all pushes leading to the solution were forced moves. Thanks to Sokobano for
reporting this bug.
- Bugfix: In the accompanying YASS solver and optimizer, the optimizer didn't return found improvements
in this scenario: "Global optimization" was the only method finding improvements, e.g., when it was the
only enabled method. The improvements were correctly reported on the screen, but this didn't trigger the
creation of a new improved solution when the optimizer finished processing the solution.
- Bugfix: Replaying a game didn't work properly for very long games with more than 65535 moves. After
that point, the replay function showed moves modulo 65536. The game itself was intact but it was
necessary to refresh the window (e.g., by minimizing/maximizing the window) in order to restore a correct
view of the game position.
+ Minor changes.
Version 1.423
+ Revised the release notes for version 1.418 in light of the player lines optimization idea by Jean-Pierre
Martel.
Version 1.422
+ Added new option to 'Settings': "Control | Windows | Main window | Collection name in title-line". It has
always been a little uncomfortable browsing though the levels using the buttons "Previous" and "Next" in
the main window because changes from one collection to another happened without the user seeing what
the currently loaded collection was. On the other hand, the title-line is already at risk of being too long
because of all the other information put here: Application name, level name, reverse mode indication,
board dimensions, and rotations. That's why the collection name originally wasn't added to the title-line
despite of the conveniency it would be to have it there. However, by making it an option it's up the user to
decide what to do about the collection name. Thanks to Juan Uriarte for bringing this up.
Version 1.421
+ The level normalization feature found in the editor has been slightly improved when it comes to boards
surrounded by boxes on goals instead of walls. Previously, only squares in the top row and the left
column were converted to walls. Now the squares in the bottom row and the right column are converted to
walls as well.
Version 1.420
+ Minor changes.
Version 1.419
+ The release notes have been gently improved language-wise. Thanks to Raymond Groenestein for
great help with the English language in the release notes as well as the built-in help text.
+ Minor changes.
Version 1.418
+ Added new option to 'Settings': "Control | Do/undo moves | Left-click empty square action)". The default
action is "Show boxes that can go there", i.e., show the boxes that can be pushed to the empty square.
The alternative is "Move player to square, if possible". The former is what Sokoban YASC has done for
years, but originally it did the latter. Moving the player is mostly an unproductive action; solving Sokoban
is about pushing boxes. Showing the boxes that can be pushed to an empty square, on the other hand,
sometimes provides convenient and helpful information. However, as pointed out by Jean-Pierre Martel
there is one situation where it makes sense to move the player manually. When the application moves the
player automatically it optimizes the number of player steps, but there is no secondary optimization of the
player turns, and if the Sokoban game is seen as a transportation task, then the number of player turns is
important for the vehicle or the robot performing the moves. So if the solution is to be optimized for player
turns, then it's practical to have the "Move player to square" option. Thanks to Jean-Pierre Martel for this
suggestion. (From version 1.424 the non-pushing player moves are automatically optimized primarily for
player steps, as they always have been, but also secondarily for player turns.)
+ In the 'Settings' window, the "Paste settings from clipboard" feature has been split in two: "Paste
settings from clipboard - Full" and "Paste settings from clipboard - Supplementary". The former is
reciprocal to "Copy settings to clipboard" and its effect is that the settings become "default settings +
imported settings", whereas the effect of the latter is that the settings become "current settings + imported
settings". Both forms have their use, and having both of them at least makes the distinction clear. Thanks
to Jean-Pierre Martel for observations on this issue. It can be argued that "Open settings from disk..."
should be split the same way in an "Open - Full..." and an "Open - Supplementary...". This has not been
done yet because it may look more complicated than necessary for the users, but if it turns out there is a
need for this distinction, then it can be added later.
+ Changed default value to "No" for this option in 'Settings': "Control | Miscellaneous | Use only one
processor (changes require restart to take effect)". Currently, there are no indications of problems with
running the application on multi-core computers.
+ Minor changes.
Version 1.417
- Bugfix (1.401): In the accompanying YASS solver and optimizer plugin, a minor screen updating bug
occured on rare occasions in the optimizer settings window. Thanks to Ming for reporting this bug.
Version 1.416
+ During startup the application has always shown the hint "Left clicking the left mouse button on a wall
highlights the movable boxes". Now one more tip has been added: "Left clicking on an empty square
shows the boxes that can go there".
- Bugfix (1.415): The 'Tools' window was not updated correctly anymore when a solver plugin or an
optimizer plugin finished its work. For instance, if the user terminated the plugin manually, then the text
"Terminated by user" didn't appear on the screen. It was only the screen text that was affected and the
found solution, if any, was handled correctly.
+ Minor changes.
Version 1.415
+ Minor changes.
Version 1.414
+ When sound effects are disabled the computer's sound volume is left unchanged. Previously, the sound
volume was always set to the value specified in the settings. This was impracticable if the user had
disabled the sound effects with the intention to run a sound-producing application in parallel with Sokoban
YASC, e.g., a music player. Thanks to "blackrosequilts" for pointing this out.
+ Minor changes.
Version 1.413
+ Added new option to 'Settings': "Control | Miscellaneous | Use only one processor (changes require
restart to take effect)". Default is "Yes", thereby reducing the risk of subtle errors, if any, in the
coordination of parallel tasks which otherwise would be assigned to different processors on a multi-core
computer.
+ In the level editor, the "Normalize board" feature has been slightly improved. Thanks to Sokobano for
information about a new "dead-zone" pattern variant.
+ Minor changes.
Version 1.412
+ Minor changes.
Version 1.411
+ Added an adaptation of Anders Widell's "KSokoban" skin. His graphics for this skin is distributed under
the GPL license, just like Sokoban YASC.
+ In the level editor, the "Normalize board" feature has been slightly improved with a "fill empty 2x2
pockets with walls" logic. Thanks to Sokobano for information about this pattern.
- Bugfix (1.401): If the level generator contained a modified candidate set when the user wanted to
terminate the application, and the user answered "Cancel" to the "Save candidate set?" question, then the
main window only contained a non-playable "ghost image" of the currently opened level. In reality, the
level had been closed as a part of the shutdown procedure, before the user faced the question about
what to do with the modified candidate set.
+ Minor changes.
Version 1.410
+ In the level editor, the "Normalize board" feature has been slightly improved.
- Bugfix: Deleting snapshots in the 'Snapshots and Solutions' window sometimes failed with an "Access
Violation" error message. After this message, the only way to terminate and exit the program was by
using Windows Task Manager, or by restarting Windows. Thanks to "blackrosequilts" for reporting this
bug.
+ Minor changes.
Version 1.409
+ In the level generator, the analysis of each candidate consists of two searches. The first one finds "tail
positions" which are the trivial final pushes after unwinding the "knots" in the candidate. Auto-generated
levels with connected goals often have a long tail where a great number of boxes at the end of the game
simply travel from their current positions to their final target positions. The second search finds positions
that aren't tail positions, and it's only these "genuine" positions that contribute to the fitness calculation for
the candidate. Previously, it was only the second search that was subject to the limit on the number of
open positions, if any. Now the initial tail positions search is subject to this limit as well. This may give a
less accurate fitness calculation, but it was probably too confusing for the user to see a search running
unconstrained contrary to the expectations after having set an open positions limit. Also, the unlimited
initial search could be just as time-consuming as the second search would be without a limit, so an
unlimited first search contradicted the purpose of having the limit to avoid spending too much calculation
time on a candidate.
- Bugfix (1.401): In the level generator, the statistical information about candidates, where an exhaustive
analysis failed because of memory limitations, was wrong. Candidates exceeding the "Open list limit"
were counted as "Memory full" candidates. If the generator was seeded with an existing level (as opposed
to an auto-generated candidate), and the generator was terminated during processing of this level, then it
counted in the statistics as a "Memory full" candidate too. It was only statistical errors, and they had no
affect on the level generator.
+ Minor changes.
Version 1.408
+ For the "Copy level to clipboard" feature, the default floor filling character has changed from "_" to "-".
Despite the graphical advantage filling with underscores may have, it has been a mistake that Sokoban
YASC has tried to promote the underscore as floor filling character. The hyphen is better because it
makes it easier to distinguish the individual floor squares.
+ Minor changes.
Version 1.407
+ Minor changes.
Version 1.406
- Bugfix: Importing levels from the clipboard has always been as flexible as loading levels from a disk file,
in particular, levels can have both notes, solutions, and snapshots. However, there was a glitch when
several levels were imported from the clipboard at one time. In that case, the first level - which is the one
that turns up as the currently loaded level - did not save its snapshots, if any, when the level later was
closed. Its best solutions were saved correctly, so it was only snapshots and secondary solutions that
were missing. The bug did not occur when the clipboard import only consisted of a single level.
+ Minor changes.
Version 1.405
+ If the level generator is running when the user terminates the application, then the current candidate set
is autosaved to disk instead of bothering the user with a "Save it - yes/no?" question. The only exception
is if it is a new candidate set, in which case the user still must provide a name for the set before it can be
saved.
+ Windows Vista compatibility: The built-in music-player has been removed from the application because
the new sound/music system in Windows Vista is not backwards compatible, and upgrading the music-
player in Sokoban YASC is not feasible.
- Bugfix (1.401): In the level generator settings, disabling "Autosave candidate set every 10 minutes" had
the opposite effect. The candidate set was saved to disk after every single tested candidate, a very time-
consuming operation.
+ Minor changes.
Version 1.404
+ In the level generator settings, the value "Interior walls" for random board creation has changed from a
count to a percentage. This makes it easier to experiment with different board dimensions without having
to change the "Interior walls" parameter too.
Version 1.403
+ In the 'Tools' window, resetting the window dimensions (e.g., by using the keyboard shortcuts F11 or
Ctrl+F11) now resets the grid column widths too. Starting from version 1.401, the grid column widths are
saved from one session to the next, and it's convenient to have a way to reset them to default values.
- Bugfix (1.401): Level generator candidates are "beautified" on the screen, e.g., a candidate may contain
immovable boxes or unused floor squares which on the screen appear as walls. When a candidate is
selected for editing in the editor, or selected for game play in the main window, then the candidate must
undergo the same cleansing, but here the immovable boxes removal had dropped out.
+ Minor changes.
Version 1.402
+ When the level generator is started with an empty candidate set, it seeds itself with a randomly created
candidate. Given the same settings, it always generated the same first candidate. Of course, that didn't
mean that the generator always created the same sequence of candidates because random deviations
start building up from the second candidate. However, for diversity it's better that the first candidate is
random too.
Version 1.401
+ Major new feature: Level generation. The "YASGen" level generator has been equipped with a graphical
user interface and integrated in Sokoban YASC. It is now one of the tools in the 'Tools' window.
+ Major feature enhancement: In the accompanying YASS solver and optimizer plugin, the optimizer has
been improved in several ways. First and foremost, the strongest optimization method, "Vicinity search",
is much less dependent of the user's flair for adjusting the parameters to match the individual levels. The
introduction of "Vicinity quick searches" typically produces reasonable optimizations with default settings,
so users don't even need to understand what the settings mean. The new "quick searches" perform
successive 1-box vicinity searches before any selected 2-box searches. For instance, with the default
settings 2-box 20/10 squares, 3 quick searches are performed: 1-box 10 squares, 1-box 20 squares, and
1-box all squares. For small levels, this runs so fast that the user doesn't notice it. For large levels, a 2-
box 20/10 is time consuming, and often the initial 1-box searches find improvements faster than they
would have been discovered by the 2-box search. This means that the new "quick searches" saves time
compared to prior versions. For very large levels, a 2-box 20/10 squares may not be possible at all, and if
the user didn't understand how to tweak the settings, nothing happened. With the new "quick searches",
the solution is automatically processed with 1-box searches, which is the best that can be done for very
large levels, so there it's a great advantage in that the user doesn't need to understand how to adjust the
settings manually. Another important improvement is the new logic in the "Rearrangements" optimization
method, which also has a new name. It has become an independent method where it previously was a
part of the "Global optimization". Then it was called "box-changes optimization", but the new name is
better, now that the method has been extended. Basically, this method looks for box changes that can
improve the solution. The addition is that if it detects that the push of the box "X" in "....A...XYZ..." is a
legal push after "A", then the method tries to promote not only "X", but also "XY", and "XYZ" as long at the
pushes constitute legal promotions. For people acquainted with the original "Vicinity search optimization"
program by Sebastien Gouezel it may be interesting to know that its quick "Box-changes" optimization
does this too, but because his "Box-changes" feature is optimized for speed instead of thoroughness, it
only deals with a small sub-set of the valid box-changes. It tries to promote "A", "AB" and "ABC" in
"...AA...ABC" if the promotions are completely independent of the intermediate pushes between the "AA"
and the third "A", also considering non-pushing player steps. The "Rearrangements" method in YASS has
none of these limitations. 1) It will try break existing box sessions. 2) It doesn't look for "A" box pushes
only, but investigates all box pushes that can be legally promoted. 3) Existing player-steps don't matter; all
that is needed is that there are legal player paths between the pushes. This makes the "Rearrangements"
optimization in YASS a much more thorough method, but also a much slower method, than the "Box-
changes" optimization method in the program by Sebastien Gouezel.
+ Minor feature enhancement: The editor feature "Remove redundant walls" has been upgraded to a
"Normalize board" feature. It fills jagged wall edges, fills unused "tubes", removes redundant walls,
unused boxes, and unused goals. Thanks to Sokobano for suggestions leading to this improvement.
+ Activated the web-links in the built-in help text. Previously, the web-site references found here were
textual information only. Please note that some of the links are "dead" because their original web-sites no
longer exist.
+ In the 'Tools' window, all column widths for the task queue grids are now saved from one session to the
next. Originally this was not considered important enough to implement, so thanks to Jean-Pierre Martel
and Sokobano for pointing out that this omission was a nuisance in the daily work with the program.
- Bugfix: In the accompanying YASS solver and optimizer plugin, the optimizer reported the elapsed time
correctly during the run, but on exit the plugin returned the elapsed time multiplied by 2. The error was not
visible to users of Sokoban YASC because it calculates the elapsed time by itself, but the plugin should,
of course, return the correct time. Thanks to Raymond Groenestein for reporting this bug.
- Bugfix: In the accompanying YASS solver and optimizer plugin, the was a bug in the optimizer which
never affected the use of the plugin in Sokoban YASC, but it could theoretically affect its use from other
host programs. An invalid input solution made the plugin terminate with a run time error. Ironically, the
plugin has always carefully validated the input solution, but due to later modications of the optimizer it
erred when it sent a message about the situation back to the host program. Thanks to Raymond
Groenestein for reporting this bug.
- Bugfix: In the accompanying YASS solver and optimizer plugin, the settings for the "Vicinity search"
optimization method were temporarily reset to their default values if the user opened the 'Settings' window
for the plugin while the optimizer was running. The reset only affected the currently running task, and the
optimizer used the correct settings again the next time it was started.
- Bugfix: For skins having floor tiles, the empty floors on the board didn't show up in the 'Snapshots and
Solutions' window in this scenario: Import a level from the clipboard. Then import a solution/snapshot for it
from the clipboard, and delete the solution/snapshot again. Then import a solution/snapshot from the
clipboard again. The problem only affected the display, the imported solution/snapshot was all right.
- Bugfix: After rotating and mirroring the board, the textual representation of solutions and snapshots
meant for export to the clipboard weren't updated accordingly if the textual representation had been
exported before. Internally, the solutions and snapshot were correct; it only affected the "copy
solution/snapshot to clipboard" feature in the 'Snapshots and Solutions' window.
+ Minor changes.
Version 1.400
- Bugfix: In the accompanying YASS solver and optimizer, terminating the solver while it saved positions
to disk had stopped working. If it happened, the user had to quit the program in order to stop the solver.
+ Minor changes.
Version 1.399
+ In the accompanying YASS solver and optimizer, the optimizer option "Fallback strategy" has changed
default value from "enabled" to "disabled". The option presents a dilemma between best analysis
(enabled) and batch processing (disabled). Users typically have trouble realizing that they must disable
this option for batch processing, and now that the strong "Vicinity search" method has been added to the
method palette, the fallback strategy is of less importance, and therefore it seems appropriate to change
the default setting so it favors batch processing.
Version 1.398
- Bugfix (1.397): There was one rare scenario, where the "Show simple dead squares" feature didn't fully
kick in until the user pushed a box on the board. Until then, the feature correctly showed the deadlocked
squares, but not any additional unreachable squares. The scenario was this one: With the "Show simple
dead squares" feature disabled, import a new level from the clipboard. Then enable the feature in the
'Settings' window, and upon return to the main window, only the deadlocked squares were shown. Thanks
to Matthias Meger for reporting this bug.
Version 1.397
+ Enhanced the option "Control | Deadlock detection | Show simple deadlock squares" in 'Settings' to
"Control | Deadlock detection | Show simple dead squares", the difference being that the latter includes
unreachable squares as well as deadlocked squares.
- Bugfix: The accompanying YASS solver and optimizer plugin pruned excess boxes instead of rejecting
levels violating the 255 boxes limit. This could lead to unpredictable results upon return to the calling host
program, e.g., Sokoban YASC. In fact, Sokoban YASC didn't handle the situation gracefully. Thanks to
Sokobano for reporting this bug.
- Bugfix: Saving customized widths from one session to another for the 3 top groupboxes on the solver
tabsheet and the optimizer tabsheet had stopped working at some time after it was implemented in
version 1.370. Thanks to Sokobano for reporting this bug.
+ Minor changes.
Version 1.396
+ Added new option to 'Settings': "Control | Deadlock detection | Show simple deadlock squares". The
simple deadlock squares are the squares from which a box never can reach a target square, e.g., non-
goal corner squares and the squares along a closed edge without any goals. Showing simple deadlock
squares can be disabled or enabled, and the shadow color and the transparency are configurable. Please
note that the default color and transparency for this new feature are geared towards skins with bright
floors, and they don't look particularly good with the default dark background and the default no-floor skin.
+ Improved the text entry for Sebastien Gouezel in the acknowledgements section in the online help,
clarifying the outstanding importance of his contribution, i.e., that he is the inventor of the "Vicinity search"
optimization algorithm, and that he thereby has made a major contribution - not only to the YASS
optimizer - but to the Sokoban game itself. Thanks to Matthias Meger for mentioning that the outstanding
significance of this contribution didn't get across in the old text.
+ Minor changes.
Version 1.395
+ When playing in reverse mode, a new hint text explains the situation when the current position looks
like a solution except for the fact that the player isn't in the correct zone. Without this hint, an unreflecting
user could misinterpret the situation and think that the program made a mistake by not treating the
position as a solution. Thanks to Matthias Meger for bringing this up.
Version 1.394
+ Minor changes.
Version 1.393
- Bugfix: The accompanying YASS optimizer correctly found and reported - but didn't produce - an
optimized solution if the only improvement was that the original solution contained non-optimal non-
pushing player-moves. Thanks to Sokobano for reporting this bug.
Version 1.392
- Bugfix: A spurious error message occured during level editing in the 'Tools' window in this scenario:
Click "Create new level", import a level from the clipboard, click "Create new level" again, and answer
"No" to the question "This level is new. Do you want to save the new level?". Now an uncalled-for error
message appeared. The level editor continued to work correctly though. Thanks to Ming for reporting this
bug.
Version 1.391
+ Added a new minor feature: "Make a forward solution from a reverse mode solution". The new feature
appears on the right-click menu for the grid in the 'Snapshots and Solutions' window. After solving a level
backwards, the program has always automatically created a forward version of the solution if the solution
was a new best solution, but until now, there was no way to convert secondary reverse mode solutions to
forward solutions.
Version 1.390
+ Changed the ".sok" level-files format so it uses "[...]" for jumps in reverse mode games instead of
"<...>". The square brackets avoid the conflicts the old notation might have with html and xml-encoding of
the games in other Sokoban file-formats. For backward compatibility "<...>" is still supported by the
program.
Version 1.389
+ Added a game-play keyboard enhancement for reverse mode play. When the keyboard is used for
reverse mode play, it's sometimes necessary to move the player without pulling a box that normally would
be dragged along by the player move. This task was accomplished by combining the [Ctrl] key with the
arrows. Now there is a very convenient alternative, using arrow keys only. Letting the player bump into a
box detaches the box so the player can move in the opposite direction without pulling the box. Thanks to
Raymond Groenestein for this idea.
+ Minor changes.
Version 1.388
- Bugfix (1.370): The mouse-over hint-text for the 'Snapshots' button in the main window had not been
updated to reflect the new logic for a right-click with the mouse. The new convention introduced in version
1.370 is that a right-click with the mouse always resets the game if the snapshot selected in the
'Snapshots and Solutions' window happens to be a solution. It is only when the selected snapshot isn't a
solution that a right-click is a convenient shortcut for opening the snapshot (provided this is the action
chosen in the settings).
Version 1.386
+ The application load time, and the time it takes to change from one level to another, have been
dramatically reduced when the computer is busy running other tasks in the background. Previously,
Sokoban YASC was deliberately trying to be nice to other tasks by, in effect, making itself a low-priority
task when it performed some of its computational heavy image processing. The use of non-default skins
was particularly affected by this policy, making the load time intolerably slow if the computer was busy
running other tasks in the background. Thanks to "anoyedalloy" for bringing this up.
Version 1.385
+ In the accompanying YASS solver and optimizer, the optimizer has a supporting module that optimizes
by permuting the pushes that belong to the original solution. This module was added as an "afterburner"
in connection with the "Vicinity search" module, and it should not be confused for the "Box permutations"
module which doesn't limit itself to looking at the existing pushes only. The afterburner used a simple but
also very fast method, trying to reduce the number of box-changes: For each sequence of pushes of a
single box, it tried to find later pushes of the same box that could be grouped together with the sequence
under investigation. This afterburner has now been turned into a more thorough "find optimizations by
permuting the existing box-push sequences" module. The new module is slower than the old one, given
that it investigates many more permutations, but it still has the advantage that it relatively fast can spot
some permutation-optimizations that the other modules cannot find, or only can find after extensive
analysis. Note that permuting the existing pushes doesn't decrease the number of pushes, except on very
rare occasions where a permutation introduces duplicate positions. Normally, the only metrics that
improve after permutations are the other ones, e.g., moves and box-changes. The new module is fast
enough to work unnoticed for small and medium-sized levels. For large levels, you will see status
messages like "Box-changes optimization: Pushes 123..456" when the new module is operating. For
people acquainted with the optimizer by Sebastien Gouezel it may be of interest to know whether the new
module is modelled after the "quick-optimize-box-changes" feature found in his program. This is not the
case; the new module is a completely independent work with a sligthly different approach, trading time for
better results. It has been considered to implement the faster method found in Sebastien Gouezel's
optimizer, but in the end it was decided to aim for more optimizations rather than speed.
- Bugfix (1.373): In the accompanying YASS solver and optimizer, the optimizer quality suffered if logging
were enabled because the deadlock state information wasn't updated correctly. On rare occasions this
could even make the optimizer terminate with a program error.
+ Minor changes.
Version 1.384
+ Minor changes.
Version 1.383
+ Updated the license from GNU GPL version 2 to version 3.
- Bugfix (1.370): In the accompanying YASS solver and optimizer, the optimizer module "Vicinity search"
could in theory (although highly unlikely in practice) corrupt its own data after finding a new better solution
and cause the optimizer to terminate abnormally.
Version 1.382
+ New minor skin feature enhancement: Animations may now contain masked images. Previously,
animation images had to be opaque, otherwise the animation could suffer from a smearing effect, where
pixels from one frame remained on the screen if the next frame didn't cover the same pixels.
Version 1.381
+ New minor skin feature enhancement: Floors and goals may now be transparent. Floors and goals have
always had support for masking (i.e., marking parts of the background that should not be overdrawn by
pixels from the floor image or the goal image), and now transparency is supported as well. The new floor
options in the 'Settings' window are "Graphics | Board | Figures | Floor | Image | Transparent image" and
"Graphics | Board | Figures | Floor | Image | Transparency (%)". Similar options exist for the goal image.
Version 1.380
+ In the accompanying YASS solver and optimizer, the optimizer modules "Global search" and "Box
permutations" didn't take a scenario into account which best is explained by an example: The player
pushes a box to the right. Let's say there also is a box above the player after the push. In that case, it
may happen that the same position can be reached via another path which ends with pushing this other
box upwards. (A drawing helps clarify the situation: The player, a box above the player, and another box
to the right of the player.) These two paths may even have the same metrics, in which case one might
think that the path doesn't matter. However, this doesn't hold because the secondary metrics (e.g., box-
changes) for successor-positions may differ depending on which of the boxes that was pushed as the last
one. It was a well-known limitation that prior versions didn't take that into account, but now this limitation
has been lifted by extending the criteria for which positions that are considered identical by the optimizer.
Box-positions and player-positions must match, of course, but now the push-direction for the last pushed
box leading to a position is also taken into account. The result is that the optimizer is more accurate and
sometimes produce better results. Thanks to Sokobano for providing a thorough analysis of several
levels, documenting that it would be worthwhile to lift the limitation.
+ Added new option in the accompanying YASS solver and optimizer: "Optimizer fallback strategy
enabled/disabled". The fallback strategy is the box-permutations method, and previously, it was always
enabled, meaning there was no way to force the optimizer to move on to the next task in a batch run right
after, say, the vicinity search finished. The only way to limit the optimizer was with a time-limit, but then
there was no guarantee that the vicinity search ran to its completion before the optimizer moved on to the
next task. Thanks to Ming for noticing the lack of this feature.
+ Added new option to 'Settings': "Control - Solutions - Allow deletion of best solutions in 'Snapshots'
window". By default, this option is disabled, which also was the behavior in previous versions.
Sometimes, this option comes in handy. For instance, a user may want to discard push-optimal solutions
and keep move-optimal solutions only. Thanks to Daniel Cielak for bringing this up.
+ Added new option to 'Settings': "Graphics - Board - Figures - Maximum zoom factor (%)". Skins are
normally scaled so the level fits the window, but some low resolution skins suffer if they are enlarged
more than, say, 50%.
- Bugfix (1.370): In the accompanying YASS solver and optimizer, the optimizer module "Global search"
could show misleading status information during the search in this scenario: The "optimize-push-changes"
function found an improvement that exchanged the last push on the existing best path with another push
from the path. The mistake was that the dethroned last push still was flagged as a terminal position, so if
the search later found a better path to that position, then the machinery reacted as if it had found a new
best path and updated the status field on the screen accordingly. At the end of the optimization, the
optimizer correctly didn't return a new optimized solution unless the search found a solution with better
metrics than the dethroned position. Thanks to Sokobano for reporting this bug.
- Bugfix (1.323): The keyboard shortcuts "[Alt]+R" and "F2" opened up for editing names of the best
solutions in the 'Snapshots' window, even though the "Rename" button correctly was disabled when a
best solution had focus.
- Bugfix (1.234): After editing the embedded control-text in a skin-image (the text that describes how to
load the skin), the editor miscalculated how much room there is available in the image for the text. The
calculation was "Width x Height". The correct formula is "Width x Height x Bytes-per-pixel", so the effect of
the miscalculation was a too low size-limit. For instance, it was 3 times too low for a 24-bit image. Thanks
to Sokobano for reporting this bug.
Version 1.379
+ Changed the button text "Ok" to "OK" throughout the application. "Ok" was a deliberate choice because
it graphically isn't so dominating on the screen, but it turns out that no dictionaries list it as a correct
spelling. Thanks to Lee J Haywood for pointing this out.
Version 1.378
+ Added new levels by David W. Skinner.
+ The "o" in "Goal" was one pixel too narrow in the editor's mouse-cursor for the goal drawing-tool.
Version 1.377
- Bugfix (1.375): The promised increase of the vicinity squares limit from 50 to 999 was not implemented
correctly. The limit was taken modulo 256.
Version 1.376
+ Minor changes.
Version 1.375
+ In the accompanying YASS solver and optimizer, the "Vicinity search" module deliberately had a rather
small 50 vicinity squares limit per square. This limit has been removed now (or more precisely, it has been
raised to 999). Thanks to Sokobano for providing empirical evidence that the 50 square limit was too
restrictive.
+ The bugfix/work-around in version 1.374 has been refined so the application doesn't shut down in the
mentioned scenario. Instead, a message-box appears, asking the users to close the 'Tools' window before
they close the application.
Version 1.374
- Bugfix: The program terminated abnormally with a program error in this (rather rare) scenario: Open the
'Tools' window", right-click the application's icon on the Windows taskbar, and click "Close (Alt+F4)".
Interestingly, this looks like a minor bug in Windows itself. The menu-item performs 2 different actions
depending on whether the user clicks it with the mouse or uses the keyboard shortcut. The mouse-click
closes the application and the keyboard shortcut closes the current window, returning to the previous one.
Thanks to Ming for reporting this bug.
Version 1.373
+ In the accompanying YASS solver and optimizer, all improved games (typically solutions) are now
written to the log-file when logging is enabled for the optimizer. This also comes in handy for the console
application version of YASS. Here it's not always practical to specify a time limit or a push count limit, and
then the only way to terminate the optimizer is by pressing Ctrl+C which aborts console applications
without giving them a chance to save data. With logging enabled, the user can now find any improved
games in the log-file. Thanks to Ming for this suggestion.
Version 1.372
+ Minor changes.
Version 1.371
+ Minor changes.
Version 1.370
+ New Feature: The accompanying YASS solver and optimizer has a new third optimization method,
"Vicinity search", which by far is the best of the implemented methods. A big thank you to Sebastien
Gouezel, the inventor of this method, for sharing information on the algoritm. By sharing his ideas and
insights on the subject, he has made a significant and lasting contribution to the Sokoban game itself,
transcending the implementation of the algorithm in the YASS optimizer. The key idea is to permute the
positions along the best found path, allowing a small number of boxes to move to squares within a limited
distance from the original position. A second phase performs a search that is limited to these
permutations, thereby narrowing the search down to a manageable size. For people acquainted with the
original implementation of the method by Sebastien Gouezel it may be of interest to know the
improvements that can be found in YASS. First and foremost, YASS uses less memory to accomplish the
task because it only saves pushes throughout the search. Memory for moves (non-pushing player-steps)
are recycled when the moves have been expanded. This modification requires different data-structures,
and the savings depend on the legal moves/pushes ratio (not the moves/pushes ratio for a solution). This
ratio is normally above 4:1 in a Sokoban game, and the savings increase as a function of the ratio. By a
4:1 ratio, the savings are roughly a 50% reduction of the memory consumption for storing the moves and
pushes generated during the search. The savings improve the method's ability to cope with large levels.
To that end, YASS also introduces an automatical split of large levels into smaller segments. Another
improvement is that YASS reports the progress during the search, so the user has a chance to decide
whether the calculation seems worth waiting for. In YASS, all is not lost if the search is terminated
manually before the search completes. In that case, YASS checks whether the partial search contains
improvements. After having said that this method is better than the other implemented methods, is may
come as a surprise that with default settings, it is the last one that is activated. The rationale is that if the
user wants to get results quickly, say, within a minute or two, then the time is better spent running the
other methods. Vicinity search takes time, and it first delivers results upon completion. Therefore, it's
better to begin with the other methods which can deliver results instantly when improvements are found.
For further vicinity search improvements, please see the version 1.436 release notes.
+ In connection with the new "Vicinity search" optimization method, the optimizer settings in the YASS
plugin have been upgraded accordingly. With 3 methods, it's convenient to have the choice to
enable/disable them individually, and to set the activation order. Also, the vicinity search comes with its
own settings. Please note that these new settings are given special treatment by the plugin. Typically,
customized method settings and vicinity settings are only good for the level they were designed for, and
because unsuitable settings can hurt the performance significantly, the plugin takes the drastic measure
to reset these settings after 24 hours. That way, the program protects itself against being impaired as the
result of the user forgetting about one-shot customized settings.
+ Previously, sorting on columns in the 'Tools' window by clicking column headers only sorted in
ascending order. Now the sorting automatically flips ascending/descending order depending on the
current state. Thanks to Sokobano for this suggestion.
+ It has always been possible to sort solver tasks and optimizer tasks in the 'Tools' window on different
criterias like level names and metrics. A new sort criteria has been added to the palette: "Sort on
chronological order". To use it, click the column header above the row numbers. Thanks to Sokobano for
this suggestion.
+ Added new levels by David W. Skinner.
+ The file manager functions Move/Copy/Rename in the 'Open' window were more restrictive than
necessary about special characters like "/" in level names in a collection. Thanks to Sokobano for pointing
that out.
+ Changed texts from "Megabytes" to the new standard "Mebibytes" in the accompanying YASS solver
and optimizer plugin. Any customized settings for transposition table sizes must be re-entered.
+ "Copy selection to clipboard" in the editor always filled the floor cells in the level with spaces. Now it
uses the same settings as "Copy level to clipboard" in the main window and the 'Open' window, i.e., the
settings "Control | Level format | Copy level to clipboard".
+ Added new option to 'Settings': "Control - Tools - Optimizer - Discard dethroned solutions found in the
same session". By default, this option is enabled, which also was the behavior in previous versions. In
some cases, however, it may be worthwhile to keep optimizer-produced solutions for further processing
even after an optimizer has found a better solution. Thanks to Sokobano for this suggestion.
+ The 3 top groupboxes on the solver tabsheet and the optimizer tabsheet now keep a customized width
from one session to another. Previously, their widths were deliberately reset to default values at the
beginning of a new session. Thanks to Sokobano for pointing out that it's better to keep the customized
settings.
+ Which action to perform when the user issues a right-click with the mouse in the main game-playing
window has always been customizable. The default action "Load selected snapshot from the 'Snapshots'
window" is now limited to non-solution snapshots only, thereby avoiding the confusion that otherwise
occured if the currently selected snapshot happened to be a solution. Since solutions got special
treatment so they are loaded in the main window presenting the start position rather than their "true"
snapshot position which is the solved position, the user issuing a right-click would think that the right-click
had reset the game and not notice that it in reality had loaded a solution. In practice, the best way to avoid
the confusion is probably to let a right-click reset the game in this situation.
+ New minor feature added to the editor: "Remove redundant walls". Internally, the application has had
this feature for years, but it wasn't available from the editor until now. It can be found in the editor's main
menu as "Edit | Remove redundant walls". Thanks to Sokobano for this suggestion.
- Bugfix (1.354): The "Browse..." button for selecting an optimizer plugin in the 'Optimizer' window had
stopped working. The button offered selection of a solver plugin, just as the "Browse..." button in the
'Solver' window. (As a workaround it was still possible to select an optimizer plugin using 'Settings':
"Control | Tools | Optimizer | Filename").
- Bugfix (1.351): If the first time the user invoked a solver plugin was from the 'Select solver' window (as
opposed to the more normal method of invoking the plugin from the solver tabsheet in the 'Tools' window)
then the program stopped responding if the 'Select solver' window had been opened via the "Settings"
button in the main window, followed by selecting "Control | Tools | Solver | Filename". Thanks to "Blue
Jim" for reporting this bug.
- Bugfix (1.323): After editing a level in the 'Tools' window, any legal solutions and snapshots are
preserved provided they still are relevant after the editing operations. However, in case there weren't any
snapshots, but only best solutions for moves and pushes respectively, then the solutions didn't show up in
the 'Snapshots and Solutions' window upon return from the 'Tools' window to the main window. The
solutions were intact, and it was only a matter of a missing update of the screen.
- Bugfix: The accompanying YASS optimizer terminated with a program error in this (rare) situation: The
solution being optimized was a non-empty solution for a level with a trivial 0-push solution (meaning that
all boxes are located at goal squares in the starting position), and the optimizer could find a 2-push
sequence from the beginning of the game which looped back to the start position.
+ Minor changes.
Version 1.369
+ Improved the automatic skin detection of "Sokoban for Windows" skins slightly.
Version 1.368
- Bugfix (1.353): The 'Open skin' window handles image-based skins as well as script-based skins, but
the latter had stopped showing up in the window. Loading the skins worked correctly, and since the whole
text-edit area for the scripts was nicely hidden, some may have thought that this was what the window
was supposed to look like. However, the intention is to show the scripts and to offer script text-editing
facilities in the window.
+ Minor changes.
Version 1.367
- Bugfix (1.365): Right-clicking anywhere on the board triggered replay of a best solution, not just when
the "Solution" button was clicked.
Version 1.366
+ Changed the release notes slightly, and corrected a few spelling errors in the release notes.
Version 1.365
+ Right-clicking the "Solution" button in the main window triggers replay of the opposite of the normally
preferred best solution, counting moves and pushes. It's practical that it also replays the singular best
solution when there aren't two separate best pushes and best moves solutions. Thanks to Sokobano for
mentioning this.
Version 1.364
+ Windows Vista compatibility: All user data like levels and skins have moved from the "Program Files"
folder to a "My Documents" subfolder, where Windows Vista grants the user read/write permission. All
user data are now located in the folder "..\My Documents\Sokoban\Sokoban YASC" and its subfolders,
e.g., "..\Levels".
+ Windows Vista compatibility: File associations work differently in Vista, and therefore, the feature
previously found in "Settings" to associate ".sok" files and ".xsb" files with the application has been
removed. Instead, please use the "Default Programs" feature in Windows to manage your file
associations.
+ Windows Vista compatibility: The option "Launch application" after a successful installation has been
removed because the application would inherit the administrator privileges from the installation package,
something that is frowned upon in Vista. To make up for it, the program now adds an icon to the user's
desktop for quick access to the program.
+ Windows Vista compatibility: With antialiased fonts, the transparent mode for the subtexts in the
statusbar panels like "Moves" and "Pushes" doesn't work satisfactory. Therefore, the default has changed
from transparent to opaque subtexts, and to compensate for that, the built-in buttons each have their own
specialized subtext font color now.
+ Windows Vista compatibility: The Vista default window background color is now recognized as one of
the colors where it's OK for the program to use a blue color to highlight some of the panel captions.
+ Windows Vista compatibility: Vista has changed the default mouse cursor. The arrow head is bigger and
the shaft is shorter now. The custom-made mouse cursors in Sokoban YASC like "Drag" and all the editor
cursors have been redrawn accordingly.
+ Windows Vista compatibility: A custom-made arrow cursor has replaced the default Windows cursor in
the main window, i.e., the game-playing window. The custom-made arrow cursor is identical to the
Windows Vista default cursor except for the shadow. The reason for the replacement is that otherwise,
the mouse cursor makes an unpleasant jolt when it changes from the normal arrow cursor to the drag
cursor. The same problem pestered the compatibility with the Windows XP operating system. Here the
problem was solved by drawing all custom-made cursors so they have the same hot spot as the default
arrow cursor, but this time this is not enough to avoid the problem. The unshadowed custom-made
version of the default arrow cursor avoids the problem, and in practical use, it doesn't make that much
difference that it's an unshadowed cursor. The problem can still be seen in a less important situation: In
the editor, when the mouse enters and leaves the editor canvas area. If somebody has an explanation
and/or a work-around, this information will be highly appreciated.
+ Windows Vista compatibility: Vista seems to have a bug related to flat-styled toolbars, at least when
they co-operate with the Delphi programming tool. Toolbars may contain separators and dividers between
the buttons, but Vista draws an unwanted left-justified vertical line in both of them. The toolbars must be
flat-styled, otherwise Windows doesn't draw the drop-down buttons correctly, so there is a dilemma here.
The toolbar dividers in the 'Tools' window have been changed to separators, so the unwanted line acts as
a stand-in for a divider. This works reasonable well, even though the unwanted line doesn't look as good
as a real divider.
+ The level editor's mouse cursor captions (e.g., "box" and "select") have changed color from black to
white, thereby making it easier to track which drawing tool that currently is selected.
+ The main window hides itself when the 'Tools' window is active. Previously, the standard Windows
feature "Minimize window" was useless in the 'Tools' window because the main window would still be
visible, and since it hadn't focus the user could not minimize that too. Thanks to Ming for this suggestion.
- Bugfix (1.363, YASS 2.67): A serious bug had crept into the accompanying YASS solver version 2.67 so
it falsely labelled many levels as unsolvable, e.g., the level "Handmade #17" by Yoshio Murase. Moreover,
the bug could potentially miss a push-optimal solution and falsely label a longer solution as push-optimal.
The solver had got a tunnel mechanism for the backward search, similar to the tunnel mechanism
recently added to the forward search. A box is not allowed to rest on a tunnel square, but the solver must
make an exception to that rule for a final box position, and by mistake, the backward search tunnel
mechanism treated goal positions as final positions (just as in a forward search) instead of the box
starting positions.
+ Minor changes.
Version 1.363
- Bugfix (~1.321, YASS 2.34): On rare occasions, the accompanying YASS optimizer terminated
abnormally with a program error. The error was contained by the YASC host program which showed the
error message and continued without any further problems.
+ Minor changes.
Version 1.362
+ Added a new skin by Gerry Wiseman: "AntiqueDesk3".
+ The accompanying YASS solver (version 2.66) is now notably better at solving simple goal-room
themed levels. (Technically, it turned out that the solver previously shot itself in the foot with a misguiding
position evaluation function.) Additionally, dynamically calculated deadlocks have been introduced as a
supplement to the deadlocks that are precalculated when the level is loaded. Furthermore, Matthias
Meger's elegant tunnel algorithm has been implemented. Overall, the improvements amount to approx.
3% more solutions for a large body of test levels.
- Bugfix (1.352): If more levels were added to the solver task queue using the "+" button while a solver
plugin was running, and if the plugin found a solution for the currently processed level, then that particular
solution was lost. The plugin would continue its work, handling any remaining levels on the task queue
normally.
+ Minor changes.
Version 1.361
+ Minor changes.
Version 1.360
+ The accompanying YASS solver (version 2.64) now falls back to its "full-game search" if its first search
used the packing-order mechanism, and it failed because the transposition table filled up. Previously, it
was up to the user to disable the packing-order mechanism in the settings, and then try solving the level
again, but in practice, users never notice that this option makes a difference to the solver's ability to cope
with a level (even though it is actually mentioned in the "About..." text).
+ Minor changes.
Version 1.359
+ Minor changes.
Version 1.358
- Bugfix (1.352): When the user leaves the solver window, any newly found solutions are put on the
optimizer's task queue, selected for optimization. However, when the user closed the 'Tools' window and
returned to the main window, these new solutions updated the levels and were removed from the
optimizer's task queue, even though the solutions were selected for optimization. Now the levels are
updated without removing the solutions from the task queue, provided the user visits the 'Optimizer'
window before returning to the main window. There is only a weak justification for this behavior: If the
users didn't open the optimizer, then they are not interested in optimizing these solutions. It's not ideal,
and it's bound to cause confusion sometimes, but this is how it works.
+ Minor changes.
Version 1.357
+ Minor text enhancements, e.g., the text appearing on the statusbar when a level has been solved has
changed from "The level is solved" to "The level has been solved". Thanks to Lee J Haywood for
improving some of my far from perfect English texts.
Version 1.356
+ When a solution is loaded from the 'Snapshots and Solutions' window, it is now made ready for replay
from the beginning. Previously, a solution was loaded like any other snapshot, i.e., showing its current
position which for a solution is the final position. Typically, the user is more interested in replaying a
solution from the beginning than seeing the final position. Thanks to Lee J Haywood for mentioning this,
thereby confirming that the new behavior is the preferable one.
+ Added "moves" and "pushes" to the simple solver statistics and optimizer statistics.
+ Minor changes.
Version 1.355
+ One of the modules in the accompanying YASS optimizer is somewhat faster now. It's the "Global
search" (where the status text shows the transposition table size) which has a new trade-off between
speed and search accuracy, so the module in most cases finds more optimizations within a given time
limit. Technically, the speed gain comes from dampening the cascading updates when a new better path
to a position has been found. Instead of updating all successors immidiately, the updating is delayed until
a certain number of positions need to be updated. This reduces the number of times that cascading
updates permeate through the entire game tree.
- Bugfix (1.352): In the solver window and the optimizer window, the hint text "Click and drag the mouse
to change panel widths" was visible at a time where it should have disappeared. The text stayed on the
screen when the mouse moved away from the gap between the panels, and moved to the solver panel or
the optimizer panel from the left.
- Bugfix (1.240): On rare occasions, the accompanying YASS solver reported "Unsolved" where it could
report "Unsolvable", i.e., where the solver had proved the level was unsolvable.
+ For the convenience of program developers, the documentation of the "Common Sokoban Plugins
Interface" has been added to the source-file package. This version of the documentation contains a solver
plugin specification and an optimizer plugin specification.
+ Minor changes.
Version 1.354
- Bugfix (1.283): If the user loaded a skin via the 'Settings' window, but otherwise didn't do anything in the
window that expanded items in its tree view, then nothing happened the first time the user clicked the
"Browse..." button in the solver window or the optimizer window. The button reacted normally when it was
clicked again.
Version 1.353
- Bugfix (1.352): Depending on the most recent panel sizes in the 'Open' window, it could happen that the
first time the user activated the "Browse.." button in the solver window or the optimizer window, the tiled
image accompanying the plugin selection was clipped by the panel below with the "Settings..." and
"About..." buttons. It had no effect on the plugin selection, and the image would appear correctly the next
time the "Browse..." button was activated.
- Bugfix (1.302): When the user clicks "Settings..." in the solver window or the optimizer window, the
application gives the accompanying YASS solver and optimizer plugin special treatment so the expected
tabsheet (with either solver settings or optimizer settings) shows up first. This special treatment was only
given to the default YASS plugin version installed in the "Plugins" subfolder, and not to versions installed
elsewhere, say, by a different application.
Version 1.352
+ Added a task queue to the solver window, similar to the task queue in the optimizer window. Previously,
the solver user-interface only allowed solving one level at a time.
+ Added a host-side time limit feature for solvers and optimizers, meaning that a plugin without an internal
time limit feature still can be subject to time control. The only requirement plugin supports termination,
e.g., when the user clicks the "Terminate" button.
+ Added a "General settings..." button to the solver window as well as the optimizer window, thereby
providing quick access to the host-side settings. This has gained importance with the introduction of the
new host-side time limit feature.
+ Added a "Combine with [Ctrl] to search for unsolved levels" feature to the "Open prior level" and "Open
next level" buttons in the solver window, similar to the buttons in the main window.
+ Added simple statistics to the solver window and the optimizer window. By default, statistics are
disabled. The statistics can be enabled in the 'Settings' window using "Control | Tools | Solver | Statistics
enabled" and "Control | Tools | Optimizer | Statistics enabled". To access the statistics, use the new "Edit |
Statistics" item on the main menu in the 'Tools' window. This new menu item is only visible when the
statistics are enabled.
+ Feature enhancement: Previously, if a level was new or had been modified, and the user clicked "Import
from clipboard", then the application asked the user to save the level before the import took place. This
behavior was unpractical and a nuisance if the clipboard only contained solutions and snapshots for the
currently loaded level. Now importing solutions and snapshots from the clipboard doesn't require the new
or modified level to be saved beforehand.
+ Now the user can adjust the panel sizes in the 'Open' window, e.g., to match personal preferences, and
to make file-navigation easier by having a better balance between the sizes of the different panels.
Previously, the 'Open' window layout was static in the sense that the size of all panels (e.g., the file-
selection panel and the thumbnail level preview panel) was decided by the program The area reserved for
files and folders was always of a fixed, small size, even when the window size was increased, and when
the window was maximized. Therefore, file-navigation was cramped and less than optimal.
+ For consistency with panel resizing in the 'Open' window, resizing panels in the 'Tools' window is now
also based on clicking-and-dragging the gaps between the panels. Previously, the user grapped the
interior of a panel and dragged it with the mouse.
+ In the 'Tools' window, newly found solutions (created by a solver or an optimizer) are first added to their
respective levels at the time the user returns to the main window. Therefore, it can happen that old best
solutions appear on the optimizer's task queue with names like "Best Solution" after they have been
dethroned by newly found (but not yet registered) solutions. The application already had the logic to
rename the old best solutions on the task queue in a few straightforward situations, e.g., when an
optimizer improved on an existing best solution, but a lot of other scenarios weren't handled. Now the
logic has been extended to handle the situation gracefully a lot more often. However, it is still far from
being perfect. For instance, clicking "+" to add all best solutions from the currently opened collection to
the task queue still hasn't a guard against wrong names for dethroned best solutions.
- Bugfix: An error message appeared in this scenario: Import a level from the clipboard. Start a second
import from the clipboard. Answer "No" to the question "Do you want to save the new level?". Now start
importing from the clipboard for a third time. At this time, the error message "Cannot focus a disabled or
invisible window" appeared. The error message didn't cause the import to fail; the message just should
not be there. Thanks to Matthias Meger for reporting this bug.
- Bugfix: The wrong error message appeared in this scenario: Import a level from the clipboard. Start
importing a solution or snapshot from the clipboard. Answer "No" to the question "Do you want to save the
new level?". At this time, the message "No levels found in the file "..\..\*new*" appeared. The correct error
message is "The clipboard doesn't contain any levels". (It only contains solutions and/or snapshots at this
time, no Sokoban boards.) Thanks to Matthias Meger for reporting this bug.
- Bugfix: On rare occasions, the accompanying YASS solver and optimizer plugin got caught up in a very
time-consuming precalculation of deadlocks, where the plugin didn't respond, meaning the user could not
terminate the plugin normally and continue the session. Instead, the user had to close the application in
order to stop the plugin. Thanks to Sokobano for reporting this bug.
- Bugfix (1.188): The board belonging to the currently loaded level in the 'Tools' window could be
destroyed or overwritten by a board from another level and extended to maximum size with wall-filled
rows and columns in this scenario: In the 'Tools' window, select 'Open level'. Now the 'Open' window
appears. If the window settings was set to 'Show solutions', and the currently loaded file was a level
collection (as it typically is the case), and the 'Open' window was closed by choosing 'Cancel' rather than
'Ok', then the board in the 'Tools' window was overwritten by the board from the most recently calculated
level in the 'Open' window's level list.
+ Minor changes.
Version 1.351
+ Minor changes.
Version 1.350
+ Minor changes in the accompanying YASS solver and optimizer.
Version 1.349
+ Minor changes in the accompanying YASS solver and optimizer.
Version 1.348
+ Minor changes.
Version 1.347
- Bugfix (1.345): The final polishing of the optimizer plugin interface specification had an unwanted and
impractical consequence for the handling of the items on the optimizer's task queue. If a solution on the
task queue had the optimization mode 'Settings', the mode changed to the actual value used by the plugin
(e.g., "pushes and moves") at the time optimization of the solution started. The optimization mode should
remain "Settings", so a later global change of the plugin settings still can affect a whole group of solutions
on the task queue.
Version 1.346
- Bugfix: In the 'Tools' window, if a level was saved after it had been changed, then copying the level to
the clipboard worked correctly, except that the level name was wrong. The level collection name
appeared instead of the level name.
Version 1.345
+ Internally (users won't notice any difference), some changes have been made to bring Sokoban YASC
and the accompanying YASS optimizer into compliance with the current version of the "Common Sokoban
Plugins Interface Specification".
- Bugfix (1.302): If the accompanying YASS optimizer didn't find any improvements, it could on rare
occasions return a solution with the same number of moves and pushes, but with slightly worse
secondary metrics, such as one extra boxline. Thanks to Sokobano for reporting this bug.
- Bugfix (1.302): During batch processing of solutions on the optimer's task queue, the name of the
currently processed solution also showed up in the solver window, which shares most of its machinery
with the optimizer window.
+ Minor changes.
Version 1.344
+ Added new options to 'Settings': "Control - Tools - Solver - Add date to solution notes" and "Control -
Tools - Optimizer - Add date to solution notes". By default, these options are disabled.
+ Minor changes.
Version 1.343
- Bugfix (1.342): A bug had crept into the accompanying YASS optimizer so it only used one of its search
strategies (search-by-slice).
Version 1.342
- Bugfix (1.302): If the accompanying YASS optimizer didn't find any improvements, it could on rare
occasions return a copy of the existing solution instead of just reporting that no improvements were found.
Thanks to Sokobano for reporting this bug.
Version 1.341
+ Improved the accompanying YASS optimizer slightly.
Version 1.340
+ Improved the accompanying YASS optimizer.
+ Added new, minor feature: Copy continuation moves to the clipboard (Ctrl+B). After browsing back and
forth in a game, this copies the moves after the current position to the clipboard. This feature may come in
handy for combining the best moves from different snapshots.
- Bugfix: Using the keyboard shortcuts Ctrl+S ("Save") and Ctrl+A ("Save as...") had the side-effect that
the replay mode switched from replaying combined moves to single-stepping, which normally should be
activated only as long as the user presses the [Ctrl] key.
+ Minor changes.
Version 1.339
+ The accompanying YASS optimizer now has a third optimization type, "pushes only", supplementing the
"moves, pushes", and "pushes, moves" optimization types. "Pushes only" is often faster than the two
others because there are fewer occasions where "pushes only" must reconsider positions, and because it
doesn't use the secondary metrics for tie-breaking. Furthermore, it may find push-optimizations that go
unnoticed by the "pushes, moves" optimization.
Version 1.338
- Bugfix (1.337): The previous bugfix in the accompanying YASS optimizer made the optimizer miss a
considerable number of optimizations. They are now back in place, so the overall quality of the optimizer
should have increased now.
Version 1.337
- Bugfix (1.332): There was a logical flaw in the accompanying YASS optimizer so its "search-by-slice"
module didn't find all the optimations it was supposed to. Thanks to Sokobano for spotting and reporting
this problem and for providing test material that made it possible to locate and rectify the problem.
Although the logic has been rectified, this does not entail that the optimizer now finds the previously
missing optimizations within a reasonable time, so the overall quality of the optimizer has probably not
improved; in fact there are indications that the quality sometimes deteriorates. Further experiments and
tests are called for.
Version 1.336
+ The accompanying YASS optimizer is faster now. Previously, the control scheme launched the search-
by-slice module more often, but experience has shown that it in most cases is better to spend the time
using the search-full-game strategy as long as it finds any improvements.
- Bugfix (1.332): The accompanying YASS optimizer was again vulnerable to input solutions with circular
push sequences, in which case the optimizer terminated with an error message.
+ Minor changes.
Version 1.335
- Bugfix (1.302): If a status text from a running optimizer was so wide that it exceeded the window width,
then it caused flicker when the mouse hovered over the status text.
Version 1.334
+ The accompanying YASS optimizer now provides more information about its internal state during
optimization. This makes it easier for the experienced user to decide when to stop the optimizer.
+ Minor changes.
Version 1.333
- Bugfix (1.323): After using the popup menu-item "Delete all snapshots" in the snapshot window, any
best solutions remaining in the window were shown with transparent floors, even if the skin in use had
opaque floors. Thanks to Sokobano for reporting this bug.
+ Minor changes.
Version 1.332
+ Improved the accompanying YASS optimizer.
+ Minor changes.
Version 1.331
+ Added new levels by David W. Skinner.
+ Changed some of the keyboard shortcuts in the main window, so the shortcut to "Show solution" again
is Ctrl+L "as it should be", and so 'Tools' has the shortcut Ctrl+T. The new scheme is mnemonically and
ergonomically better than the old one, and the only small disadvantage is that the direct shortcut to the
editor now is Ctrl+D instead of Ctrl+E, but Ctrl+E is the only one available for "Settings".
+ Minor changes.
Version 1.330
+ Minor changes.
Version 1.329
- Bugfix (1.323): When the option to add secondary score metrics to the solution titles is enabled, this
should apply to new solutions as well as old solutions. However, titles of old solutions to the first level
loaded when the application is launched was only updated with primary metrics and not secondary
metrics.
- Bugfix (1.302): Sometimes, the screen was not updated correctly after using drag-and-drop to move an
item in the optimizer's task queue. The items on the queue were all right, but if the move had caused the
lines to scroll, then the intermediate items appeared in the line after their real position. Next time an item
received focus, it would show up correctly again.
+ Minor changes.
Version 1.328
+ Added support for multi-monitor computers. Thanks to Sokobano for bringing this up, and for testing it.
+ Minor changes.
Version 1.327
+ Added new options to 'Settings': "Control - Tools - Solver - Add plugin name to solution titles" and
"Control - Tools - Optimizer - Add plugin name to solution titles". Previously, the plugin name was always
added to the titles of solutions found by a solver or an optimizer. This makes the titles rather long, and
even though it may be handy having the solution's origin readily available in the title, it's not strictly
necessary since the origin also is added to the solution's notes.
Version 1.326
- Bugfix: Importing a new best solution from the clipboard correctly dethroned the old best solution, and
the old best solution was also saved as a normal snapshot as it should be, when this feature is enabled in
'Settings', but any notes attached to the old best solution were lost. Thanks to Sokobano for reporting this
bug.
- Bugfix (1.136): Importing a series of moves from the clipboard which concatenated to the current game
state formed a new best solution correctly created the new best solution, but the dethroned old best
solution was not saved, no matter what the settings was for saving dethroned best solutions.
Version 1.325
+ Minor changes.
Version 1.324
+ Solutions produced by solver plugins and optimizer plugins now again contain the plugin name in the
solution's name, e.g., "Solution 102/53 (YASS 2.43 Optimizer)". (It was deliberately omitted in the
previous version where the plugin name only appeared in the solution's notes, but it turns out to be handy
having it in the solution name too.)
Version 1.323
+ The best solutions for the currently loaded level are now listed in the 'Snapshots' window. In previous
versions, the only place in the main window where the statistics for the best solutions could be seen was
when the mouse hovered over the 'Solution' button. Listing the best solutions on what now is called the
'Snapshots and Solutions' window is intuitively more clear, and it makes it easier to find them, e.g., for
level management tasks. Thanks to Sokobano for this suggestion.
+ When the best solutions are listed on the snapshots list, their names become visible and more
important. Therefore, solution name templates have been added to the settings. See the section
'Graphics | Snaphots and solutions | Texts' in the 'Settings' window.
+ The level size limit in the accompanying YASS solver and optimizer plugin is back at 50x50 squares
instead of 30x30 squares.
+ Minor changes.
Version 1.322
- Bugfix: If the currently selected snapshot in the snapshot window was identical to the current game
position except for secondary game metrics (e.g., boxlines), then clicking "save snapshot" didn't save a
new snapshot but merely focused the existing snapshot on the list. Now the decision whether to create a
new snapshot, or focus the existing one, encompasses a comparison of the secondary metrics. Thanks to
Sokobano for reporting this issue.
Version 1.321
+ Improved the accompanying YASS optimizer plugin. It is still not as good as some of the other available
optimizers, but this latest improvement is a notable step forward.
+ The accompanying YASS solver and optimizer plugin now handles it gracefully, if the specified size of
the transposition table exceeds the available memory. Instead of rejecting the task with an error message,
the plugin now tries to perform the task with whatever memory it can get.
Version 1.320
+ Added support for bundling translations of the online help with the installation package. The translated
text must be a file named "Sokoban-*.rtf", it must be installed in the application data folder, and it must
have a newer file creation date than the application.
Version 1.319
- Bugfix (1.302): With Windows "Small fonts" settings, the checkboxes for each task in the optimizer
window didn't show up as elegantly as intended. For some unknown reason, they here reserve a slightly
bigger drawing area than the checkbox in the column header, and therefore they had a different
alignment. Moreover, the extra size caused the checkbox in the selected row to appear with a
background-colored small frame around the actual checkbox. Now the whole area outside the actual
checkbox is filled with the highlight color, as intended.
Version 1.318
+ Internally, the program is now prepared to move all application data files from the program folder to the
user's "My Documents" folder. This is a small step towards compatibility with Windows Vista (r), where
users normally aren't logged on as administrators, meaning they cannot save data (e.g., levels) in the
program folder. The transfer is, however, not in production yet because the file virtualization mechanism in
Windows Vista can make the program work as usual, with its data files in the program folder. Later, it may
be decided to avoid the dependency of the virtualization and physically transfer the files to "My
Documents".
- Bugfix (1.303): Optimizers can run in the background while the user continues normal game-play in the
main window. However, that had stopped working, so if an optimizer finished the calculation while the
user was playing in the main window (as opposed to looking at the progress in the optimizer window),
then the optimizer results weren't imported, and they blocked further attempts to optimize the affected
solutions for the rest of the session.
+ Minor changes.
Version 1.317
+ Added new default skin options to the menu in the 'Settings' window: "Skins | Load default skin | Yellow
crates" and "Skins | Load default skin | Brick walls".
Version 1.316
+ Minor changes.
Version 1.315
+ Added new option to 'Settings': "Control | Solutions | Include secondary metrics in solution button hint".
+ Minor changes.
Version 1.314
+ Added a "fill selected area" feature to the level editor. The options are: fill with walls, floors, goals,
boxes, boxes on goals, and a wall border.
- Bugfix (1.302): The program terminated abnormally (or rather didn't terminate) with an error message in
this scenario: A solver plugin had been activated, and an optimizer plugin was running at the time the user
tried to exit the program. After this error message, the only way to terminate and exit the program was by
using Windows Task Manager, or by restarting Windows.
+ Minor changes.
Version 1.313
- Bugfix (1.312): If the YASS optimizer didn't find any other optimizations than trivial repetitions in the
original solution, then the optimizer didn't perform these optimizations.
+ Minor changes.
Version 1.312
- Bugfix (1.302): The YASS optimizer rejected solutions with one or more repetitions and terminated
abnormally with a program error message.
Version 1.311
+ The built-in solutions in the "du Peloux" collection have been optimized.
Version 1.310
- Bugfix (1.302): The optimizer sometimes terminated with the error message "TTPurge: Internal error".
Thanks to Sokobano for reporting this bug.
Version 1.309
+ Substituted the walltype term "Single walls" by the better "Tiled walls" throughout the application.
Thanks to Ming for this idea.
+ Minor changes.
Version 1.308
+ Minor changes.
Version 1.307
+ Minor changes.
Version 1.306
+ In the snapshot window, the popup menu now offers copying the moves for the selected snapshot to the
clipboard. Thanks to Sokobano for this suggestion.
+ Minor changes.
Version 1.305
+ Feature enhancement: Load default skin with tiled walls as opposed to the default seamless walls. The
option can be found in the 'Settings' window, where the menu now has the new line: "Skins | Load default
skin | Seamless walls". Previously, the user had to find this option buried deep down in the settings
options, but tiled walls may be used more frequently than originally envisaged. Therefore, it is convenient
to have quick and easy access to them via the menu. Thanks to Ming and Sokobano for this suggestion.
Version 1.304
- Bugfix (1.302): The YASS optimizer plugin versions 2.34 and 2.35 terminated with an error message
about an internal error when the plugin optimized a level with forced initial pushes. (Ironically, the bug was
in the control code, not the productive code.)
Version 1.303
- Bugfix (1.302): In the optimizer window, all newly found optimized solutions are collected on the task-
queue until the user either closes the window or opens or saves a level. At this time the program
"decides" what to do with the newly found solutions. When a solution had been optimized in successive
steps and thereby had added several intermediate solutions to the task-queue, the program deliberately
didn't save the intermediate solutions because they typically have no interest after a better solution has
been found. There is, however, the special case where an intermediate solution and the further optimized
solution happen to be the best-moves solution and the best-pushes solution respectively, in which case
both of them should be saved. Internally, it would be impractical to check for this situation, so instead the
new scheme merely covers the special case. Now intermediate solutions are only discarded if the
improved solution is better than, or equal to the old one, counting moves as well as pushes.
+ Minor changes.
Version 1.302
+ New feature: Optimizer plugins. Optimizers are handled much like solvers in that they are pluginable
tools and may run in the background while you continue playing the game. The user interface for the
optimizers is located in the 'Tools' window. The accompanying YASS solver plugin has been upgraded
with a new optimizer module which is used as default optimizer in Sokoban YASC.
+ Feature enhancement of "Optimize moves between pushes": In normal game-play, player paths are
always guaranteed to be optimal now (with the exception of some types of player-jumps in reverse mode).
Previously, the program had a weaker function. Moves entered using the keyboard were only optimized
for simple back and forth moves, and mouse-moves, e.g., from a drag-and-drop operation, were not
perfectly optimized either. Optimization only took place if the player walked over a previously visited
square.
+ Added support for SuperSoko skins. However, please note that they don't include the player, hence, all
SuperSoko skins appear with the default player.
+ Added support for SokoStation4 skins.
+ The pathfinders for player moves, box moves, and box legal moves have been overhauled. The new
versions are much faster and can handle levels up to 125 x 125 squares. It's only in extreme cases, like a
very large empty board, that the improvements are noticable with the current 50 x 50 board limit, but the
added efficiency and the smaller temporary work areas are crucial if the limit is increased later.
+ Increased the game size limit from 65000 to 100000 moves, and the box limit from 500 to 1000 boxes.
(Version 1.467 increased the box limit to 1200.)
+ Internally, the program is now capable of handling boards up to 110 x 110 squares with up to 5000
boxes. However, this is not in production because the added memory footprint is considerable (5 MB,
completely wasted for all but the very few extremely big levels). Therefore, this feature better wait until 1
GB memory is the absolute minimum one can expect to find in a computer.
+ The level-file reader now fully strips any leading email quotation marks, i.e., ">" characters. Previously,
only boards and moves discarded leading ">" characters, but notes and titles kept them.
+ The file format description of "run-length encoded boards spanning multiple lines" has improved, thanks
to Eric Sunshine.
+ Minor feature enhancement: As usual, the secondary metrics are only visible when the mouse is over
the primary metrics, but previously, the secondary metrics disappeared after using the mousewheel to
undo/redo moves, even if the mouse still hovered over the primary metrics at the time the operation
completed. Now the secondary metrics reappear in that situation, with the new values, of course.
+ Added new option to 'Settings': "Control | Level file format | Copy to clipboard | Floor fill character". The
choices are "-" (hyphen) and "_" (underscore). Whether the fill character is used, or the floors are left
blank, depends on the neighbouring "Fill floor?" setting. Previously, the only alternative to a blank floor
was an underscore.
+ To improve readability, this version introduces separate default font sizes for low resolution screens and
high resolution screens. Sokoban YASC was originally developed with a 1024x768 screen in mind, but
that is quite dated by now. The default font size in the main game playing window is now 10 points if the
screen width is 1280 or more, while screens with a lower resolution keep the old 8 points default size.
+ Changed the release notes font size from 8 to 10 points. This makes the text more readable on high-
resolution screens.
- Bugfix (1.299): Contrary to what was listed as a small enhancement in version 1.299, the first non-
empty square in a board row was not allowed to be a box on a goal square instead of a wall. This
relaxation of the file format now works as promised.
- Bugfix (1.283): If a solver plugin found a solution for a maximum-sized level, the program crashed and
terminated abnormally.
- Bugfix (1.254): The program stopped responding after these steps: In 'Tools' window, maximize the
window and select "More settings..." in the menu. Make some modifications and click "Apply" to update
the settings.
+ Minor changes.
Version 1.301
+ Minor changes.
Version 1.300
+ The level loader has been overhauled so it loads large collections much faster. For small collections
with less than 1000 levels the difference is negligible, but for large collections with, say, 20000 levels, the
speed improvement is dramatic. For instance, what used to take 2.5 minutes may now only take 10
seconds. (It was not the actual loading of the levels that took so long time. The culprit was the duplicate
names check which didn't scale well.)
+ The 'Settings' window now provides clipboard import/export of the settings. The clipboard interchange
is, however, limited to the settings text only. Any external files, e.g., sounds and images, referenced from
the settings are not included.
+ The file format description has a more elaborate description of run-length encoded boards spanning
multiple lines.
+ Minor changes.
Version 1.299
+ The file format now encompasses run-length encoded boards spanning multiple lines.
+ The file format now allows board rows to start with boxes on goals. Earlier versions only allowed boards
to have walls as the first item in each row.
+ Minor changes.
Version 1.298
+ Exporting levels in run-length encoded format now (again) by default uses hyphens instead of
underscores to represent floors.
+ Minor changes.
Version 1.297
- Bugfix (1.294): The file-reader could not cope with levels named "#1", "#2" ... anymore because the new
support for run-length encoded boards had a logical bug regarding lines ending with a number. The
program entered an infinite loop and stopped responding to any user-commands.
+ Minor changes.
Version 1.296
+ After consulting George Petrov, author of YSokoban, the run-length encoded export format is back at
using underscores as default to represent floors. Whether to use underscores or hyphens is an option in
'Settings': "Control | Miscellaneous | Run-length encoding: Floor".
Version 1.295
+ The export of levels in run-length encoded format now uses hyphens as default to represent floors.
Previous versions had underscores as default setting and hyphens and an option that could be selected
in 'Settings'.
+ Minor changes.
Version 1.294
+ New feature: Levels may be exported in run-length encoded format. This new feature is available from
the menu in the 'Open' window. See the online help for keyboard shortcuts available in the main window.
At the same time, importing run-length encoded levels has been made an integrated part of the level-
reader, so no special actions are required by the user for loading levels in this format.
- Bugfix (1.283): In case no solvers were registered, the program crashed with a stack overflow when the
new solver window was activated. The YASS solver is installed automatically with the program and cannot
be removed from the list of registered solvers, so this problem could not happen in normal use, but only if
somebody accidentally or maliciously deleted YASS from the disk.
+ Minor changes.
Version 1.293
+ Minor changes.
Version 1.292
+ Minor changes.
Version 1.291
- Bugfix (1.289): In the new solver window, the keyboard shortcut 'Ctrl+S' was overbooked, at least
according to the button hint texts shown in the status bar. 'Ctrl+S' triggers 'Save game' and the button hint
text for 'Restart game' now correctly mentions [Home] as keyboard shortcut.
+ Minor changes.
Version 1.290
+ The replay speed trackbar in the solver window has been replaced by a custom made track bar instead
of the previously used standard Windows control.
+ Minor changes.
Version 1.289
+ New feature: The solver window now has its own 'Replay' feature, meaning you can replay a solution
here right after a solver has found a solution. In previous versions, it was necessary to return to the main
window and replay the solution there.
- Bugfix (1.283): The menu option 'Open..' in the solver window was inactive. It was meant to have the
same effect as clicking the 'Browse...' button which worked correctly.
+ Minor changes.
Version 1.288
- Bugfix (1.283): Clicking the "Solver" button in the main window while a solver was active resulted in a
misplaced error message, saying that the solver was active and should be stopped before another solver
could be selected.
+ Minor changes.
Version 1.287
- Bugfix (1.283): When the solver-window was launched for the first time directly from the main window
using the keyboard shortcut Ctrl+Q, the thumbnail view of the board was not shown properly. It didn't use
all the available area.
Version 1.286
- Bugfix (1.285): After the bugfix in 1.285, the editor history was cleared each time the user returned from
the 'Tools' window to the main window.
Version 1.285
- Bugfix (1.283): Solutions found by a solver could sometimes be lost if they had been found using the
new solver-interface in the 'Tools' window. It could happen if the user manually saved the level to disk
from the 'Tools' window (as opposed to letting the main window save the level automatically later), and if
there were no further activities on the level before exiting the program or before loading another level.
+ Minor changes.
Version 1.284
+ Made a few rearrangements of the keyboard shortcuts for the main window so the the letter 'L' became
available for the new 'Tools' button that replaced the 'Edit' button in version 1.283. Now Alt+L and Ctrl+L
open the 'Tools' window.
+ Minor changes.
Version 1.283
+ Added a new user-interface for the solver-plugins. Solvers are now an integrated part of the 'Tools'
window, together with the level editor.
+ During installation, any solvers found in the Sokoban++ solver-folder are added to the list of solvers for
this application too.
+ Minor changes.
Version 1.282
- Bugfix (1.63): If a level was solved backwards, the program crashed if the user took back some moves
and then choosed "Redo all" to replay the moves leading to the backward solution. (Technically, there was
a stack overflow caused by large temporary work areas for both the replay function and the conversion of
the backward solution.)
+ Minor changes.
Version 1.281
+ The default wall image has been upgraded to a seamless wall instead of a single-cell wall. The
standard skin by "Games 4 Brains" (website: http://www.games4brains.de) has always been elegant and
beautiful, and this enhancement makes it even better.
+ The built-in solutions in the "GRIGoRusha" collection have been improved by the YASS optimizer.
+ The built-in solutions in the "Yoshio" collection have been improved by the YASS optimizer.
+ Minor changes.
Version 1.280
+ The built-in solutions in the "GRIGoRusha" collection have been improved by the YASS optimizer.
- Bugfix (1.279): After editing the text stored in a skin, the image section rectangle remained visible on
the screen after leaving the edit-mode. This only occurred for the currently loaded skin, and it only
affected the visual display, not the skin.
+ Minor changes.
Version 1.279
+ Changed the board rendering logic slightly so skins with seamless walls can have transparent floors.
Previous versions only had full support for transparent floors for skins with single-image walls.
- Bugfix: If the user resized the 'Open' window while selecting a section of an image for, say box tiles or
wall tiles, then the user had to do the selection again; otherwise, the whole image was selected.
+ Minor changes.
Version 1.278
+ Increased the somewhat arbitrary file-size limit for skin-scripts to 2 megabytes in order to handle large
"Sokoban for Windows" scripts with embedded background-images as well as the ordinary board-tile
images, e.g., the "NightShift3" skin.
+ Minor changes.
Version 1.277
+ Added new levels by Lee J Haywood, including built-in solutions.
+ Added optimal settings for importing the Sokofan skins "Chibi" and "Green Metallic".
+ Minor changes.
Version 1.276
+ The button glyphs in the editor window have been polished, thanks to Gerry Wiseman.
+ Minor changes.
Version 1.275
+ The accompanying illustrations for the settings "Music", "Sound", and "Solver" have been polished,
thanks to Gerry Wiseman.
+ The default animation speed for "Do move" and "Undo move" have changed from 50/25 to 25/20 milli
seconds respectively. The rationale is that the higher speed is a better compromise between playability
and visual feedback, even though a person completely new to Sokoban will find it harder to follow what's
going on. However, users can always adjust the speed in 'Settings'.
Version 1.274
+ The accompanying illustrations for the settings "Music", "Sound", and "Solver" have been polished,
thanks to Gerry Wiseman.
Version 1.273
+ The accompanying illustration for the solver settings have been polished, thanks to Gerry Wiseman.
+ Minor changes.
Version 1.272
+ The level reader now handles the email convention to use leading '>' characters for quotations. The
reader ignores them before boards as well as solutions.
+ New feature: The 'Open' window has the new menu item "Create levels from solutions on the
clipboard". Internally, the program has had the code for years, but until now, the users haven't had access
to this feature.
+ The "Show legal moves" feature now handles skins with near-black pixels much better. "Show legal
moves" have always had a problem with near-black pixels. Internally, the program uses black to denote
transparent pixels, and after scaling and other image manipulations, near-black pixels risked being
interpreted as transparent. This dilemma cannot be fully eliminated, but most skins show up correctly
now, e.g., the Sokofan skin "Sokoban 97.ssk".
+ The built-in solutions in the "Holland" collection have been improved by the YASS optimizer.
+ The built-in solutions in the "Skinner" collection have been improved by the YASS optimizer.
+ Minor changes.
Version 1.271
+ The file conversion of SokoMind levels to the "Common Sokoban File Format" have been improved. In
prior versions, the conversion didn't include solutions if the SokoMind user hadn't entered a proper
username. Now the conversion finds the solutions anyway. Additionally, the solution names are now
decorated with the number of moves and pushes, e.g., "Solution 1234/567".
+ Minor changes.
Version 1.270
+ The built-in solutions in the "Skinner" collection have been improved by the YASS optimizer.
- Bugfix (1.241): When a solver finished its work on a level, the caption in the 'Open' window was
updated accordingly, even when the window currently was in use for another task, e.g., for opening a
level or loading a skin.
+ Minor changes.
Version 1.269
+ The built-in solutions in the "YASGen" collection have been improved by the YASS optimizer.
+ Minor changes.
Version 1.268
- Bugfix (1.262): A typo had crept into the caption "Sokoban - Settings" in the 'Settings' window.
+ Minor changes.
Version 1.267
+ Added new option to 'Settings': "Control | Snapshots | Include secondary metrics in titles". When it's
enabled, snapshots and solutions include all 5 metrics in the title, i.e., "moves/pushes/box lines/box
changes/pushing sessions". By default, this option is disabled, and the titles only include the 2 primary
metrics, i.e., "moves/pushes".
+ Changed the default score metrics weights so box-lines are more heavily penalized.
+ Minor changes.
Version 1.266
+ Added optimal settings for importing Gerry Wiseman's "SokoGems" skin from the "Sokoban for
Windows" clone by Bjoern Kaellmark.
Version 1.265
+ Added new levels by Lee J Haywood, including built-in solutions.
Version 1.264
+ Minor changes, e.g., changing hint-texts back to 'Restart game' instead of 'Reset game'.
Version 1.263
+ "Restart game" is a new third option for "Right-click action", together with the two previously defined
options "Load snapshot if any, else restart game", and "Undo move".
+ Minor changes.
Version 1.262
+ Added a new skin by Gerry Wiseman: "SokoGems".
+ The "NightShift3" skin by Gerry Wiseman has been replaced by a new version.
- Bugfix: In the 'Open' window, the menu item "Copy level to clipboard (Ctrl+C)" was disabled if the
directory listbox had control (as opposed to the file listbox or the collection listbox).
- Bugfix (1.240): It's not mandatory for solver-plugins to use lowercase and uppercase letters for moves
and pushes respectively, but Sokoban YASC didn't accept lowercase-only solutions.
+ Minor changes.
Version 1.261
+ Minor changes.
Version 1.260
+ Minor changes.
Version 1.259
- Bugfix (1.257): A minor cosmetic error had crept in: In the 'Settings' window, a part of the sound-image
illustration was visible during image-selection (e.g., main window background image) as long as no image
was selected.
Version 1.258
+ The "NightShift3" skin by Gerry Wiseman has been replaced by a new version.
+ Minor changes.
Version 1.257
+ Thanks to Gerry Wiseman, the settings for "Music", "Sound", and "Solver" are now accompanied by 3
new illustrations.
+ Minor changes.
Version 1.256
+ Added new levels by Lee J Haywood, including built-in solutions.
- Bugfix (1.254): After use of the new 'Apply' button in the 'Settings' window, the main window didn't
update the graphics accordingly if the 'Settings' window was closed by selecting 'Cancel'. The new
settings were saved correctly but in order to update the screen with any graphical changes, it was
necessary to re-open the 'Settings' window and close it by selecting 'Ok'.
+ Minor changes.
Version 1.255
+ Converting "Sokoban for Windows" level files and solution files: Prior versions only converted one
solution per level. Now the conversion handles multiple solutions for each level.
Version 1.254
+ Added an "Apply" button to the 'Settings' window so it's possible to save the current settings and
continue editing/viewing the settings. Prior versions only had the "Ok" button for saving, but it also closes
the window.
+ Minor changes.
Version 1.253
+ Added minor graphical improvements for computers using Windows' small fonts, which is the default
setting. (Most users probably don't know that large fonts exist, and that large fonts provide better
readability for normal use of the computer.)
+ Minor changes.
Version 1.252
+ When the mouse points to the area above the "Open" button in the main window, then the name of the
currently opened level collection is shown in the statusbar.
+ Minor changes.
Version 1.251
- Bugfix (1.241): There was a special situation where the YASS solver-plugin falsely reported that a level
was unsolvable (instead of just stating that the solver didn't find a solution): If the shortest solution for a
level exceeded the solver's depth-limit and/or push-count limit (from 'Settings'), and the solver had
enough memory to perform an exhaustive search of all positions below the limits.
- Bugfix (1.199): Actually, this is more a work-around than a bugfix because the reason for the problem is
unknown and unsolved. Since 1.199, the "Search prior/next unsolved level" feature hasn't worked
properly. For some strange unknown reason, searching through a large number of levels frequently
reported a runtime error deep inside Windows itself. The program continued working as normal after the
failed search, so no harm was done. With the new work-around, the search seems to work again.
+ Minor changes.
Version 1.250
+ Added new levels by Lee J Haywood, including built-in solutions.
Version 1.249
+ Minor changes.
Version 1.248
+ Minor skin import enhancement: The Sokofan skin format recently introduced seamless walls based on
as little as 4 images when the walls connect left and right only, i.e., not up and down. Now Sokoban YASC
handles these skins correctly.
Version 1.247
- Bugfix (1.241): When the solver window was opened from the main window (as opposed to opening it
from the 'Settings' window), the program didn't remember the most recently used solver from one session
to another. Additionally, leaving the solver window by selecting "Cancel" kept the currently selected solver
instead of restoring the original selection.
+ Minor changes.
Version 1.246
+ The specification of the "Common Sokoban Solver Plugin Interface" is ready now. This means, that the
accompanying solver YASS 2.29 and its later versions can work with all programs supporting these
solver-plugins, e.g., Sokoban++. (The specification later changed to a general "Common Sokoban
Plugins Interface", encompassing more plugin types, e.g., optimizers.)
Version 1.245
- Bugfix (1.241): When a solver finds a solution that isn't better than already found solutions, the newly
found solution is put on the snapshot list. If the level was edited later in the same session, then all of its
solutions and snapshots were deleted, even in situations where they normally would be preserved, that is,
when the editing didn't affect the solutions and the snapshots.
Version 1.244
+ Minor changes.
Version 1.243
+ Prior versions had a single enabled/disabled setting for the player animations and the box animations in
a skin. Now there are separate settings for using the animations to highlight legal moves and to show a
solved game. The new options are found in the section "Control | Solutions | Animation" in the 'Settings'
window.
+ Skins with a directional player and with a player-animation for a single direction only: This animation is
now used for solution-animations only (not for highlighting legal moves), thereby enhancing the playability
for these skins.
+ Animation options in the 'Settings' window have been renamed (back) from "Highlight animation" to
"Animation" (see 1.176). In order to re-activate any animations in the skin you currently is using, you need
to reload it.
+ Minor changes.
Version 1.242
- Bugfix (1.241): Sometimes, a solver running in the background messed up the board display in the main
window when the solver returned a solution to the currently loaded level. It was only the display that was
affected, the game itself was intact.
- Bugfix (1.241): The skin image-text-editor had stopped working properly, or more precisely, its
left/top/width/height spin-edits for accurate positioning didn't show up anymore.
Version 1.241
+ The provisional support for solver plugins is ready now. To select a solver, open the 'Settings' window
and select "Control | Solver | Filename". To open the selected solver from the main window, middle-click
the 'Solution' button or press Ctrl+Q.
+ Added the YASS solver plugin to the distribution package. YASS is an acronym for "Yet Another
Sokoban Solver" and is a solver that excels in finding push-optimal solutions for small levels.
+ Minor changes.
Version 1.240
+ The "NightShift3" skin by Gerry Wiseman has a new player animation in addition to some minor
enhancements.
+ Work in progress: Basic support for solver plugins is partially implemented. In the 'Settings' window,
users can select a solver in "Control | Solver | Filename". The program can also launch a solver so it
works on the currently loaded level, but importing any found solutions is still missing.
- Large levels with very big goal-rooms could make the program choke when it calculated the legal
moves for a box. The calculation could take so long time that in practice, there was nothing else to do but
to terminate the program abnormally, using Windows' Ctrl+Alt+Delete.
+ Minor changes.
Version 1.239
- Bugfix (1.234): Trailing spaces, if any, weren't trimmed from text-lines embedded in skin-images when
skins are loaded. Normally, this is not a problem, it only wastes a little space, but in section headers, e.g.,
"[<Skin name>]", it mattered. The script reader didn't recognize section headers with trailing spaces.
Version 1.238
+ Added support for file type associations so clicking ".sok" files and ".xsb" files in Windows Explorer
opens the files in Sokoban YASC. By default, this feature is disabled. You can activate it in the 'Settings'
window: "Control | Miscellaneous | Associate ".sok" files and ".xsb" files with this application".
+ Minor changes.
Version 1.237
+ Added a new skin by Gerry Wiseman: "NightShift3".
+ Added a new skin-animation feature: In-between frames have always been calculated by a smooth
extrapolation, but some animations may benefit from simply duplicating the original images instead. This
is now available and can be set individually for the 4 animations, e.g., "Player on goal animation". It
makes the animation more jerky but it avoids the smearing effect which sometimes occurs when highly
detailed drawings are extrapolated.
+ Minor changes.
Version 1.236
+ The term "Variation" has been changed to the better "Snapshot" throughout the application.
- Bugfix (1.233): It was impossible to install versions 1.233 .. 1.235 on top of older versions because the
installation procedure entered an infinite loop during the conversion of the existing settings.
+ Minor changes.
Version 1.235
- Removed a case of flickering which occured in the 'Select skin' window by browsing through ("foreign")
script-based skins as opposed to image-based skins. The flicker only occured at the time the currently
loaded skin was revisited.
+ Minor changes.
Version 1.234
+ Added support for embedded text in skin-images. (The text isn't visually readable.) This makes it
possible for skins to carry their own special settings, whereas skins in prior versions of the program relied
on the import-script to carry any special settings. Regarding skins distributed together with Sokoban
YASC this doesn't make any difference for the user, but for the skin-format this is a major step forward.
Skins can be shared and distributed without the program, and they will still appear exactly as it was the
designer's intention. Sokoban YASC provides the necessary tool to put text inside a skin-image; please
refer to the section "Note for Skin Designers" in the online help.
+ Removed the "no-extra-skins-included" version from the distribution because older versions of the skins
aren't compatible with the new scheme where skin-images carry their own special settings as embedded
text.
+ Added "Tooltips" to the 'Open' window so the filename under the mouse-cursor always is shown in full.
This helps a little when file-names and folder-names exceed the width of the listboxes.
+ Improved the "Sokoban for Windows" level-file conversion a little by including the copyright information.
It is, however saved in the converted file as 'Author' rather than 'Copyright holder' even though they aren't
necessarily identical. The 'Author' information is given special treatment in the common Sokoban file-
format, therefore, this alteration is the best choice.
- Bugfix (1.230): In the 'Settings' window, it had become impossible to enter meaningful values in some
fields that uses the spin-edit control. The limits were wrong so only values in the range 0..100 were
accepted.
+ Minor changes.
Version 1.233
+ Added new clipboard feature: the keyboard shortcuts "Ctrl+M" and "Ctrl+P" copy the best found
solutions moves/pushes to the clipboard in "raw" format, i.e., only the moves are copied and nothing else.
(These keyboard shortcuts used to replay the best solutions, thus, they have moved to "Alt+M" and
"Alt+P" respectively.)
+ Added new options to settings: "Control | Pathfinding | Show legal moves | Player cursor", thereby
allowing different shapes and colors of the rectangles that highlights the player and the boxes.
+ Minor changes.
Version 1.232
+ Changed one of the secondary scoring metrics: "Player steps" is now called "Push sessions" as in
some other Sokoban clones. There was a subtle difference in meaning and calculation of these 2 terms,
even though the difference seldom was noticable.
+ Added a new file conversion feature: Converting "Sokoban for Windows" level files + solution files (2005
format) to the common Sokoban file format.
+ Minor changes.
Version 1.231
+ Improved the automatic skin-type detection for "Sokoban for Windows" skins.
- Bugfix (1.227): Importing solutions from the clipboard had stopped working correctly. It only allowed
importing a single solution or snapshot in one operation; other items were ignored.
+ Minor changes.
Version 1.230
+ Added support for the skin-format used by the program "Sokoban for Windows" by Bjoern Kaellmark
(2005 format). Some skin features, like different player-tiles for moves and pushes, are not supported.
+ Added a new feature: When a new solution is found with the same number of moves/pushes as an
existing solution, then the secondary scoring metrics, e.g., "box lines", work as arbitrators, using the new
(linear) weights in settings: "Control | Solutions | Score metrics weights".
+ Minor changes.
Version 1.229
+ Minor changes.
Version 1.228
+ Improved the efficiency of the skin scripting language, thereby reducing the load time by as much as
25% for some complex skins.
+ Minor changes.
Version 1.227
+ Added support for the Sokofan skin format (2005 format). Some Sokofan skin features, like different
player-tiles for moves and pushes, are not supported.
+ Added a new file conversion feature: Converting Sokofan level files + solution files (2005 format) to the
common Sokoban file format.
+ Added new levels by Lee J Haywood, including built-in solutions.
+ Minor changes.
Version 1.226
- Bugfix (1.216): On rare occasions, the program crashed with the message "Runtime Error 103"
because it tried to output text as if it was a console-based program instead of a windows-based program.
YASC and the console-based solver program YASS share the code that precalculates deadlocks when a
level is loaded, and after some improvements, this code-lump was copied from YASS to YASC in version
1.216, including some console-messages which in the solver informed the user, that the program had
found more deadlocks than it had room for. Therefore, YASC would crash in these situations.
- Some skins with seamless walls contain a so-called "wall-top" to hide gaps that otherwise would show
up between the walls. Unfortunately, Sokoban YASC has always suffered from a misconception about
how to apply them. The result is that some wall-tops, that aren't simple 1-colour flat pieces, don't show up
correctly. Currently, there are no plans to repair it because it would require substantial changes in the
program. This version, however, helps a little by adding correct handling of some zero-offset symmetrical
wall-tops like the Sokoban++ skin "Bubble Bobble".
Version 1.225
+ Refined the alloted names for anonymous levels in a level collection during the SokoMind file-
conversion. Their titles are always something like "Level 999" where the number matches the level's
position in the file. In prior versions, the number was instead a count of the anonymous levels with the
result that, say, the fifth level could get the name "Level 4" if the fourth level wasn't an anonymous level.
Version 1.224
+ Minor changes.
Version 1.223
+ Added a new file conversion feature: Converting SokoMind level files + solution files (2005 format) to
the common Sokoban file format.
+ Added a new file conversion feature: Merging 2 or more level files.
+ The experimental "mostly clickless" mode has been overhauled. It is only an experimental feature, and
it should not be taken too seriously, but it can be activated in the 'Settings' window: "Control |
Miscellaneous | Mouse tracking mode enabled".
+ Minor changes.
Version 1.222
+ Added a new skin import feature: Loading foreign script-based skins (e.g., Visual Sokoban scripts) are
normally handled by a control-script with embedded references to the foreign script. Now, if the foreign
script contains a line with the text "[Sokoban YASC]", then the file is also read and analysed just like the
control-script, in effect allowing the foreign script to hold additional information specific to this skin.
Version 1.221
+ Added a very small improvement of the static deadlocks which is calculated when a level is loaded.
- Bugfix: The 'Open' window serves different purposes in the program, e.g., it's used for opening levels,
skins, and pictures. After using the 'Open' window for loading skins, the drop-down width of the folder-
history combobox and the file-history combobox shrunk to the bare minimum, so folder-names and file-
names in the drop-down lists weren't fully visible any more.
Version 1.220
+ Added a new option to 'Settings': Control | Miscellaneous | Copy level to clipboard: Fill floors with "_".
With default settings, this feature is disabled but it's often convenient to use underscores instead of
spaces to represent floors because some programs remove what they consider unnecessary extra
spaces.
Version 1.219
+ Minor changes.
Version 1.218
+ Minor changes.
Version 1.217
+ Added built-in solutions for 25 of David. W. Skinner's 50 "Sasquatch VII" levels.
Version 1.216
+ Added a very small improvement of the static deadlocks which is calculated when a level is loaded.
- Bugfix (1.213): The small improvement of the pre-calculated deadlocks introduced in version 1.213
could on extremely rare occasions produce a "false positive", i.e., it could label a legal position as being
illegal.
+ Minor changes.
Version 1.215
+ Minor changes.
Version 1.214
+ Minor changes.
Version 1.213
+ Added a very small improvement of the static deadlocks which is calculated when a level is loaded.
Version 1.212
+ The maximum replay speed has been doubled to 100 moves/second.
Version 1.211
+ Added new button functionality: "Ctrl+Mouse click" on the "Edit" button creates a snapshot of the
current position and opens it in the editor. In previous versions, this feature was only available using the
keyboard shortcut "Ctrl+Shift+E".
+ Minor changes.
Version 1.210
+ Added built-in solutions to more of David Holland's levels.
Version 1.209
+ Minor changes.
Version 1.208
+ Minor changes.
Version 1.207
+ Minor changes.
Version 1.206
+ Added new levels by Lee J Haywood, including built-in solutions.
+ Minor changes.
Version 1.205
+ Minor changes.
Version 1.204
- Bugfix (1.203): The level notes can be edited in the 'Open' window but if the modifications included a
manual adjustment of the timing information, then the timing information was reset to 00:00:00.
Version 1.203
- The level editor kept the level's timing information, if any, even if the existing snapshots and solutions
weren't applicable after the modifications.
Version 1.202
+ Key/value pairs in level notes and ini-files may now be written with spaces between the key and the
separator, e.g., "key : value". Prior versions only allowed spaces between the separator and the value.
Version 1.201
- Bugfix: File-manager features in the 'Open' window: Moving or copying a level to another collection: If
another level with the same name already existed in the collection, then the copied or moved level
inherited the notes, if any, from the old level.
Version 1.200
- In the 'Open' window, there was a dilemma with keyboard shortcuts like Ctrl+C and Ctrl+V for
copying/pasting levels to/from the clipboard. If the file listbox was the currently selected control in the
window, then the listbox first interpreted the keys as browsing commands, i.e., selecting the first/next item
starting with, say, "C". In that case, the menu-command operated on a different file than the one originally
selected by the user. There doesn't seem to be a way to disable the listbox browsing mechanism, so as a
work-around the program now drops the menu-command if the listbox interprets the keys as a browsing
operation, meaning the user must use the pull-down menu to perform the action instead of a keyboard
shortcut. (Thanks to Fred Minklei for reporting this problem.)
Version 1.199
+ Added new levels by Lee J Haywood, including built-in solutions.
Version 1.198
- Bugfix (1.188): Using "Save as..." in the editor window to create a new, possible modified, copy of an
existing level sometimes created an extra copy of the level in the original file. (Thanks to Fred Minklei for
reporting this bug.)
- Bugfix (1.188): Minor graphical correction: If the editor window had been opened during the session,
then the program showed one of the specialized editor mouse cursors for a few milli seconds during
shutdown.
Version 1.197
- Bugfix (1.101): Minor text correction: With the mouse over the "replay" button on the statusbar, there
could be artifacts of the old hint-text behind the replay-speed slider. This only occured in case the current
position was a deadlock.
Version 1.196
- If Windows was shutting down while Sokoban YASC was active, then the program terminated
abnormally with a runtime error. It's unlikely that this has been a problem from the beginning because it
would have been found during program testing, so chances are that the problem is a Windows XP
compatibility issue.
Version 1.195
+ When a level collection is imported from the clipboard, its name can be specified in the file notes using
a line with the keyword "Title". If unspecified, the name as usual defaults to the anonymous name "Levels"
followed by a number.
+ Minor changes.
Version 1.194
+ New editor feature: Clicking 'Shift+Ctrl+E' in the main window creates a new level based on the current
position (instead of the starting position) and opens the editor.
+ The items on the internal clipboard are saved to disk each time the user exits the editor (or more
precisely, each time the 'Internal clipboard' window is closed). This is safer than waiting until the program
ends.
+ Added new levels by Lee J Haywood, including built-in solutions.
- Bugfix (1.188): After creating a new level in the editor, the save-dialog had the application folder as
default folder instead of the "Levels" folder.
- Bugfix (1.188): After creating a new level in the editor, the editor history was cleared the first time the
user returned to the main window after the creation. The editor history is meant to survive from one
session to the next and it worked correctly for existing levels and for any further editing of the new level.
- Bugfix (1.188): After closing the editor window, the boxes were misplaced in the main window in case
the editor originally was launched while the game was in reverse mode and no moves had been
performed.
- Bugfix (1.188): After editing a level, the game engine on rare occasions failed to detect that a reverse
mode game had been invalidated when new walls blocked the moves.
- Bugfix (1.30): Renaming of levels and snapshots now guards against names that can be interpreted as
moves by the file-reader, e.g., "Dull".
+ Minor changes.
Version 1.193
- Bugfix (1.188): Saving a new level using "Save as..." in the editor window sometimes had the
consequence that the new level inherited the level notes from the level currently shown in the main
window.
- Bugfix (1.188): The 'Open' window can be activated from several places in the program but if it was
activated for the first time by clicking the button "Open" in the editor window, then the drop-down width for
the folder-history combo-box and the file-history combo-box wasn't set correctly.
Version 1.192
- Snapshots and internal clipboard items couldn't be renamed if the only modification was a change of
uppercase/lowercase characters. Now renaming is case sensitive.
+ Minor changes.
Version 1.191
- Bugfix (1.188): After deleting the last row(s) of a level in the new editor, the level was rejected as an
illegal level until it was padded with an equal number of non-empty rows.
Version 1.190
+ Added an optional grid to the level editor.
+ Added "Import built-in solution(s)" to the file-menu in the 'Open' window. Prior versions only had a rather
discrete button to activate the feature, and putting it on the menu may make it easier to find.
+ Minor changes.
Version 1.189
- The file-manager functions in the 'Open' window didn't allow renaming files and levels if the only
modification was a change of uppercase/lowercase characters. Now renaming is case sensitive.
- Bugfix: After renaming a file using the file-manager functions in the 'Open' window, a file with the old
name was created as an empty level collection if the file happened to be the one holding the currently
loaded level.
+ Minor changes.
Version 1.188
+ Replaced the old level editor by a new one.
- Bugfix (1.129): If the 'Recent skins' history in the 'Settings' window was empty, then each session with
the program added a blank line to the configuration file 'Sokoban.ini'.
+ Minor changes.
Version 1.187
+ Added new levels by Lee J Haywood, including built-in solutions.
+ Minor changes.
Version 1.186
+ The "HeavyMetal3" skin by Gerry Wiseman has been replaced by a new version.
+ Improved the logic deciding what to treat as floor-cells so a level like David W. Skinner's "Sasquatch 41"
looks better when it's rendered with a skin having floor-cell pictures.
+ Minor changes.
Version 1.185
+ The "Music Player" button in the main window was moved to a more discreet position.
- Bugfix: Letting the program show the legal moves for a box and then loading a snapshot from the
snapshot window "engraved" the legal move highlights in the main window until next time a level was
loaded.
+ Minor changes.
Version 1.184
+ Added new levels by Lee J Haywood, including built-in solutions.
+ Added new levels by Aymeric du Peloux, including built-in solutions.
+ The "HeavyMetal3" skin by Gerry Wiseman has been replaced by a new version.
+ First time the program is installed, the sound volume it initialized to 50% of the user's normal sound
volume.This reduces the risk of sound-effects becoming a disturbing factor.
+ Improved the support for Sokoban++ skins by modifying the import-script so it can cope with images
gathered in a single image. It is, however, still not possible to import skins using different tile sizes, e.g.,
"Perfect Sokoban" skins.
+ Improved the layout of the menu items in the main window.
- Bugfix (1.129): the "if"-statement in the skin-script language sometimes discarded the line following
right after "endif".
- Bugfix: Windows allows the user to launch programs using keyboard shortcuts like Ctrl+Alt+W. Doing
that inside YASC's main window had the unwanted side-effect that undo/redo moves switched to single-
stepping through combined moves (or vice-versa depending on settings). (Internally, the program didn't
detect that the [Ctrl] button was released after launching the program, hence its state was "Down" until
the user pressed and released it a second time.)
- Bugfix: After deleting a file using the file-manager function in the 'Open' window, the file was always
resurrected if the deleted file happened to be the one with the currently loaded level. This was only meant
to happen if the user started playing the level back in the main window.
- Bugfix: The drop-down width for comboboxes in the music-player's 'Open' window was only adjusted
according to the width of the widest item at program load-time and not each time the user added a new
item to the history.
+ Minor changes.
Version 1.183
+ The skins "HeavyMetal3" and "Jumanji3" by Gerry Wiseman have been replaced by new versions.
+ Added built-in solutions to more of Evgeny Grigoriev's levels and David Holland's levels.
+ New options in 'Settings': "Graphics | Editor | Colors". The colors of the different items, e.g., walls and
boxes, are now customizable.
+ Minor changes.
Version 1.182
+ The "Chinese Checkers" skin by Gerry Wiseman has been replaced by a new version.
+ Minor changes.
Version 1.181
+ The "Chinese Checkers" skin by Gerry Wiseman has been replaced by a new version.
+ Minor changes.
Version 1.180
+ Changed the Sokoban copyright notice. The copyright to the original Sokoban game now belongs to
Falcon Co., Ltd., Japan.
Version 1.179
+ Added new levels by Lee J Haywood, including built-in solutions.
+ Added a new option to 'Settings': "Sound | Sound volume (%)". Previous versions only allowed
changing the sound volume in the music-player windows but for a newcomer it's easier to find this option
in 'Settings'.
- Bugfix (1.177): After using [Ctrl]+V to import levels or solutions in the main window, the buttons
"Previous level" and "Next level" searched for unsolved levels even when the [Ctrl] button wasn't pressed.
(Internally, the program didn't detect that the [Ctrl] button was released after the import, hence its state
was "Down" until the user pressed and released it a second time.)
+ Minor changes.
Version 1.178
+ Added new levels to the YASGen collection, including built-in solutions.
+ Added a new option to 'Settings': "Control | Miscellaneous | Export level collection to clipboard: Include
level comments".
+ Minor changes.
Version 1.177
+ Gerry Wiseman's skins "ChineseCheckers", "Magneto", and "Metalica2" have been replaced by new
enhanced versions.
+ New feature: The buttons "Previous level" and "Next level" in the main window have got an extra
function. If [Ctrl] is pressed, they search through the level-files for the previous/next unsolved level.
+ Minor changes.
Version 1.176
+ The term "Animation" in the settings and in the skin scripts has been changed to "Highlight animation" in
order to avoid confusion with move-animation, e.g., playback of solutions. Saved settings and skin scripts
in their respective default folders are updated automatically and users only need to edit their files
manually if they have settings and/or skin scripts located elsewhere.
+ The smooth object shadows in some of the skins have never been depicted properly because they were
below the default threshold for substracting the background image. Now the threshold has been lowered
for selected skins in order to enhance the graphical quality of the static image. An unwanted side-effect is
that it makes the object look slightly worse when it's animated but the difference is hardly noticable.
+ Minor changes.
Version 1.175
+ All of Gerry Wiseman's skins have been "massaged" so the darkest color is 6% above pure black. This
doesn't affect the visual appearance of the raw skin but it improves on the separation of players and
boxes from the image background. (The connection may not be obvious but because of the all the options
built into the program, e.g., scaling and smooth move-animation, there is one.)
Version 1.174
+ Gerry Wiseman's skin "HeavyMetal3" has been replaced by a new enhanced high-definition version.
Version 1.173
+ The "Metalica2" skin by Gerry Wiseman has been replaced by a new version.
+ The YSokoban skin format has been promoted to a standard skin format for Sokoban and renamed to
"Common Skin Format".
+ Anonymous levels in a collection are now named "Level 1", "Level 2", etc. instead of "Level", "Level (2)"
etc. Other duplicate names still use the parenthesis.
+ Minor changes.
Version 1.172
+ Added new levels by Lee J Haywood, including built-in solutions.
Version 1.171
+ Minor changes.
Version 1.170
+ Gerry Wiseman's skin "NightShift2" has been replaced by a new enhanced high-definition version.
+ The music player's 'Open' window now has a "Stop" button as a supplement to the "Play/Pause" button.
Previous versions only had a "Stop" button in the 'Music player' window.
- Bugfix (1.0) or maybe a Windows XP compatibility issue: If "Play audio CD" was selected as music
source for the music player, then it was not always possible to enter the music player's 'Open' window
without inserting a disk. Windows' own messagebox "Insert disk" was shown repeatedly until a disk was
inserted in case there earlier had been a CD in the drive.
+ Minor changes.
Version 1.169
+ The skin "ChineseCheckers" by Gerry Wiseman has been slightly modified in order to improve the wall
intersections.
- The program now uses custom-made mouse-cursors for "drag" and "hand" instead of the mouse-
cursors supplied by the Delphi programming tool. This is a work-around to avoid a subtle problem with
these built-in mouse-cursors. They have different hotspot-points than the default-cursor and when the
cursor changes, this can cause flicker because it seems like either Windows or the Delphi programming
tool have a logical flaw. The new cursor appears on the screen using the old cursor's hotspot-point before
it is moved to the correct position, taking the new hotspot-point into account. This behavior is sometimes
noticable on a busy or a slow machine and can look a little disturbing. As a work-around, the program now
uses custom-made mouse-cursors with the same hotspot-points as the default mouse-cursor.
Version 1.168
- Bugfix (1.167): Levels with all boxes on goals in the starting position should be treated as unsolved but
by mistake the program insisted that the first move should push a box. If the first move merely moved the
player, the level was considered as solved.
Version 1.167
+ New feature: 'Settings' has the new option "Control | Solutions | Solutions require at least one push"
with default value "yes". This makes it possible to have levels with all the boxes on goals in the starting
position.
+ Some of the built-in skins have got new a new "logo" and the unused cells have been "beautified".
Thanks to Fred Minklei for this.
+ Some of the built-in skins have got more accurate settings for "razoring" the shadow of the outer walls.
Version 1.166
+ Gerry Wiseman's skin "Jumanji3" has been replaced by a new version.
Version 1.165
- Bugfix: After maximizing the 'Open' window, restoring to the original size didn't work in case the original
window had the default height. In that case, the window retained the maximized size and only moved to
the original position.
- Bugfix: With default window size, 2 buttons in the 'Edit' window were not fully visible anymore if the
user had chosen "large fonts" in the Windows settings.
+ Minor changes.
Version 1.164
+ Gerry Wiseman's skin "AntiqueDesk" has been replaced by a new enhanced high-definition version.
Version 1.163
+ 2 or 3 more of Gerry Wiseman's skins have been replaced by new enhanced high-definition versions.
+ Minor changes.
Version 1.162
- It turned out that the proper chess term was "variations" after all, not "variants" as version 1.161
claimed. "Variant" means a variant of the game and "variation" is a branch in a game. Thanks to Daniel
Cielak for correcting this mistake. ("Variations" were later renamed to "snapshots" in version 1.236.)
Version 1.161
+ In earlier versions, part-solutions were named "variations" but the proper term from chess is "variants".
Now the program has been updated accordingly. ("Variations" were later renamed to "snapshots" in
version 1.236.)
Version 1.160
+ Added new levels by David W. Skinner.
+ Minor changes.
Version 1.159
+ Some of Gerry Wiseman's skins have been replaced by new enhanced high-definition versions.
+ Minor changes.
Version 1.158
+ Added a new "Jumanji3" skin; replaced "ChineseCheckers" by a 50x50 version; replaced
"HeavyMetal3" by an enhanced version; all skins by Gerry Wiseman.
+ Minor changes.
Version 1.157
- Bugfix (1.156): Skins with player images for each direction had stopped working because some of the
options in the 'Settings' window had been renamed and the skin import scripts didn't take that into
account. If you have any old settings files you need to edit them manually. Use a text editor to replace the
word "matching" with "appropriate".
Version 1.156
+ The 'Settings' menu had a "Load default skin" button that used red boxes. Now the default skin comes
in two flavours, one with red boxes and another with yellow boxes.
- Bugfix (1.129): One of the features of the skin script language is a "RealTile" sentence for depicting the
situation if the tiles in an image have a border (e.g., "RealTile=1,1,-1,-1") but it didn't work as it should.
+ Minor changes.
Version 1.155
- Bugfix (1.141): The guard against having levels with identical names in a collection wasn't 100% fool-
proof anymore, even though it required a contrived naming scheme to outwit it. Now the levels (and
snapshots) again always get unique names.
+ Minor changes.
Version 1.154
- Bugfix (1.129): Boxes on goals weren't shown correctly in the rare situation that the user imported a
box-on-goal image for the skin with a different size than the goal-image and the mask-color was non-
black. The box-on-goal image wasn't masked in that case.
Version 1.153
+ Replaced the "Jumanji" skin by a new improved version, thanks to Gerry Wiseman.
Version 1.152
+ Minor changes.
Version 1.151
+ Replaced the skins "Metalica3" and "Jumanji" with new improved versions, thanks to Gerry Wiseman.
+ Skin format enhancement: Added a 2-row variant of the YSokoban skin format, i.e., a variant without
animation images. This makes it easy to edit and arrange "simple" skins so Sokoban YASC can import
them. The first 3 columns are identical to the YSokoban format and the top cell in the 4. column must
contain the wall image, or if it's a seamless wall, the 3x2 wall must begin in the 4. column.
+ Skin format enhancement: Added a simple 1-row format with 4..7 tiles arranged in this order: player,
player on goal (7-tile skins only), box, box on goal (not 4-tile skins), goal, wall, and floor (6- and 7-tile
skins only). For conveniency, there is no separate script for this format. Instead, it has been implemented
as an extension of the YSokoban format.
- Bugfix (1.129): On rare occasions, the thumbnail preview of the levels in the 'Open' window didn't show
the level properly. The problem occured if the skin had seamless walls with transparent right-side
columns.
+ Minor changes.
Version 1.150
- Bugfix (1.148): The statusbar panels like "Moves" and "Pushes" cannot be black if the subtexts are
opaque because the subtexts dissappears (black is used for masking the image). Now the 'Settings'
window avoids the situation by changing the color to "almost black" if the user selects black as panel
color.
Version 1.149
- Version 1.141 fixed a problem with loading large level collections with anonymous level titles but as an
unwanted side-effect, simple duplicate names weren't consecutively numbered anymore. This has been
fixed now.
- Bugfix (1.129): Skins with transparent (but visible) floor tiles were not shown properly, i.e., the option
"Mask image using background color" didn't work as it should for the floor tile.
+ Minor changes.
Version 1.148
- The subtexts in statusbar panels like "Moves" and "Pushes" were not clipped by the rounded
rectangles. This had no consequences with default settings where subtexts are transparent but opaque
subtexts could leak to the surrounding area.
- Bugfix: Using the mouse to drag-and-drop a box typically moves the box several squares on the board,
and these so-called "combined moves" are treated as singular entities by "Undo" and "Redo". The user
can stop "Redo" at any time during replay (this is sometimes convenient in case of a very long combined
move) but the remaining moves in the combined move were "atomized", that is, they appeared as
individual moves instead of a combined move. This problem only occured using "Redo", i.e., replaying the
next move from history, not when "Replay" was used for replaying the entire game.
+ Minor changes.
Version 1.147
- Bugfix (1.136): 'Settings' has the option "Control | Solutions | Save old best solutions after clipboard
import" but solutions were often saved, even if this feature was disabled.
+ Minor changes.
Version 1.146
- Bugfix (1.145): The script for importing YSokoban skins limited the player-on-goal animation to 4
images even if the skin had more images. The other animations, i.e., player, box, and box-on-goal were
ok.
+ Minor changes.
Version 1.145
+ Skin format enhancement: The game engine already had the machinery to handle player animations
and box animations with a variable number of frames, but the 4-column YSokoban skin format limited the
usability of this feature. Now YSokoban skins can have extra columns, in effect allowing a variable
number of animation frames.
+ Minor skin modifications, thanks to Gerry Wiseman.
+ Minor changes.
Version 1.144
+ Added 14 skins by Gerry Wiseman.
+ Added a new 6-row variant of the YSokoban skin format with directional player images but without
animations.
+ Added a new 12-row variant of the YSokoban skin format with directional player images.
- Windows XP compatibility: On machines with Windows XP, the help screen didn't appear after
installing the program.
- Bugfix (1.129): Importing skins in YSokoban format didn't show the walls correctly if the skin tiles had
an odd size.
+ Minor changes.
Version 1.143
- Bugfix (1.129): When settings are saved to a diskfile, the program automatically suggests a valid new
filename. This name can be changed manually, but the program didn't block the name "YASC", even
though it's reserved for internal use.
Version 1.142
- Bugfix (1.00): The 'Open' window failed loading the current level the first time the window was activated
after changing the image wiever (one of the music player 'activities') source folder to a folder on a
different drive than the one where the application is installed.
Version 1.141
- Bugfix (1.30): Sokoban YASC can load large level collections, and the only limit is the available
memory. There was, however, a problem with large collections without level titles, or with titles after the
board as part of the level notes. In these cases, the load time could be so long that it in practice was
necessary to abort the program.
Version 1.140
+ Minor changes.
Version 1.139
+ New feature: the main menu in the 'Open' window now has a "Reorganize file" option. Use it to refresh
the contents of a level file, for instance to remove the now obsolete parenthesis from solutions created
with versions older than 1.138.
- Bugfix (1.64): Modifying level notes in the 'Open' window could on rare occasions save the level in
"pretty-printed" format (70 moves per line) even if this feature had been disabled in 'Settings'.
+ Minor changes.
Version 1.138
+ Feature revision: Previous versions kept the combined move ordering exactly as the user entered the
moves. For instance, using the mouse to drag and drop a box made one combined move. Now this
ordering only exists during the current session, and the information isn't saved in the file anymore (the
parenthesis in the file have gone). Instead, an optimal combined move ordering is calculated each time a
level is loaded. A pleasant side-effect is that imported foreign solutions (typically without combined moves
information) now also appear with optimized combined moves.
+ The file reader now also accepts "-" (hyphen) as a floor square. Previous versions only accepted "_"
(underscore) as an alternative to the space character, but the Yahoo Sokoban User Group has started to
use "-".
+ The file format description has been revised in order to clarify some issues. The version number is now
0.02.
+ Minor changes.
Version 1.137
+ Minor changes.
Version 1.136
+ Added a new option to 'Settings': "Control | Solutions | Save old best solutions after clipboard import".
- Bugfix (~1.72): Importing new solutions from the clipboard didn't always save dethroned best solutions
as normal snapshots.
+ Minor changes.
Version 1.135
+ Added a red built-in button to the 'Buttons' section in the 'Settings' main menu.
- Bugfix (1.134): In the 'Open' window, focus changed to another level after importing a solution from the
clipboard. The import itself was ok.
+ Minor changes.
Version 1.134
+ Feature enhancement (1.129): Loading skins is now at least 50% faster.
+ New skin support feature: Skins with seamless walls, that is, skins with separate images for each type
of junction, often reserve a part of the cell for a shadow. This looks good for inner walls, but outer walls
often looks better without the shadow. Therefore, 'Settings' now include a "razor": "Graphics | Board |
Figures | Wall | Outer wall razor".
+ New skin support feature: Skins with seamless walls, that is, skins with separate images for each type
of junction, often comes with a so-called "wall-top" to fill floor-squares surrounded by 4 walls. With default
settings, wall-tops are painted midways between two squares, but 'Settings' now offers the choice of
entering the offset manually: "Graphics | Board | Figures | Wall | Walltop offset, pixels".
+ Windows XP compatibility: A large number of the user interface components, e.g., buttons, menus, and
lists, now use XP graphics instead of Windows 98 graphics.
- Windows XP compatibility (1.121): On XP/2000, the "copy level to clipboard" feature (Ctrl+C) only
worked when it was activated from the 'Open' window, not from the main window. The program used
Windows' 'MessageBox' function to inform the user, that the copy had taken place, and somehow, this text
replaced the level in the clipboard, but only when the copy was activated from the main window, and only
on XP/2000, not Window 98.
- Windows XP compatibility: Resizing the main window was uncomfortable because every single mouse
movement resized the window to that particular size, in effect triggering a cascade of resizing operations.
- Bugfix (1.129): 'Save settings' moved auto-generated images into the saved skin instead of copying
them, meaning that after successive calls to 'Save settings', only the last one had a working version of the
images.
+ Minor changes.
Version 1.133
- Bugfix (1.129): The "Browse" feature always used a single image for the player, even if the currently
loaded skin had separate images for the 4 directions.
Version 1.132
+ Minor changes.
Version 1.131
- Bugfix (1.129): Opening saved settings-files had stopped working in the wast majority of cases where
the file contained references to built-in medias like pictures and sounds. (The new unified module for
importing settings and skins required that filenames should refer to real files, not special "files" named
"[Standard]".)
- Bugfix (1.129): If opening a previously saved settings-file failed, the 'Settings' window could contain
garbage, and if the user later returned to the main window by selecting "Ok" instead of "Cancel", these
garbage values were unintentionally committed. This is the same problem that partially was repaired in
version 1.130 for the skins.
Version 1.130
+ Version 1.129 restored maximized windows to their normal size before entering 'Settings'. This was
meant to cure some problems where 'Settings' couldn't differentiate current window size and normal size.
Now windows are maximized again on exit from 'Settings'.
- Bugfix (1.129): Skin import is activated from the 'Settings' window, and even if an import failed, it could
still have updated some of the settings before it failed. Users could continue working in the 'Settings'
window, and if they later returned to the main window by selecting "Ok" instead of "Cancel", these
garbage values were unintentionally committed.
+ Minor changes.
Version 1.129
+ New feature: Skins. Sokoban YASC has always been highly configurable, changing components one at
a time, and now it can also import "skins", in effect, changing the complete appearance of the game in a
single operation. The import is very flexible and is not limited to a fixed skin-format. Instead, the import is
controlled by scripts, one script for each format. That way, it's possible to add scripts when new skin-
formats are introduced. Sokoban YASC comes with 5 built-in scripts for importing skins from "Sokoban+
+", "Sokoban BDE", "Sokoban YASC Settings", "Visual Sokoban", and "YSokoban". (A few Sokoban++
skins are not supported and neither are Visual Sokoban skins using ".gif" images).
+ New feature: Skin support feature: Seamless walls. Prior versions only had a single picture for all wall-
cells. Now there is support for seamless walls where each type of junction has its own image.
+ New feature: Skin support feature: Prior versions only had a single picture for the player. Now each
direction can have its own picture.
+ New feature: Skin support feature: YSokoban-skins include animations for highlightning the player or a
box, e.g., when the program shows the legal moves for a selected box. These animations are also
supported by Sokoban YASC.
+ For concistency with the new skin feature, the saved settings files (.set files) have been transferred to
the new sub-folder "Skins\YASC Settings". Using Sokoban YASC, you won't notice any difference, it's
only if you look for the files using another program, say, a file-manager, that you won't find your old files
where they used to be.
+ New feature: 'Settings' main menu now includes a 'Buttons' section with 3 built-in button-sets: Blue,
green, and orange.
+ Added new levels by Aymeric du Peloux, including built-in solutions.
+ Added new levels by David W. Skinner.
+ Added new levels by Lee J Haywood, including built-in solutions.
+ Added an application-specific icon to the setup-program instead of the default icon supplied by the
development tool. Thanks to Fred Minklei for designing and creating the icon, and thanks to "Games 4
Brains" (website: http://www.games4brains.de) for permission to use their excellent graphics in Sokoban
YASC.
+ The 'Open' window sometimes had a problem when it loaded large levels with more than, say, 200
boxes. The reason seemed to be resource constraints somewhere in the development tool or the
operating system. Therefore, the game viewer has been modified so it doesn't use so many individual
images, hence, the problem is less likely to occur. A nice side-effect is that browsing through several large
levels is much faster now.
- Bugfix (1.124): Clicking an empty square shows the boxes that can go there, but all moves leading to a
deadlock were filtered out even if the option "Block moves leading to low and medium type deadlocks"
was turned off.
- Bugfix (1.124): The screen wasn't updated properly when a snapshot was loaded from the 'Snapshots'
window right after clicking an empty square to see which boxes could go there. The cursor at the
destination square was left on the screen until next time a box was moved.
- Bugfix (1.72?): Importing a built-in solution always degraded a dethroned best-move solution to a
normal snapshot even if it still was a best-push solution. This snapshot was promoted to the best-push
solution next time the level was loaded, so no data was lost.
+ Minor changes.
Version 1.128
- Bugfix (1.30): The built-in editor can rotate and mirror the board, but in case one of the drawingtools
was activated, say, a wall, then rotating/mirroring triggered a drawing operation as well, in effect placing a
wall on the current square.
Version 1.127
- Bugfix (1.00): Level titles with periods have never been shown properly in the main window title line. A
period truncated the title. This has first been rectified now, even though it was known from the start. A nice
side-effect is that all David W. Skinner's levels finally could be renamed so they include the "W.".
Version 1.126
- Bugfix (1.124): Move animation, e.g., during replay of a solution, suffered from a small, but noticable
glitch. A box disappeared from the screen for a split second each time it went from a goal square to a non-
goal square and vice versa.
Version 1.125
- The new application icon introduced in version 1.124 had some corners that should be transparent but
appeared as opaque grey areas. This has been rectified, thanks to Fred Minklei.
Version 1.124
+ Added a proper application icon instead of the default icon supplied by the development tool. Thanks to
"Games 4 Brains" (website: http://www.games4brains.de) for permission to use their excellent graphics in
Sokoban YASC, and thanks to Fred Minklei for creating the icon.
+ New feature: Clicking an empty square shows the boxes that can go there.
+ Added an optional shadow to the box cursor, see 'Settings': "Control | Pathfinding | Show legal moves |
Box cursor | Shadow".
+ Minor changes.
Version 1.123
+ Added new option to settings: "Control | Miscellaneous | Confirm running multiple instances of the
application".
+ Added new option to settings: "Control | Miscellaneous | On changing Windows' display driver". The
options are "Shutdown" and "Continue on own risk".
+ Minor changes.
Version 1.122
+ When a level is loaded, it always takes some time before deadlock detection kicks in, meaning that the
first moves may go un-supervised. The time taken for the pre-calculations has been significantly reduced
for large levels by a better algorithm for calculating reachable goals from each square, a calculation
required for the general "b boxes, g goals, b > g" detection introduced in version 1.121. The savings can
be up to 90% for large levels with more than 200 boxes.
+ Also, the deadlock search itself has increased the speed by as much as 80% for large levels due to an
optimization of the algorithm, thanks to Matthias Meger.
- Bugfix (1.121): The new general "b boxes, g goals, b > g" deadlock detection could on rare occasions
block some legal moves by mistake.
+ Minor changes.
Version 1.121
+ New feature: The currently selected level can be copied to the clipboard, both from the 'Main' window
using Ctrl+C, and from the 'Open' window using the menu. (The opposite function, importing levels from
the clipboard, has been available since version 1.00.)
+ New feature: Using the 'Open' window, the currently opened level collection can be copied to the
clipboard. Only basic puzzle information, i.e., board, title, and author is copied, not solutions and
snapshots. This simple format makes it easier to export levels to programs without support for the full
Sokoban file format.
+ Improved the deadlock detection by adding a general "b boxes, g goals, b > g" check. Prior versions
only handled special-case situations with boxes on a closed line, and although this is the largest and most
important sub-class, a general mechanism is preferable.
- Bugfix (1.101): For some level types, the calculation of deadlock sets at level load time can be a time-
consuming task, and sometimes it didn't stop as it should, when the user loaded another level. Often, this
resulted in advanced deadlock detection being unavailable for the rest of the session.
- Bugfix (1.87): Using the 'Open' window to import a single level from the clipboard (as opposed to
importing multiple levels, and as opposed to importing a single level using the 'Main' window) didn't save
the level to disk automatically, hence, it was lost unless the user later saved it manually from the 'Main'
window.
- Bugfix (1.30): Importing solutions to the currently selected game from the clipboard had the side-effect
that snapshots (part-solutions), if any, in the 'Snapshots' window were deleted.
- Bugfix (1.00): The 'Open' window offers the choice to copy/move/rename/delete files. Selecting 'Delete'
and then clicking the 'Help button' in the now opened dialog window worked all right, but on return from
the online help, a message concerning a screen-drawing error was issued. The drawing error had no
consequences for the program and the message was purely informational.
+ Minor changes.
Version 1.120
+ Added "Control | Pathfinding | Show legal moves | Box cursor | Pen width (pixels)" to settings.
+ Minor changes.
Version 1.119
+ Minor changes.
Version 1.118
+ Added new levels by Lee J Haywood, including built-in solutions.
+ New feature: Clicking a wall shows movable boxes in the current position.
+ Added release notes to the online help.
+ Improved the deadlock detection significantly by introducing a better method for selecting which boxes
to investigate, a co-work with Matthias Meger.
+ Feature enhancement: Deadlock detection and blocking deadlock moves have been separated. With
detection enabled and blocking disabled, the program issues a warning and shows the offending boxes
when it detects a deadlock situation.
+ Redesigned the deadlock detection settings and gave them their own section: "Control | Deadlock
detection".
+ Simplified the keyboard short-cuts for rotating/mirroring the board so [Ctrl]+1 .. [Ctrl]+8 select a new
transformation directly. The old short-cuts rotated/mirrored the board relative to the existing
transformation.
- Bugfix (1.116): Mirroring the board horizontally or vertically corrupted the board preview in the
'Snapshots' window. The board itself was ok, it was only the screen that wasn't updated properly.
+ Renamed Aymeric du Peloux's level-collection from "Peloux.sok" to "du Peloux.sok". Prior versions are
updated automatically when a new version of the program is installed on top of an old one.
+ Minor changes.
Version 1.117
+ Extended deadlock detection has always worked as an extension to the simple detection. The
"Settings" screen, however, did not make this clear and it allowed independent settings for them.
Changing one of them now automatically updates the other one, so it's clear that they work as a "tower" of
protection mechanisms. (Obsolete after redesigning deadlock settings in version 1.118.)
Version 1.116
+ Added a new level collection with 160 levels by Aymeric du Peloux, including built-in solutions.
+ Added new levels by David W. Skinner.
+ New feature: The board can be rotated and mirrored during the game.
+ Improved the dynamic deadlock detection by searching not only until one box escapes the fenced-in
area, but until all boxes escape (or reach goal positions, of course).
+ Some YASGen levels have been 'beautified', i.e., some unimportant outer walls have been removed.
+ Minor changes.
Version 1.115
+/- Minor changes and bugfixes related to the deadlock detection.
Version 1.114
+ Minor changes.
Version 1.113
+ Added new levels by Lee J Haywood, including built-in solutions.
+ Minor changes.
Version 1.112
+ Improved the deadlock detection by performing a search after each move, testing if some boxes now
form impenetrable "walls". If they do, the program issues a warning and highlights the boxes.
+ Minor changes.
Version 1.111
+ Limited the search for deadlock situations in order to finish this calculation earlier.
+ Minor changes.
Version 1.110
+ Lowered the runtime priority for the thread calculating deadlocks in the background.
+ Added a very discreet button for manually stopping the deadlock-set calculation. This comes in handy
for levels where the calculation takes too long time.
+ Minor changes.
Version 1.109
+ Minor changes and bugfixes related to deadlock detection.
Version 1.108
+ Added new "YASGen" levels, including built-in solutions.
- Bugfix (1.105): The simple deadlock detection could on rare occasions block some legal moves by
mistake.
+ Minor changes.
Version 1.107
- Bugfix (1.105): The deadlock detection still blocked some legal moves by mistake.
Version 1.106
- Bugfix (1.105): The deadlock detection blocked some legal moves by mistake.
Version 1.105
+ Improved the check for simple illegal moves.
+ Minor changes.
Version 1.104
+ Added a new deadlock pattern ("3-block") to the deadlock detection mechanism.
+ Minor changes.
Version 1.103
+ Added new levels by Lee J Haywood, including built-in solutions.
Version 1.102
+ Added new "YASGen" level, including built-in solution.
- Bugfix (1.101): If opening a new level in the 'Open' window was cancelled, then the level in the main
window wasn't subject to extended deadlock detection until another level was loaded.
+ Minor changes.
Version 1.101
+ New feature: Extended deadlock detection. The program has always been able to block simple illegal
moves, but now it can also block moves leading to more complex deadlock positions. This new feature
can be turned on/off in settings: "Control | Do/Undo moves | Extended deadlock detection | Enabled".
(Obsolete, deadlock settings were redesigned in version 1.118.)
+ Minor changes.
Version 1.100
+ The panels "Moves" and "Pushes" in the statusbar had "transparent" captions where the text only was
readable as a result of the contrast between the panel-color and the background. Now there is a choice
between "transparent" captions and coloured captions.
Version 1.99
+ Added optional display of the level dimensions in the main window title line.
+ Added selectable level dimensions text-format to settings:
[columns x rows] or [rows x colums].
+ Lowered the default transparency for the panels on the statusbar in order to increase the contrast
between panels and sub-texts.
+ Minor changes.
Version 1.98
+ Added "Graphics | Status | Panels | Subtext font size" to settings, i.e., the subtext font size can now be
adjusted in case the rather small default size is hard to read.
+ Added displaying the board-dimensions to the 'Open' window.
+ Minor changes.
Version 1.97
+ Added extra scoring metrics: Box-lines, box-changes, and player-steps. They pop up when the mouse-
cursor is over "Moves" or "Pushes" on the statusbar.
+ Minor changes.
Version 1.96
- Bugfix (1.00): The box pathfinding algorithm failed in case the board had maximum width or height (50
squares).
Version 1.95
+ Added new "YASGen" levels, including built-in solutions.
- Bugfix (~1.60): When multiple levels were imported from the clipboard, the file-format description was
always added to the output file, even when this feature was disabled in settings.
Version 1.94
+ Added new levels by Lee J Haywood, including built-in solutions.
Version 1.93
- Bugfix (1.89): The pathfinding algorithm still failed finding optimal paths when it should optimize for
moves instead of pushes.
Version 1.92
- Bugfix (~1.72): Using the 'Open' window to import built-in solutions didn't update the column on the
screen listing the solved-status of the levels in the current collection. The screen update first took place
when another level was selected; the import itself worked ok.
Version 1.91
- Bugfix (1.64): If the current level was a new one (either imported from the clipboard or created in the
editor) then the program entered an infinite loop if the clipboard-import was activated.
Version 1.90
- Bugfix (1.87): Using the 'Import from clipboard' feature in the 'Open' window to import new solutions to
a level replaced old solutions, if any, even if the old solutions were better. (This only happened using the
import feature in the 'Open' window, not the identical feature in the 'Main' window).
Version 1.89
- Bugfix (1.88): The pathfinding algorithm still failed finding optimal paths when it should optimize for
moves instead of pushes.
Version 1.88
- Bugfix (1.87): The pathfinding algorithm still failed finding optimal paths when it should optimize for
moves instead of pushes.
Version 1.87
+ Added new levels by Lee J Haywood, including built-in solutions.
+ The 'Open' window now also has the 'Import from clipboard' function.
- Bugfix (1.20): The pathfinding algorithm finds optimal paths either optimized for moves or for pushes,
but sometimes is failed finding the shortest path when it should optimize for moves.
+ The "mouse-over" hint for the solution button now includes the length of the best found solution(s).
+ Minor changes.
Version 1.86
+ Feature enhancement: When the window height drops below the threshold for showing all the buttons,
a new button, "Menu", appears which gives access to all functions for which there currently are no visible
buttons.
+ Better button glyph for the button "Import from clipboard", thanks to Fred Minklei.
- Bugfix: If menu button transparency was disabled, i.e., when buttons were opaque, the edgesmoothing
feature was disabled as well.
+ Minor changes.
Version 1.85
- Bugfix (1.84): The program destroyed (!) levels when they were saved to a disk-file. (This version was
so shortlived that hopefully nobody ever downloaded it.) In version 1.84, the program was supposed to
trim trailing spaces in each board description line, but instead it removed leading spaces as well, in effect
destroying the levels.
- Bugfix (1.64): Normally, the status bar is shown below the menu buttons, but when the window height
is reduced below the threshold for doing so, the status bar is shown next to the "Exit" button, and in this
situation the buttons "Browse" and "Replay" didn't show up, even when the space permitted it.
+ New feature: Originally, the window height couldn't shrink below the height required to show all menu
buttons. Now the lesser important buttons disappear when the window height drops below the threshold,
thus, it's possible to work with rather small windows.
Version 1.84
- Levels with titles that could be interpreted as moves e.g., "Dull", were rejected by the file-reader. Now
they more often are accepted, although the dillemma cannot be resolved in all circumstances.
+ The file-writer used to fill board-lines with trailing spaces so all lines had the same width. These trailing
spaces are now omitted.
+ Minor changes.
Version 1.83
+ Added new levels by Lee J Haywood, including built-in solutions.
Version 1.82
+ Minor changes.
Version 1.81
- Bugfix (1.64): Importing moves from the clipboard can either be a new snapshot or a continuation of
current game. In the latter case, if the result was a new best solution, then this solution wasn't saved
although a screen message said so.
+ Minor enhancement: When moves are imported from the clipboard, the import isn't case-sensitive
anymore, i.e., "lrud" can substitute "LRUD".
+ Minor changes.
Version 1.80
- Bugfix (1.74): The 'Open' window had stopped updating the thumb-nail preview of the levels when the
'Snapshots' window had been activated from the main window.
Version 1.79
- Bugfix (1.30): If clipboard import of solutions to current level was activated for more than one level
during a session, it could under special circumstances cause the 'Open' window to stop working properly.
Version 1.78
+ Minor changes.
Version 1.77
- Bugfix (1.73): "Open copy of a level" had stopped working.
Version 1.76
- Bugfix (1.73): Using the 'Open' window's filemanager function "Delete Level" didn't have any effect for
level collection members.
+ Minor changes.
Version 1.75
- Bugfix (1.73): The 'Open' window offers some basic file-manager functions like "Copy", Rename", etc.,
but "Rename" didn't work properly if a level also had a title specified in the notes.
+ Minor changes.
Version 1.74
+ New feature: In settings, you can choose to use a sine filter for scaling background images to fill the
game window. This is slower than the old bilinear filtering, but the image quality is much better.
- Bugfix (1.64): The browse-mode was far too slow when the board had its own background activated.
By mistake, the program rebuilt the background image for each browsing step, a very time-consuming
task involving image scaling and filtering.
+ Minor changes.
Version 1.73
+ Added a directory-history and a file-history to the 'Open' window. The program has always loaded the
most recently used level when the program starts, but a pleasant side-effect of the new file-history is, that
this feature now also applies when a previously loaded level-collection is re-opened.
+ File-manager functions (copy, move, delete, etc.) in the 'Open' window now uses the standard "Save
File" dialogue instead of simple text input.
+ When solutions are written to a file, the headline now contains the number of moves and pushes, e.g.,
"Solution/Moves 354/117".
+ When a level is solved, the notification message now shows the number of moves and pushes for the
best found solution(s).
+ Added new levels by Lee J Haywood, including built-in solutions.
- Bugfix (1.72): Built-in levels lost their timings, if any, when a newer version of the program was installed
on top of an old one.
- Bugfix (1.30): Sokoban files either declare level-titles in a headline before the board or in a key-value
pair in the level-notes, but illegal characters, e.g., ":" and "\", were only filtered out when the first method
was used. As a side-effect, importing a single affected level from the clipboard required the user to save it
manually, i.e., the level wasn't saved automatically.
+ Minor changes.
Version 1.72
+ New optional feature: Timing each level.
- Bugfix (1.45): Importing a built-in solution which made both a solution/moves and a solution/pushes
obsolete didn't refresh the screen properly. The solution/pushes didn't disappear from the 'Open' window
until next time the level was loaded.
+ Minor changes.
Version 1.71
+ Windows XP compatibility: On Win98, move-animation can emit a sound for each step. On XP/2000,
the system has much higher latencies before playing a sound, in effect destroying the move-animation.
Hence, animated moves now only emit a single sound for the last step.
+ Minor changes.
Version 1.70
+ Added new levels by Lee J Haywood, including built-in solutions.
- Bugfix (1.00): The 'Options' window stopped showing images after trying to select a non-sound file as a
sound-effect or music-file.
+ Minor changes.
Version 1.69
- Bugfix (1.68): Touching the 'Replay Speed' slider with the mouse caused havoc to all sounds
accompanying box-pushes and player-moves.
+ Minor changes.
Version 1.68
- Bugfix (1.64): The new button 'Open Copy of Level' caused flicker when the 'Open' window was
activated.
+ Minor changes.
Version 1.67
- Windows XP compatibility: The music player did not always detect end-of-file correctly on machines
using Windows XP, hence, the player stopped after playing one file.
+ Minor changes.
Version 1.66
+ Better user interface to the replay feature.
- Bugfix (1.30): Sorting snapshots on number of pushes actually sorted on moves instead.
+ Minor changes.
Version 1.65
- Bugfix (1.64): 5-6 minor bugs related to the new features have been fixed.
+ Added new "YASGen" level, including built-in solution.
+ Minor changes.
Version 1.64
+ New feature: Click-less browse mode, i.e., it's possible to browse through the moves of the game by
pointing at hot-spots on the screen without mouse-clicks.
+ New feature: Click-less replay mode, i.e., it's possible to enter and leave replay mode by pointing at hot-
spots on the screen without mouse-clicks.
+ New feature: The 'Open Level' window offers the choice to open a copy of a level instead of the original.
This is convenient in case the original file must not be modified.
+ New feature: The clipboard import now also supports continuations of current game, i.e., moves to be
concatenated to current position.
+ New feature: Separate keyboard short-cuts for showing best solution/moves and best solution/pushes,
in case the user has one of both.
+ New feature: Saved games have always been "pretty-printed" with a fixed number of moves per line
(70). This is now optional so it's possible to have all moves written in a single unbroken line.
+ Minor changes.
Version 1.63
+ Improved the replay mode so a game can be animated backwards as well as forwards. Double-clicking
a non-legal square enters replay mode.
+ Increased game history from 20000 moves to 65000 moves. (Changed again in version 1.302 to
100000 moves.)
+ Minor changes.
Version 1.62
+ Added built-in solutions to more of Grigoriev's levels.
Version 1.61
+ The 'Open' window didn't distinguish between files without any Sokoban levels and files which couldn't
be loaded because of syntax errors. Now it shows a more informative message in the latter case instead
of simply saying that the file doesn't contain any levels.
Version 1.60
+ Added new levels by Lee J Haywood, including built-in solutions.
+ Added built-in solutions to more of Grigoriev's levels.
+ Added new "YASGen" level, including built-in solution.
Version 1.59
+ Added built-in solutions to many of Grigoriev's levels.
+ Replaced the YASGen level "Crius" by a longer version.
Version 1.58
+ New feature: When the program is installed on top of an old version it merges new levels and built-in
solutions, if any, into the existing level-collections. Previous versions didn't touch the installed collections
at all, so they at least didn't remove the user's solutions to any of the built-in levels.
+ Added new levels by Lee J Haywood, including built-in solutions.
+ Added new "YASGen" levels, including built-in solutions.
+ Added a more thorough description of the file-format. Additionally, the file-writer automatically updates
existing level-files with the newest description.
+ New feature: The level-editor can flip levels horizontally and vertically.
- Bugfix: The space character worked as a short-cut for closing the 'Open' window, even when the user
was editing level notes, hence, it was impossible to do any editing.
- Bugfix (1.30): If the program faced a disk i/o-error when it saved a level to disk, the error itself was
handled gracefully, but the program terminated with a fatal error next time it opened or saved a level.
- Bugfix (1.30): Files using numbers as level titles were not recognized as proper Sokoban files. (A text-
line with a number was parsed as run-length encoded moves.)
- Bugfix (1.00): The music-player's 'Open' window reported a range error exception if the track list was
empty when the window was activated.
+ Minor changes.
Version 1.57
+ Added new levels by Evgeny Grigoriev.
- Bugfix (1.30): After importing a level from the clipboard there was a problem with clipboard-import of
solutions to the level during the same session. The level wasn't updated if it had a title; the program made
a duplicate of the level and updated that instead.
Version 1.56
+ Added new level by Lee J Haywood, including built-in solution.
- Bugfix (1.30): Browsing through a level's snapshots sometimes showed the topline of the grid (the level
title) twice.
- Bugfix (1.00): Users must answer the control question 'Save it - yes/no?', if they make a new level in
the editor and returns to the main window without explicitly telling what to do with the new level. If the
answer was 'no', the original game didn't reappear in the main window as one would expect.
Version 1.55
+ Added new levels by Lee J Haywood, including built-in solutions.
+ Added new 'Sasquatch VI' levels by David W. Skinner.
- Windows XP compatibility: The music player did not detect end-of-file correctly for midi-files on
machines using Windows XP, hence, the player stopped after playing one midi-file.
- Bugfix (1.00): A level-title with double-quotes caused problems if the title should be used as a filename,
since Windows doesn't allow this character. Now double-quotes are converted to single-quotes.
- Bugfix (1.30): The program rejected non-optimal solutions to current level when they were imported
from the clipboard. Now they appear as normal snapshots.
+ Minor changes.
Version 1.54
+ Added new levels by Lee J Haywood, including built-in solutions.
+ Added new levels by Evgeny Grigoriev.
- Bugfix (1.30): After successive imports of levels from the clipboard without saving the new levels, the
'Open' window lost the name of the last valid filename. Therefore the window started out next time
showing the root-directory instead of last active directory.
Version 1.53
- Bugfix (1.30): After changing the function of a right-click, the hint text for the "Reset" button was not
updated accordingly; it was first updated next time a level was loaded.
Version 1.52
- Bugfix (1.48): "Fireworks" was still listed in "Settings", although this very primitive eye-candy has been
removed.
- Bugfix (1.00): The settings screen could not recognize palette files before the music player eye-candy
"Fractals" had been activated.
Version 1.51
+ Added new levels by Lee J Haywood.
- Bugfix (1.48): "Fireworks" was still listed in the "Activities" menu, although this eye-candy has been
removed.
Version 1.50
- Bugfix (1.30): Blocking simple illegal moves can be disabled fromthe settings screen, but it only worked
for current session, i.e., next time the program was launched, blocking was enabled again.
Version 1.49
+ Added new levels by Evgeny Grigoriev.
+ Illegal moves triggered a sound for keyboard input only. Now the sound also is played for illegal moves
made with the mouse.
- Bugfix (1.00): The program crashed in situations where it had to load large images (e.g., 2000 x 3000
pixels) in jpg-format.
- Bugfix (1.00): On a Windows system with minimum screen resolution, i.e., 640 x 480 pixels, the screen
was not updated properly.
+ Minor changes.
Version 1.48
+ Added new levels by Lee J Haywood.
+ Added built-in solutions to some of Grigoriev's levels.
+ Minor changes.
Version 1.47
+ Added new levels by Lee J Haywood.
+ Added the "bagatelle2" and "cantrip2" collections by David Holland.
Version 1.46
- Bugfix (1.00): The sound effects now also work on machines using Windows 2000 or newer Windows
versions.
Version 1.45
+ New feature: All built-in solutions are "hidden", but may be imported via the 'Open' window. This feature
is not backwards compatible, so if the program is installed on top of an older version, all existing solutions
are credited to the user.
- Bugfix (1.30): Solutions with a non-standard name were lost next time the level was changed. (This
could only happen when a file was edited manually.)
- Bugfix (1.30): The file-format specification mistakingly declared level-titles and snapshot-titles as
optional. In fact, they are required if there is a risk of confusing a title and a single line comment belonging
to a previous level or snapshot.
- Bugfix (1.30): Disable "Move back" handled as "Undo move" had stopped working.
+ Minor changes.
Version 1.44
+ Added a new level collection by Evgeny Grigoriev.
+ Added a new level collection by Lee J Haywood.
- Bugfix (1.30): Importing a single level, as opposed to a complete collection, failed if the level had a title.
(The level was never saved.)
+ Minor changes.
Version 1.43
+ Allowing jumps after first box-move in a reverse mode game is now only an option, default setting is
"not allowed".
Version 1.42
- Bugfix (1.41): Some of the built-in sound effects were wrong. They had been mixed up due to the file-
bug repaired in v. 1.41.
- Bugfix (1.30): When a level was saved as a new file, the new name did not show up in the 'Snapshots'
window.
- Bugfix (1.30): The 'mouse-over-button' sound was not played when the mouse cursor left a button and
returned again without touching another button first.
- Bugfix (1.30): A runtime error occured in this situation: Load a level containing one or more snapshots,
open the editor, modify the level and save it as a new file, save it once more as a new file, but this time
with the original name, and finally, close the editor window.
- Bugfix (1.30): A right-click is an easy shortcut to leave the editor window as long as nothing has been
modified, but the right-click "fell through" and also restarted the level.
Version 1.41
- Bugfix (1.00): External sound-effect wav-files were destroyed next time the user tried to attach another
file to that particular sound event.
- Bugfix (1.39): An old saved game from a previous session should be deleted after opening and closing a
level, even if no moves have been made (in order to clean the level-file so it is not filled with garbage).
This feature had been disabled by mistake.
+ Added solutions to all the "Sasquatch" levels by David W. Skinner.
+ When a level is solved using reverse mode, the resulting normal mode solution is slightly modified with
respect to combined moves, so it looks like the level was solved in normal mode. (Non-box-moves are
attached to the following box-move. Using the exact inverse of the reverse mode game would result in
combined moves with the box-move first.)
Version 1.40
+ Added solutions to all the "dh1" levels by David Holland.
- Bugfix (1.20): "Un-doing" and "re-doing" a combined move corrupted the screen when move-animation
was turned off, and the move included more than one box, and they overlapped. (This can only occur
when a level-file is edited by hand.)
Version 1.39
+ New feature: Concatenate a snapshot with current position to form a complete solution when they
match.
+ New feature: Restore saved position when a level is re-opened (optional).
+ Minor changes.
Version 1.38
+ When showing the player's legal moves in a reverse mode game, the normal moves and the jumps are
highlighted separately.
+ Minor changes.
Version 1.37
+ When showing the legal moves a box can make, the box itself is highlighted as well as the legal
squares.
+ Minor changes.
Version 1.36
+ Added solutions to all the "Maelstrom" levels by David Holland.
+ Minor changes.
Version 1.35
- Bugfix (1.00): On Win95 machines the 'pusher' sometimes left strange pixels behind when it was
moved around. (Fixed by always using even tile sizes.)
Version 1.34
+ Added a few experimental options.
Version 1.33
+ The program now terminates gracefully if the Windows display-driver is changed while the program is
active.
- Bugfix (1.00): On a machine using 16-bit colors instead of 32-bit colors, the music-player image was
not masked properly.
Version 1.32
+ If the mouse has a wheel, the function of a right-click defaults to "Reset level" instead of "Undo move".
- Bugfix (1.00): On rare occasions a move left a trail after the box (A timing problem connected to
"Banker's rounding to even number" versus "Standard rounding to nearest number").
Version 1.31
+ Added cursor settings.
- Bugfix (1.30): Clicking the board image in the 'Snapshots' window sometimes caused flicker.
+ The function of a right-click defaults to "Undo move" instead of "Reset level".
Version 1.30
+ New feature: Reverse mode play, i.e., try to solve a level backwards. Sometimes, this feature comes in
handy when solving difficult levels.
+ New feature: Snapshots, i.e., make a list of promising part-solutions during the solving process.
+ New feature: Clicking on a box or the pusher, the legal moves are highlighted.
+ Limits changed to 50 x 50 squares, 500 boxes, and 20000 moves. (The moves limit changed again in
version 1.63 to 65000 moves, and again in 1.302 to 100000 moves. Version 1.467 changed the box limit
to 1200.)
+ Added the "Cantrip" levels by David Holland.
+ Added the "Mas Microban" levels by David W. Skinner.
+ New file format, with support for games/snapshots/bookmarks in LRUD-format (Left/Right/Up/Down).
+ The game core has been rewritten, so it has a clean separation of the kernel and the user-interface.
+ Background images are now antialiased (optional). (Walls, boxes, goals, etc. have always been
antialiased.)
+ Main menu and statusbar now have shadowed text (optional).
+ New feature: The level editor now has a rotate function.
- Bugfix (1.00): When renaming a file after renaming a level in a collection, the dialog-box stripped all "\"
from the suggested filename.
- Bugfix (1.00): Foreign button-images with a non-black background color were not masked properly.
- Bugfix (1.00): The program crashed during shutdown, if the image-viewer was current activity in the
music-player window, and the settings-dialog was opened, and the program was closed without activating
the music-player window.
+ Minor text changes.
Version 1.26
+ Faster pathfinding algorithm: Better estimate of distance from each square to the goal square.
- Bugfix (1.21): The screen was corrupted when move-animation was turned off, and first move (with one
drag-and-drop) was taken back and substituted with a new move of the same length.
Version 1.25
+ Pathfinding improved when it optimizes for pushes: If there are several paths with the same number of
pushes but with different number of moves, then the shortest one, counting moves, is chosen.
+ Saving best solutions automatically is now optional, default 'on'.
+ Minor text changes.
Version 1.24
- Bugfix (1.21): "Undo-ing" a move corrupted the screen when move-animation was turned off, and
"Undo" was activated after resizing the screen while replaying a game.
- Bugfix (1.20): The pathfinding algorithm could under special circumstances pick a move-optimal route
even if it should optimize for pushes.
+ Minor text changes.
Version 1.23
- Bugfix (1.21): "Undo-ing" a move corrupted the screen when move-animation was turned off, and
"Undo" was activated after a user-break while replaying a game, and the break took place during a
combined move involving a box.
+ Minor text changes.
Version 1.22
- Bugfix (1.21): "Undo-ing" a move corrupted the screen when move-animation was turned off, and a box
was moved from a goal-square to a non-goal-square.
- Bugfix (1.21): The pause before "Show Solution" to show the starting position had disappeared.
+ Saving and loading games now recognize combined move information.
+ Minor text changes.
Version 1.21
+ When move animation is turned off, moves are now really shown instantly.
- Bugfix (1.20): Pathfinding with intersecting paths: on rare occasions, the algorithm failed to find a path.
- Bugfix (1.20): Undo/redo combined moves: on rare occasions, too many moves were considered part
of the combined move.
- Bugfix (1.20): A right-click used as a short-cut to close the music-player "fell through" and restarted the
level or restored the last bookmark as a normal right-click.
+ Minor text changes.
Version 1.20
+ Move animation is now optional, default 'on'.
+ Mouse tracking is now optional, default 'off'
+ Pathfinding allows intersecting paths.
+ Undo/redo works on combined moves (optional, default 'on').
- Bugfix (1.00): Keyboard repetition could trigger multiple 'return to previous bookmark'.
- Bugfix (1.10): only 255 of the promised 300 boxes worked properly.
+ Minor text changes.
Version 1.10
+ Added more than 400 levels by David W. Skinner.
+ Added solutions to all the levels by Yoshio Murase.
+ Increased size limits: 36 x 36 squares, 300 boxes. (Changed again in version 1.30 to 50 x 50 squares,
500 boxes, 20000 moves.) (Changed again in version 1.63 to 65000 moves.) (Changed again in version
1.302 to 100000 moves and 1000 boxes.) (Changed again in version 1.467 to 1200 boxes.)
+ Minor text changes.
Version 1.00
+ First release.