CadEditor
https://github.com/spiiin/CadEditor
CadEditor is the universal level editor for NES/SMD/SNES games, I describe project on steemit here.
What feature(s) did you add?
- CadEditor now has the installer.
- Release at itch.io use it's native update system via butler
- Settings were moved from root editor directory to platform-specific folders (It required a special script for rename and change include paths in more than 2000 settings files, this script now in the repository now, but it will be included when it will be cleaner for creating similar refactoring tasks).
- Bug fixes.
The list will be included in the below section. - Support for new games added.
This work includes reverse-engineering of games. After that, if the game has one of a standard system, config for it may be added via using CadEditor common functions, but if it some new format, some code needed to load it in CadEditor. I'll show three new games with specific attribute layer system, not seen until this release.
How did you implement it/them?
- CadEditor now has the installer.
This is the solution of the bug, that many users have with the archive.
(1, 2 3(message from Kasumi))
After unzipping downloaded from the internet archive, executable files and dlls was marked as untrusted by windows, so Cadeditor can't load plugins dlls after running until users not unlock all files or entire archive manually. Installer solves this problem.
Here is the first release with the installer. I used InnoSetup as it's free and simple.
Users of Mac and Linux can still build CadEditor from sources and uses Mono to run it.
- Release at itch.io use it's native update system via butler
This system allows settings the directory to upload to site, and it automatically checked, what files are changed and upload the only patch of changed files, like version control system does. Here is test commit with butler upload command.
This allows committing minor changes and delivering updates to itch.io users via the site application update system faster.
- Settings were cleaned and moved from root editor directory to platform-specific folders
There are about 200 supported games in CadEditor now, and, I think, that there was a good idea to move it to separate folders. It's hard to rename files and change include paths in it, so I wrote python script to do it for me. Now it not in the repository because it was written in a quick-and-dirty way, but it can be base of future refactoring tool for thousands of config files. There are huge commits (1, 2, 3), doing after work of script.
I have a tool to check the correctness of every config after renaming/moving/cleaning, it really helps me to do this work.
Bug fixes
Fixes for rendering and selection for vertical-described screens and non-square blocks (commits - 1)
Fix selection for big sprites (commit)
Allow negative block number (some games can define it) (commit)
And many other small fixes.
- Support for new games added.
As I say, some games have an interesting level format, and for adding them it need not only reverse it but adding code to save/load this formats. It this release, it was an intersting to add games with separate attribute layer. In NES games, tiles (8x8 images, basic build block of graphics) has incomplete colors and 2 bits of it stores separately. Most games define blocks as a group of tiles + color bits for it. But some games abuse ability to store color bits (tiles attributes) separately, and, even more, doing it in different ways.
For example, Asterix game store blocks per column, and attributes as a separate layer, also stored per column. The first screenshot shows blocks without additional color bits, at second screenshot additional color bits are mixed with blocks).
(commit for asterix)
But, in other game, Silent Assault, screens described as blocks per column as in Asterix, but attributes bits described per rows:
(commit for silent assault)
For describing all possible variations, I introduced the next configs options:
public MapInfo[] getMapsInfo() { return SilentUtils.makeMapsInfo(); } //function to load needed addresses of attributes and blocks
public LoadMapFunc getLoadMapFunc() { return SilentUtils.loadMap; } //function to select how map will be loaded (for example, loaded from blocks per row or per column).
public SaveMapFunc getSaveMapFunc() { return MapUtils.saveAttribs; } //simmetrical function, how map will be saved back.
public bool isMapReadOnly() { return true; } //option to show, that map builded from blocks and only attributes bits (and not tiles) can be changed from map editor plugin.
Other games with separate attribute bits:
Circus Caper (blocks per column, attributes per row by screens)
Hudson Hawk(blocks per row, attributes per row)
All games added in this release:
Hudson Hawk (1 level)
Asterix (all levels)
Silent Assault (all levels)
Aliens FDS (all levels)
Gaiapolis (1 level)
Tagin's Dragon (all levels)
Ikari Warriors (1 level)
Parasol Henbee (all levels)
Doki Doki Yuuoenchi (all levels)
Super Pitfall (all levels)
Panda Prince (all levels)
Rocman X (all levels)
Jetsons (all levels)
Spelunker 2 (all levels)
Ji Qi Mao Xiao Ding Dang (all levels)
Garfield (all levels)
Wai Wai World (all levels)
Wizzard of The Oz (all levels)
Splatterhouse (all levels)
Indivisible (all levels)
Mickey's Safari in Letterland (all levels)
Juuonki (all levels)
Metal Storm (all levels)
Release changelog:
https://github.com/spiiin/CadEditor/releases/tag/v5.1