Version 1.78 (work in progress)
- bug fix: the optimizer has run in an endless loop in certain situations. Thanks to findus for reporting this bug.
- bug fix: in specific levels "copy to clipboard with transformation" hasn't worked correctly
- new translation: thanks to Alexey for his Russian translation
- bug fix: the optimizer returned invalid solutions in certain situations. Thanks to Alice for reporting this bug.
- bug fix: JSoko sets back the saved moves history when a level is loaded. There was a bug setting the wrong player start position in the coding. Thanks to Alice for reporting this bug.
- A level title like "500+" has been interpreted as own level. This is fixed now. Thanks to Paul Voyer for reporting this.
- bug fix: the translator tool hasn't created a new language file when "add language file" has been pressed on Windows OS
- translations: thanks to Åke Engelbrektson for his Swedish translation
- translations: thanks to Paul Voyer for his French translation
- translations: thanks to Giorgos Kostopoulos for this Greek translation
- optimizer: the optimizer now supports 4 boxes for generating box configurations to be optimized
- bug fix: in levels containing a goal room the tunnel logic has been using the wrong box. This could result in unnecessary long solutions.
- bug fix: the last moves history hasn't been correctly set when a level has been loaded again in some cases.
- JSoko now uses UTF-8 as standard encoding for reading files.
- When the level editor is active, the "close window" action now closes the editor instead of the whole JSoko application.
- A new skin from Scott Lindhurst can be used. Thanks to Scott Lindhurst for this skin!
- bug fix: entering the editor and leaving the editor again without changing the level results in internal crashes of the program. In this case please switch the level up and down one time so the current level is loaded again.
- database: the collections of the database and the last 5 played collections are displayed in a list in the main GUI for quicker access. The key "c" opens the list of the collections, the key "l" the levels list.
- JSoko is published using install4j installer for Windows. Therefore all user data are saved in the default user directories ("user home").
- Translator: the language texts can be exported to a file to share them.
- The size and position of the optimizer GUI is saved to the settings file and restored from there when the GUI is opened again.
- Levels that aren't loaded from the database (but from hard disk or clipboard) are automatically saved in a new collection "unregistered". Every time a level is loaded JSoko checks whether a similar level (comparing the level elements: walls, boxes, goals, ...) is already stored in the "unregistered" collection. If this is the case, the solutions of the stored level in the database are added to the loaded level and the level is connected with the one in the database. This means adding new solutions or deleting solutions from the loaded level also adds the solutions to / removes the solutions from the level in the database. Nevertheless, it's recommended to import all levels to the database manually (menu: Database->Import collection to database). This way the levels are stored for a collection having a specific name.
- bug fix: in some cases the pushes/moves and the moves/pushes solver couldn't find the optimal solution. Thanks to Alexey for reporting this bug.
- bug fix database: the selection for levels without a collection assignment wasn't correct. This is fixed now. Thanks to Fred Minklei for reporting this bug.
- bug fix: the solver couldn't solve some levels like Thinking Rabbit Original No 10
- JSoko uses the default "Look and Feel" on Mac OS
- The new JSoko icon is used in the program
- It's possible to save a whole collection of levels in one file
- Support of "interior empty rows": a level now can contain empty lines. These "empty lines" must only contain spaces except the first character which must be a "-".
- Improved Chinese translation. Thanks to Anian Wu for this update.
- bug fix: Clicking at "Info -> about JSoko" caused an "out of memory" error. Thanks to
- optimizer: there is a new optimizing method that optimizes for:
3. box lines
4. box changes
5. pushing sessions
Optimizing for 5 metrics takes a lot more time than just optimizing moves and pushes. However, this new method can leverage all cores of a system and use more RAM as the other methods. Hence, on multi cores systems this method can be as fast as the old moves/pushes optimizing method. The results of this methods are the same as of the normal moves/pushes method except that the found solutions are also optimized for box lines, box changes and pushing sessions.
Hint: in order to use the full power of this method it's recommended to start JSoko with a higher RAM setting. The setting is in the files Start_JSoko_Linux.sh / Start_JSoko_Windows.bat
For instance the "512m" in java -Xmx512m -jar JSoko.jar can be replaced by a higher number like 5000m to allow JSoko to use 5000MB (= 5GB) RAM.
For more information have a look at the JSoko help pages.
- bug fix: huge levels sometimes have been considered as unsolvable
- bug fix: Chinese translation caused an exception in the program. Thanks to anian for reporting this.
- bug fix: dragging in the history slider didn't work
- optimizer: it's possible to manually mark the area to be optimized. The area not marked is now displayed darker to indicate it's not optimized.
- optimizer: there is a new optimizing method that optimizes for:
3. box lines
4. box changes
5. pushing sessions
Optimizing for 5 metrics takes a lot more time than just optimizing pushes and moves. However, this new method can leverage all cores of a system and use more RAM as the other methods. Hence, on multi cores systems this method can be as fast as the pushes/moves optimizing method. The results of this methods are the same as of the normal pushes/moves method except that the found solutions are also optimized for box lines, box changes and pushing sessions.
- optimizer: the number of CPUs to be used by the optimizer can be set by the user
- new skin by Jean-Pierre Martel
- highlighting of reachable box positions can be set on / off
- replay can be started using key "R"
- redo and undo can be done using single steps
- JSoko remembers the last played collection file and level number
- JSoko is compatibel with Java 6 again
- quicker box configuration phase in optimizer when using more than one box for optimizing. Thanks to Brian Damgaard for his help.
- bugfix: exception when trying to load file which isn't there is now catched
- new maximum level size is 70 * 70 squares
- quicker box configuration phase in optimizer when using more than one box for optimizing
- bugfix: sound has still been played while being disabled in the menu
- bugfix: changing the animation speed while a solution is replayed is taken into account again
- Optimizer: iteration mode and selected active area now stays as it is, even when optimizer is optimizing only a pushes range.
- Optimizer: the deadlock detection now runs at most 3 second to ensure the resources of this computer aren't used too much.
- Optimizer: the deadlock detection is automatically cancelled when the optimizer is started (no waiting for the deadlock detection having finished)
- bugfix: background image names weren't displayed translated
- removed display of level title since it's already displayed in the combo box
- new translation: Spanish translation by Moisés R. González Rodríguez
- bugfix: In the optimizer a solution stayed colored even after the optimizer has finished.
- Double-clicking a "short cut" in the file chooser dialog now immediately loads the file.
- Improved Dutch translation. Thanks to Joris Wit for this update.
- bugfix: the closed diagonal deadlock detection crashed JSoko in some levels due to squares "outside" the board (example level: "Bruno Druille 80"). Thanks to Heiner for reporting this bug.
- bugfix: some of the settings weren't saved anymore.
- solutions GUI: solutions that are best moves and best pushes solutions are now displayed with a special character - default character: ! (thanks to Heiner for implementing this)
- The included JSoko help is updated to stay in sync with the online help
- Improved Dutch translation. Thanks to Joris Wit for this update.
- Fixed bug in deadlock detection which classified the following level as deadlock (after push):
- solutions GUI: faster sorting of the solutions (moves/pushes, pushes/moves sorting by the user)
- bug fix game: while the player has moved the moves weren't updated
- bug fix editor: setting an object on a square, then selecting another object and setting it on the same square didn't work
- bug fix optimizer: fixed drawing marked area in optimizer when not dragging from top left to lower right
- Optimizer GUI now gets scrollable when window becomes too small
- JSoko includes two new languages: Chinese and Dutch. Many thanks to Lei Zheng and Joris Wit!
- New Translator tool to change the language texts. Thanks to Pawe? K?eczek!
- bug fix: the user settings file hasn't always been saved in the directory the JSoko.jar is located
- bug fix: the start level collection must be named case sensitive to be loaded on some OS
- bug fix: the graphical level browser crashed when just a few levels had been loaded
- bug fix: the shortcut file wasn't always saved in the same folder as JSoko has been started in
- bug fix: clicking at a level in the graphical level browser now loads the selected level. This doesn't work in version 1.59.
- The rotation and/or flipping of the board is now represented by a new tool bar icon.
- JSoko now offers an automatic check for new versions of the program. (JSoko menu: info->search for new version at program start)
- In the graphical level browser levels having at least one solution are displayed with a check mark. Thanks to Minh Hoang for implementing that!
- If the solver is opened and then closed the main window lost the focus so it has to be clicked again to play with key board. This is fixed now.
- new feature: a new tool bar button allows to view multiple levels at once to select one for playing. Thanks to Minh Hoang for implementing that!
- When the optimizer is opened the board is set back to the initial board position in the game view. Now the board stays as it is when the optimizer is opened. Thanks to Brian Damgaard for this suggestion.
- If only a part of a solution is optimized (pushes range optimization) the displayed values during the optimization reflected the fake level created from the selected pushes range. Now the displayed values reflect the values with regard to the original level/solution. Thanks for Jean-Pierre Martel for this suggestion.
- bug fix: when the optimizer has been started for optimizing a range of the solution and a new solution has been selected during the optimizer runs the optimizer couldn't be stopped anymore by the user (however, the optimizer normally stopped after having finished the optimizing).
- bug fix: when the player is played using the key board the program crashed
- bug fix: if the level is rotated or flipped while an animation due to a selected box is displayed the animation stayed at the previous box position.
- game play: clicking at the player position now displays the reachable squares of the player
- game play: the player can be moved by click&drag. Boxes can be pushed by click&drag.
- game play: when the mouse enters the slider for browsing through the moves history the cursor turns to a hand symbol. Thanks for this suggestion to Brian Damgaard.
- bug fix: if the optimizer is used for optimizing a pushes range and iterating is enabled the optimizer can't be stopped up to the second iteration. In this version the iteration is automatically deselected when optimizing a pushes range is selected.
- bug fix: if the optimizer is used for optimizing multiple solutions at once the solutions are colored to indicate that these solutions are being optimized. In some cicumstances the last found solution stays colored after the optimizer has ended. This is fixed now.
- history slider: the history slider is now integrated in the moves/pushes display area.
- pathfinding: the menu item for switching between moves optimized pathfinding vs. pushes optimized pathfinding has been removed. There now is a button in the toolbar for switching instead.
- new feature: there is a new toolbar button for replaying a solution automatically.
- bug fix: levels that contain boxes outside the player reachable area (usually boxes and goals set there for beauty reasons) have caused a crash when the level contains a savegame/snapshot.
- new level set by David Holland
- bug fix: in huge free levels the path finding has crashed. This is fixed now.
- bug fix: if the optimizer is opened and then the another level is loaded in the game solutions couldn't be imported in the optimizer anymore.
- optimizer: competitions like the MF8 competition use rather huge levels. The optimizier can't handle these huge levels very well because in most cases there is not enough available RAM. Therefore there are two new features:
* the pushes range optimization has been changed. Example:<br>If a range from 10 to 50 is selected the solution is analyzed. All boxes that aren't pushed in this pushes range of the solution are changed to walls. Furthermore the level is changed so that the board after push 10 is taken as new start position and the board after push 50 is taken as end position. This way higher vicinity values can be used for optimizing.
* Yet, the optimizer has always tried to find improvements in all parts of a level. In order to be able of using higher optimizer settings it's now possible to mark the area that should be optimized. This is simply done by clicking or dragging in the board displayed in the optimizer (holding down the cntrl key or using the right mouse button when selecting the area will delete the marking of the selected area).<br>The optimizer then will only search for improvements in the selected area. This way it's possible to mark a really small area and then even use 3 boxes for optimizing (for instance: three boxes with a small number of vicinity squares like 6).
- bugfix: if the level is switched while the optimizer is running the optimizer has added the solution to the currently loaded level. This is fixed now.
- bugfix: if a solution is taken as new history while the solver is running the solver sometimes crashes. Now it's not possible anymore to do this.
- new feature: JSoko now supports run length format for copying a level or solution to the clipboard and loading a level / solution. Many thanks to Minh Hoang for the coding for this.
- The history slider is smaller now. Therefore showing it doesn't move the rest of the GUI too much too the left.
- bugfix: The solutions have not been ordered correctly by secondary metrics in every case. This has been fixed in this version.
- new help: JSoko now shows a help at the start of the program. Currently this help is only available in English. It's possible to open this help from the program by pressing the F1 key.
- optimizer: The optimizer offers a new check box for fixing the player end position. This is useful for players who split levels into several sub levels for better optimizing results. Thanks to Ming for suggesting this feature.
- Fixed a display problem: levels which aren't assigned to any collection have been displayed multiple times in the levels view instead of just one time. Furthermore some internal debug information have been printed to the console. These prints have been removed from the coding.
- JSoko now supports exporting a solution to the clipboard in run length format. Thanks to M. Hoang and M. Gobelli for contributing coding for this!
- New feature: in the database menu of JSoko there is a new menu item " " for importing more than one collection from the hard disk to the database of JSoko. If you have some collections you play very often you can import them to JSoko. If they are then loaded from the database JSoko will automatically save your solutions in the database, too. In the database enter the text to search for (for instance in the author text field "a*") and press enter. The GUI will then show all data that matches your input (for instance all authors whose names start with a "a"). Since version 1.49 the search is case insensitive.
- solutions sidebar: if a level has been loaded from the database the solution order is saved back to the database if changed
- workaround: due to a [http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6880336 bug] in JDK Update 18 the solvers haven't been started
- bug fix: license text for JSoko now is displayed again in about dialog
- New sidebar for displaying the solutions of a level. (feature suggestion from Jean-Pierre Martel)
- bug fix for simple deadlock detection: JSoko in rare cases falsely declared squares as deadlock squares. This resulted in false deadlock messages, false shown dead squares and let the optimizer run in an endless loop. Thanks to Sokobano for reporting this bug.
- optimizer: bug fix for deadlock identification code: the optimizer now can find all deadlocks again. Due to a bug yet JSoko has missed some.
- Optimizer: the "iterative optimizing" setting is now saved from one session to the next
- Optimizer: number of box configurations to be generated can be set manually
- Optimizer: selected solutions in the list can be removed by using the popup menu (usually opened by a right click)
- Optimizer: bug fix for crash when optimizer is stopped before the generation phase has started
- optimizer: use more than one solution as seed solution
- optimizer: optimize from push x to push y only feature
- optimizer: split solutions if too less RAM
- Deadlock detection: new deadlock detection for "closed diagonal" deadlocks
- skins: smoother animations and animation speed adjustable
- GUI: show walls adjustable
- skins: support for skn-format
- skins: new built-in skins
- bugfix: fixed missing text for "save file"
- GUI: the NimROD look and feel can be customized
- database: importing a whole collection is enabled again
- general: navigation to next/previous unsolved level
- general: paste of moves from clipboard
- general: copy level to clipboard regarding transformations
- general: a message is displayed if a level exceeds the maximum level size of the program
- general: fixed bug: the history slider has wrongly been shown when using the mouse wheel in the editor
- general: browsing through the movement history is now possible by using the mouse wheel
- general: ctrl+c copies the current board and: the moves history if any moves have been made or all solutions otherwise
- general: the build file has a new default target. It's possible to use the build file now without proguard and 7Zip
- solver: bugfix for counting how many levels have been solved by the solver
- general: application position and size are saved in the settings file
- general: crtl+c and ctrl+v can now be used to import or export a level
- solver: while solving a timer is showing the needed time
- solver: the user can skip a level
- solver: if the packing order search fails the normal solver method is used
- solver: new feature: solving from level x to level y
- solver: new feature: display of solutions in the solver log
- solver: new feature: saving solver log to file
- solver: new method for levels having goal rooms
- GUI: GUI: newest NimRod Look&Feel 1.0g
- GUI: removed label texts, because the Nimbus L&f shows them in the optimizer.
- general: display of level in database and solutions view
- GUI: newest NimRod Look&Feel
- GUI: better quality when scaling graphics
- optimizer: box configuration generation progress is displayed step by step now
- general: stripping leading ">" characters for all imported data
- levels: new Disciple set
- optimizer: parallelization of box configuration generation
- internal: code refactoring, newest NinROD, newest HSQLDB
- general: load last loaded collection at program start
- optimizer: new optimizer method: box lines only
- interal coding: table sorting now done by Java 6 classes
- bugfix: after closing the optimizer the main panel gets the focus now
- buxfix: deselecting all boxes for optimizing doesn't crash the program anymore
- new feature: the settings of the program are saved to a user_settings.ini file
- new feature: the "open dialog" now offers a shortcut list for saving often used paths
- skins: newest NimRod Look&Feel
- optimizer: no cut of the search tree in the optimizer for better performance any longer
- optimizer: new text "Optimization method courtesy of Sébastien Gouëzel"
- optimizer: performance improvements for the optimizer, new close icon for the optimizer GUI
- bugfix: IDA* solver crashed in goal room levels due to class cast exception
- new feature: Optimizer for solutions
- look&feel: fixed problems with Java 6 and NIMRod Look&Feel (Thanks to Nilo J. González)
- game play: possibility to switch between moves and pushes optimized pathfinding
- game play: the information about "new best solution" / "duplicate solution" is just shown in the status bar, instead of an extra popup (suggested by Brian Damgaard)
- editor: the editor now only handles mouse actions when the program has the focus. (Before: when selecting the program for giving it the focus has also been handled as action, which resulted in setting an object in the editor, ...)
- game play: display of the number of pushes at least needed to solve a level
- skins: new background image
- bugfix: the undo / redo buttons weren't enabled in some cases
- general: 7 new sokhard levels
- bugfix: the move optimizing solvers crashed due to a stack overflow in some levels (Sasquatch VI 28, ... )
- gameplay: the undo / redo button is enabled / disabled depending on the movement history status
- general: the program starts with a resolution of 1024 * 800. If this is too large for the screen its size is reduced to the screen size. However, some OS like "MS Windows" reserve some space for a toolbar. The program now takes this into account.
- new feature: undo all / redo all
- new feature: history browser for the done moves/pushes
- new feature: in the solutions frame a new button "copy lurd string to clipboard" is available
- new feature: sounds for a move and a push
- bugfix: aborting loading a new collection resulted in jumping to the first level of the current collection
- bugfix: backspace for "undo" has been usable while the editor is running
- bugfix: switching the skin while the editor is activated set the level status to "level unchanged"
- bugfix: It has been able to put a box on top of the player in the editor
- bugfix: The reachable squares of a box weren't shown correctly when the view has been transformed
- bugfix: transformation in editor must also be treated as change
- general: Replaced the sea background by the graphic "drops"
- general: Only the "application" is supported as from version 1.20 (only high resolution graphics,...)
- database: the comment area and button are disabled when there isn't any row selected
- new feature: tool bar for one click actions
- new feature: load data via drag&drop
- interal coding: The whole project now uses Java 1.5 as standard
- database: Set author of all selected levels at once
- bugfix: the presolving of a goalroom coulnd't be aborted by the user
- bugfix: incorrect move tunnel detection (for instance level sok evo 107 has been solved in 268 moves instead of 266)
- database: datebase for storing all level information Version 0.1
- editor: transformation in editor must also be treated as change
- ignore ">" at row start
caution: reverse mode gamelines may start with ">", hence, gamelines need special action (YASC 1.302 includes a correct implementation).
new feature: Solution management
- Bugfix clipboard import
- Bugfix: collections onces loaded coundn't be loaded again
- editor: leaving the editor with "cancel" the level now is displayed with the same transformation as it has been displayed when entering the editor
- gameplay: popup when new best solution
- general: new look&feel (the standard one can be set in the settings menu)