Add grid-based version of "cut spritesheet" dialog:
Fix import/export of raw tiles for 8x16 mode
wip: Fix import/export of NES tiles for 8x16 mode
Add support for offsets in asm export:
More improvements to asm export formatting:
Improvements to asm export formatting:
Fix rare-but-fatal out-of-index error in TilingMethodDragQueen
Add export-to-.asm feature for sprite images:
Add functionality to import / export NESST .msb format
Fix bug when loading sprite sheet with pixels occupying first line
Add sensible error messages for non-indexed images
* Use VERSION_STRING in setup.py for building c_tile extension module
Make "about" dialog report version correctly:
* Make a new variant of ShiftedRows, that avoids overlap.
* Re-organise files into a package 'tilificator', and switch to absolute imports
WIP: Add Appveyor build automation
WIP: Add Appveyor build automation
WIP: Add Appveyor build automation
WIP: Add Appveyor build automation
For completeness sake, added TilingMethodRect, which tilifies sprites with a regular grid as if they were background tiles.
Update Copyright in About dialog to cover 2019.
* Added an optional grid view using the QListWidget's IconMode.
Home
Add an approximate "global optimization" feature.
For completeness sake, added TilingMethodRect, which tilifies sprites with a regular grid as if they were background tiles.
Made TileTable scroll properly, and added a groupbox to sprite image windows for a more consistent layout
Remove unused QtUiTools import (was causing pyinstaller build to fail)
First import of files! Tilificator is now secretly public... :)
* Wrote simplified versions of draggableToRight/draggableToLeft and dragToRight/dragToLeft, allowing only one pixel drag at a time
* Removed debug printf calls from c_tile, for less noise in the console
Decided to create a new branch for the variable-drag rewrite, due to a still remaining uncertainty of whether this approach will work out in the end
* Optimized method "optimizeRows" in TilingMethodDragQueen a bit, mainly by adding a C extension for the coverageFromTilification function
* Removed all dependencies on NumPy
* Fixed a bug in the sorting of sub-spriteImages based on size, making the sorting actually work
* Eliminated the biggest memory leak in c_tile.c. The main problem was that both PyList_Append and Py_BuildValue increment the reference count of objects
* Added preliminary handling of multi-palette tilifications. SpriteImages are now automatically split into sub-images before tilifying, based on TileTable.colorSize. Still need to add functionality to set this value in the GUI
* Converted all tabs to spaces in source files
* TilingMethodDragQueen to use less memory, by using an iterator only once for the entire sequence of combinations. Memory leaks still seem to be a problem though...
* Made TilingMethodDragQueen yield unconditionally at every 10th tilification evaluated, to increase general responsiveness
* Fixed bug with deletion when trying to delete last tile in tiletable
* Improved the "cut sprite sheet" dialog to exclude smaller rectangles contained in a bigger one
* Cleaned up the mess with MainWindow and TileTableWidget/SpriteImageWindow cross-referencing each other, instead using signals and callbacks
* Reverted back to again using the incorrect "average sprites/scanline" calculation in cost function that divides by image height instead of tilification height, which was changed in revsision 16. The more correct method seemed to give to odd tilifications, affecting tilifications of later sprite images negatively. Again a limitation of just considering one sprite image at a time...
* Another minor optimization, consisting of only performing one optimization stage in tryToReduce before returning, but calling it as long as reductionImpossible is false
* Cleaned up menus and added "select used" and "invert selection" commands
* Optimized method optimizeRows a bit more. Main speed increase comes from adding a function reductionImpossible, used to skip the later part when the number of sprites is detected to already be the minimum possible
* Minor optimization and cleanup of drag functions
* Moved TileTableWidget and SpriteImageWindow class into separate files. Also renamed SpriteImageWindow to SpriteImageWidget
* Changed file format, from plistlib to json. Old file format is still loadable but will be phased out eventually...
* Fixed a bug in TileTableWidget that was causing some unwanted rendering at zoom=2 before setting zoom=4
* Added a dialog for Tile Table settings
* Added copyright and GPL license notices to source files
* Reintegrated branch "singledrag" back into trunk
* Cleaned up TilingMethodDragQueen, removing some unused code in the process
* Removed old debug printing
* Added proper X-sorting of sprites images in "cut sprite sheet" dialog, making their order quite a bit more intuitive
* Added handling of blank sub-images in splitImages function, and sorting based on size of spriteImage
* Removed the merging of tile table matches and self matches, instead calling matchSpriteTilesIterative twice. Megaman now tilifies into 102 tiles again. This could be reduced for this specific set of sprite images by 2 if the default positiom for *non* leftmost/rightmost was shifted to be as far to the right as allowed instead of to the left. However, the general way to handle this would be through a multipass algorithm of some kind.
* Optimized findFirstNonBlankColumn and findLastNonBlankColumn by creating lookup tables for them
- Improved ShiftedColumns algorithm. Megaman now tilifies into 111 sprite tiles
* Changed the naming from 'workspace' to 'project' in menus
* Fixed "average sprites/scanline" calculation in cost function so that it now uses floating point division for better accuracy, and made it divide by tilification height instead of image height
* Added "About" dialog and COPYING file
* Updated year in Copyright header text from 2011 to 2012
- Performed a big cleanup of the code, breaking the tiling methods previously found in "tilify.py" into classes derived from abstract class 'TilingMethod'. Also renamed the tiling method "ShiftedColumns" to "DragQueen", since the former name was misleading by now
* Added a reduction pass to TilingMethodDragQueen, which repeatedly reduces the number of combinations to check until it is considered to be a "reasonable" size, at the risk of missing to check some combinations that may be the optimal.
* Changed function coverageFromTilification in c_tile.c to use abstract sequence functions instead of the list functions, as this avoids a bug in TilingMethodFullMatch with combinations being tuples instead of lists
* Fixed two "obvious" bugs in TilingMethodDragQueen that was causing the "best" tilification to be erronously selected, or even not fully covering
* Once again abandoned the variable-drag idea, instead focusing on minimizing the dragging by storing lists of matches
* Improved algorithm for finding self-matches in TilingMethodDraqQueen. They are now processed separately after the tiletable matches, by a "similariies" list which contains a list of each match that appears in several positions with the same y coord. If not at least 2 of these are found, no sprite will be fixed to this match to allow other similarities to be tested, so that we don't assume we got a good match as soon as we matched only one tile.
* Changed "tile settings" command to only wipe tile table if tile width or height is changed
- Modified draggableToLeft/draggableToRight to be more flexible, and made optimizeRows use the newer single-drag-functions. Megaman now tilifies into 110 sprite tiles with the ShiftedColumns method
(partial) Pylint code-cleanup.
Fix broken sync. update of sprites when clicking tiles in tile table.
* Bugfix: Made the 'cut spritesheet' dialog always use the upper-left corner pixel as the background color, instead of assuming it to be 0 in some of its code
PEP 8 code style changes.
PyGtk to PySide2 conversion - with a few Python2 -> Python3, minor refactorings and removal of dead code slipping in as well.
* Improved import/export tiles dialog to have Ok/Cancel buttons, with the "Ok" button being enabled only after file selection.
* Fix bug with tile table clicking not working for tiles not used by any sprite image.
* Removed cropping when loading sprite images
* Optimization: Made matchTiles function in c_tile stop matching blank tiles
Bugfix to handle tilification of blank sprite images.
Changed "cost = 1000000000000.0" in TilingDragQueen to "cost = float('inf')"
* Added functionality to export tile data in raw formats
Added an array2d class for easier indexing, and got rid of the back-n-forth pad/crop sequence in TilingMethodDragQueen __init__
* Changed project loading to default to .tpr format instead of old XML format when no suffix is present
Changed sprite tilifications to get explicitly cleared as first step of tilifying.
* Actually show the progress bar dialog when tilifying
* Fix bug with cached sprite image being misaligned with sprite tile rectangles after updating tile settings
* Bugfix: Added filtering away of blank spritetiles in TilingMethodDragQueen
Updated array2d with copy methods and addition overload.
* Fix PySide2 "Internal C++ object already deleted exception" when trying to import sprite sheets twice.
Changed sprite image window to use a QListWidget, supporting easy deletion + drag'n'drop.
* Bugfix: TilingMethodShiftedRows now calculates the maximum tiles for the row correctly (was overestimated, causing redundant tiles)