Romhacking => Personal Projects => Topic started by: Klarth on April 05, 2020, 12:00:26 am

Title: TileShop and ImageMagitek (v0.981 preview)
Post by: Klarth on April 05, 2020, 12:00:26 am
TileShop Releases (
Install Instructions and Usage Wiki (
Workflow Guide and Images (
Hotkeys (
Sample Project Files (

TileShop is a tile and pixel-based graphics editor for Windows made with C# and WPF. It supports project-based graphics editing for most common systems with game-based palette colors, game-based palette editing, and exporting of images. SNES is the best supported workflow with improvements coming to PSX (TIM loading) and full support coming to NES (palettes) in the future.

ImageMagitek is the currently unreleased cross-platform graphics library that TileShop builds upon. ImageMagitek is situated to allow non-Windows users to import/export data from TileShop project files and edit them with external tools.


Source code repository
TileShop Github (

Help Wanted
Please see this thread (
Title: Re: TileShop and ImageMagitek (v0.90 preview)
Post by: Risae on April 06, 2020, 06:19:26 am
Hi Klarth,

pretty cool program!
I am currently working on the translation of a PS2 game and i was able to view the games font file.
The game uses a very strange font file, heres what it looked like using the PSX 4bpp:



But it looks like it can't display it perfectly.
I believe the file is neither TIM2 nor a normal font file.
The only program i was able to previously use to display the font okay-ish was Tile Molester Mod with the settings

Code: [Select]
###### 2bpp ######

Settings JPN:

Codec: 2bpp linear, reverse order
Mode: 2 dimensional
Stretch: Columns 48, Rows 54

Settings ENG:

Codec: 2bpp linear, reverse order
Mode: 2 dimensional
Stretch: Columns 64, Rows 118

###### 4bpp ######

Settings JPN:

Codec: 4bpp linear, reverse order
Mode: 2 dimensional
Stretch: Columns 24, Rows 42

Settings ENG:

Codec: 4bpp linear, reverse order
Mode: 2 dimensional
Stretch: Columns 32, Rows 80

Here is what it looks like in Tile Molester:


Do you think you could take a look at that font file?
It might be one of those exotic images that no Tile Viewer can display perfectly as of now.

A bug i noticed while testing:
If i go over a certain amount of "arranger height in pixels" the screen suddenly only displayed black:


Also, do you plan to support TIM2 image files?
Title: Re: TileShop and ImageMagitek (v0.90 preview)
Post by: Klarth on April 06, 2020, 06:47:18 am
> Do you think you could take a look at that font file?

Sure. PM, email, or ping me on RHDN's Discord. If possible, please also include an in-game screenshot of the font's appearance.

> If i go over a certain amount of "arranger height in pixels" the screen suddenly only displayed black

That's intended behavior (at the moment) if rendering an element takes you past the end of the file. It beats immediately crashing.

> Also, do you plan to support TIM2 image files?

I haven't looked at TIM2, so I'm not sure what is necessary to support them. I would first have to gather docs and a comprehensive set of sample images.
Title: Re: TileShop and ImageMagitek (v0.93 preview)
Post by: Klarth on September 22, 2020, 06:38:55 am
TileShop v0.95 preview has been released ( See Edit 2 below for v0.96.


Changes are most noticeably UI/UX-related with a Dark Theme and restyled controls. More work to be done there.

There are some feature additions as listed on the release page. The bulk of the work since last release has been in refactoring code to support multiple opened projects and in anticipation of more advanced features (external code-based codecs and external plugins).

Help Wanted

I am looking for someone with good knowledge of some games with extensively documented, uncompressed graphics/palettes outside of SNES (particularly NES/GBA) so I can have enough reference material for when I implement better support for those systems. The ideal candidate is someone who is actively working on such a game, are in the process of doing/planning significant graphics work, and can work with/test TileShop as new features are developed.


I am also looking for opinions on changing the codec system. The XML-based codec system has served well so far, but is in need of changes. In particular, the shortcomings are apparent when the graphics "flow" across many subtiles (like this FF5 font ( which TileShop can currently handle as 2 separate 8x12 tiles. The worst scenario is if graphics don't flow at all. That scenario is currently not supported except with internal C# codecs.

The first option is my original plan: double down on XML codecs, implement subtiles, and the ability to explicitly remap pixels. This is complicated for both myself to design/code and for the end-user to learn/use. I don't think there will be much value here for the time investment. The biggest benefit of the existing codec system has been that tiles can resize to anything, but subtiles and explicit remaps are a fixed-sized tile feature.

The second option is to not improve the XML codec spec and force users to implement support via external C# codecs once they are designed and available.

The third option is to implement a codec capable of reading Feidian PHP files (or a similar, proprietary version) to deal with peskier, fixed-size tiles.


Edit: Seems like there are a significant number of new bugs introduced due to the new way I handle multiple palettes. I will put out a new version soon to fix these issues before working on codec/plugin features.


Edit 2: These should be now fixed in v0.96

September 29, 2020, 12:12:05 am - (Auto Merged - Double Posts are not allowed before 7 days.)
TileShop v0.96 preview has been released (

This update primarily addresses crashes related to Scattered Arrangers that slipped into the previous version and needed fixed quickly. Some additional smaller improvements are noted on the GitHub release page.
Title: Re: TileShop and ImageMagitek (v0.97 preview)
Post by: Klarth on October 14, 2020, 07:46:07 pm
TileShop v0.97 preview has been released (

This release contains a massive user experience upgrade with the drag+drop system fully reworked and many bug fixes. The wiki has also been updated to reflect the current state of the program with some more images. The full change log is on the release page.


The core GUI is stable enough to where I should be able to focus primarily on new features rather than the GUI side. There are still several specific GUI improvements on the backlog, however. I may work on the codec system next because I'm still hoping that someone provides some help on the palette system.
Title: Re: TileShop and ImageMagitek (v0.97 preview)
Post by: Klarth on November 02, 2020, 03:26:56 am
Substantial work has been done towards the future v0.98 release. Besides several bugfixes (including to the GBA 4bpp codec), several key features have been added.

First is that the XML codec system is basically finalized. There are now two major families of codecs: flow and pattern codecs. Flow codecs are the original, resizable TileShop codecs. Pattern codecs adopt Feidian's system of using alphanumeric characters to represent tile definitions and can never be resized. While you will not be able to directly use Feidian PHP files, the character patterns that define bit ordering are the same. There are a few minor differences in terminology and features otherwise. The adoption of Feidian patterns was done to solve the problem of true 2D remapping which flow codecs could not support without a lot of complex design work which would likely not be used.

Second is that some work has been done on the plugin system. In particular, graphics codec plugins are now fully working so you can write encoding/decoding plugins in any .NET language. TileShop's internal implementations are written with the same interfaces, including the XML flow and pattern codecs, so it supports most imaginable scenarios. What it currently does not support is compression. While I can implement this case (basically the limitations are because of fixed-size buffers) with some small changes, I'm not sure how useful the feature is vs manual extraction or (in the future) file plugins.

File plugins have not been worked on yet. I need to think carefully about the specific plugin APIs because file plugins will need access to the majority of ImageMagitek's features.

Last is that support for contiguous, in-game NES palettes has been added. This includes editing.


Project Roadmap
v0.98 will be the last version on .NET Core 3.1 and possibly the last version this year. .NET 5 is coming this month and porting TileShop (and its dependencies) may take some time, plus add sufficient features, for a new release.

v1.0 is still quite awhile away. At the minimum, two things are holding back that release: 1. Better palette serialization in general (scattered palettes and constant color values definable in the project XML) and 2. Breaking changes to the project XML schema that may be necessary to better support palettes and file plugins. The numerous other bugfixes, improvements, and features in wait could come after 1.0, but I do not wish to continually break the XML project schemas after 1.0. Because of that, there will likely be more releases than just v0.98 and v0.99 before v1.0.

I am strongly considering changing the scope of ImageMagitek and making it only intended for TileShop and TileShop plugins instead of a general .NET library for consumers to use in their applications. ImageMagitek will still remain available to do so by nature of being open source, but not be officially supported in that manner. Reason being a lack of interest, high complexity, and the TileShop project overrunning its schedule.
Title: Re: TileShop and ImageMagitek (v0.98 preview)
Post by: Klarth on November 10, 2020, 06:01:54 pm
TileShop v0.98 preview has been released (

This update primarily contains the codec system rework and support for contiguous, in-game NES palettes.

I will be updating the wiki soon with the Crystalis project sample and explicitly documenting the XML codecs. I don't anticipate any major future changes for the XML codecs and the few niche graphics not supported can be implemented via code-based codec plugins in the future.

As mentioned previously, TileShop will be moving to .NET 5 (which released today) for the next release and will require different runtime files.
Title: Re: TileShop and ImageMagitek (v0.981 preview)
Post by: Klarth on February 05, 2021, 04:14:14 am
TileShop v0.981 preview has been released (

This is a small update to fix some bugs, add some minor features, and introduce TileShopCLI -- a command line tool to help automate importing and exporting of TileShop project resources. It ties in directly with all configuration files, codecs, palettes, etc that TileShop does. For now, only ScatteredArranger <-> Image (PNG) is supported. TileShopCLI is currently built for Windows and bundled with TileShop, but I will also be releasing a cross-platform version in the future. TileShop itself will remain Windows-only.

As mentioned previously, the project has moved to .NET 5 so users will need to update their runtimes to .NET Desktop Runtime 5.0+ x64 ( One unfortunate change is that .NET 5 now explicitly bundles WinRT into my project instead of assuming the client has it. This has increased the executable size by some 25MB. I have chosen not to revert back to .NET Core 3.1 for now, but I may need to change if this isn't addressed in the near future.

Next version (Important!)

I expect to heavily change the project structure in the next version or so which will lead to heavy breaking changes. One XML file to encompass an entire project has become a liability both in terms of the impact of potential bugs and the ease of hand editing. The FF2US project is a demonstration and is at roughly 4500 lines. Because of this, I want to split individual resources into their own files on disk. Future changes such as importing/exporting metadata would only crowd a single file project structure even more.