News:

11 March 2016 - Forum Rules

Main Menu

TileShop and ImageMagitek (v0.992 preview)

Started by Klarth, April 05, 2020, 12:00:26 AM

Previous topic - Next topic

Klarth

Overview
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 and NES are the best supported workflows with improvements coming to PSX (TIM loading).

TileShopCLI can be used by toolchains by Windows and non-Windows users to import/export data from TileShop projects and edit them with external tools.



Source code repository
TileShop Github

Help Wanted
Please see this thread

Risae

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:

Spoiler
[close]

Spoiler
[close]

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


###### 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:

Spoiler
[close]

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:

Spoiler
[close]

Also, do you plan to support TIM2 image files?

Klarth

> 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.

Klarth

#3
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.

Codecs

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.

Klarth

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.

Klarth

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.

Klarth

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.

Klarth

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.

Klarth

TileShop v0.990 preview has been released

This version contains the breaking changes to XML projects that I discussed last update and affects both TileShop and TileShopCLI. I had hoped to provide an upgrade path, but it proved to be exceptionally difficult. I upgraded all of the sample projects by hand (approximately 146 resources) and it wasn't too bad. I don't expect anticipate any large breaking changes to the project XML spec in the future, definitely not on this scale.

Features-wise, I have introduced a flexible system for defining color sources. This allows for a palette's colors to be defined as coming from a file source, defined as a native color source (an RGBA value), or defined as a foreign color source according to the palette's color model (Bgr15, NES, etc). They can even be mixed within a single palette. The primary focus here was to add support for scattered in-game palettes (such as NES palettes with colors written via assembly, but each color itself needs to be contiguous) and support for users who just want to quickly create an out-of-game palette from an emulator's VRAM view. These options are stored in the palette's resource file XML.



Next up may be improved import/export options. If someone can reach out with documented examples of Genesis/MD palettes, that would be helpful too. File loader plugins may still be on the menu, but the new XML projects provide an easy avenue for standalone programs. I need to weigh the benefits.

Please report any bugs that have crept in as this project rewrite was a massive undertaking because building reliability across multiple files that reference each other is not easy. I have done a fair bit of testing, but I still recommend making backups before you do significant project restructuring.

Klarth

TileShop v0.991 preview has been released

This version adds a fair number of new features: flood fill, recent projects, element layouts, more. Perhaps most important is the revision to the visuals and organization of the editor toolbars. I have tried to improve clarity while shortening the toolbar and made partial success on those goals.

Support for Bgr6 and Bgr12 color formats was also added for Sega systems, but needs testing.

Next version goals

I should be able to add element flipping/rotation, add hotkey descriptions to tooltips, re-enable direct color codecs, and maybe add smarter per-resource import/export. TileShop is steadily moving towards version 1.0 and becoming feature complete.

spotanjo3


MysticLord

I don't have anything to contribute since I'm not a spriter (or artist), but you might get more feedback if you flog this on communities with lots of spriters. FF6Hacking, FFHacktics, and the various Mario hacking forums being the best examples.

It looks very nice, so any issues you have with lack of adoption and feedback are probably a marketing problem.

Klarth

Quote from: spotanjo3 on July 31, 2021, 04:56:06 PM
Neat but no macOS version also?

Right, no macOS version. I'm highly dependent on a really good docking window solution that's restricted to WPF. TileShopCLI is a portable option when/if there are more complete projects made for games with a good import/export workflow for external editing, but you won't be able to use the UI to create projects. If there were a good docking window option for Avalonia (there's a mediocre option currently), I could rewrite the View client for it to get macOS+Linux support. I'm not sure that will happen as the development time on this project is already very high.

Quote from: MysticLord on August 01, 2021, 02:13:05 AM
I don't have anything to contribute since I'm not a spriter (or artist), but you might get more feedback if you flog this on communities with lots of spriters. FF6Hacking, FFHacktics, and the various Mario hacking forums being the best examples.

It looks very nice, so any issues you have with lack of adoption and feedback are probably a marketing problem.

Absolutely. Some of the lack of "marketing" is intentional because I expected some big breaking changes (which were mostly completed in the past year), but I also didn't anticipate the rather slow development rate either.

Klarth

TileShop 0.992 preview has been released.

This release adds support for some direct color codecs (PSX, BMP, N64) and fixes quite a few bugs. The project has migrated to .NET 6. I also added the ability to flip/mirror non-square elements if you opt-in to enable the feature. It affects both the decoding and encoding parts, so it does not change the underlying graphics, only the viewing experience.

Per-resource import/export settings is a priority for next release. However, I've been stuck on the design. Some significant changes may be necessary.

Sweeping changes may also be coming to the UI. I need input on how valuable the out-of-window docking experience is for people. If TileShop is fully workable within a single window, then there's a straightforward opportunity to move to Avalonia and become crossplatform. TileShop is currently a WPF application using a third-party styling library that hasn't been updated for a year, so I'm looking to maybe move on. I've done some experiments with WinUI3 and it's good, but Windows-only.

Icon images from Zelda 64 viewed with N64 Rgba32 codec:



Additionally, I made some samples to demonstrate how ImageMagitek could be used in a standalone project. In particular, a program to construct+view FF5's monster sprites. Source is available in the repo under Samples.


Risae


MysticLord

Quote from: Klarth on January 20, 2022, 12:43:21 AM
Sweeping changes may also be coming to the UI. I need input on how valuable the out-of-window docking experience is for people. If TileShop is fully workable within a single window, then there's a straightforward opportunity to move to Avalonia and become crossplatform. TileShop is currently a WPF application using a third-party styling library that hasn't been updated for a year, so I'm looking to maybe move on. I've done some experiments with WinUI3 and it's good, but Windows-only.
If you make it single window, please ensure users can snap the sub-pane borders - either with hotkeys to preset configurations or via drag, click drag, or [hotkey] drag.

I also want to reiterate that you should be posting this on communities with lots of spriters for more valuable feedback.