Git Product home page Git Product logo

rangi42 / tilemap-studio Goto Github PK

View Code? Open in Web Editor NEW
356.0 13.0 28.0 6.73 MB

A tilemap editor for Game Boy, Color, Advance, DS, and SNES projects. Written in C++ with FLTK.

Home Page: https://hax.iimarckus.org/topic/7691/

License: Other

Makefile 0.31% C 35.44% C++ 62.36% Batchfile 0.20% HTML 1.69%
tilemap tilemap-editor game-development gameboy gameboy-color gameboy-advance snes tileset c-plus-plus fltk

tilemap-studio's Introduction

Tilemap Studio Build Status

A tilemap editor for Game Boy, GBC, GBA, NDS, SNES, Genesis, or TG16 projects. Specifically meant to support the pret disassemblies like pokered, pokecrystal, and pokeemerald; as well as hacks including Polished Crystal, Red++, Orange, Prism, and many more.

Inspired by tools like Tilemap Creator, NTME, GSC Town Map Editor and Karteneditor, but implemented with C++ and FLTK, and with support for multi-platform tilemaps as well as Pokémon-specific formats.

Latest release: 4.0.1

Follow the steps in INSTALL.md to install the release copy of Tilemap Studio, or the longer instructions to build it yourself from source.

The example/ directory contains different formats of tilemaps and tileset graphics. In particular, pokecrystal/town_map_pokegear.png is a colored-in combination of tileset graphics from pokecrystal, useful for viewing any Town Map in a project based on it.

Browse the menu items, toolbar buttons, and Help dialog to learn how to use Tilemap Studio. And don't miss the mouse controls:

Tileset Tilemap
Click/drag Select tile(s) Place tiles
Middle drag Scroll Scroll
Right-click Highlight tile Select tile
Right drag Select tiles
Ctrl+click Replace tile
Shift+click Flood fill
Alt+click Swap tiles

More information is at the Gameboy Development Forum, Skeetendo Forums or PokéCommunity. If you have questions or comments, please go there.

Screenshot

Screenshot 2

tilemap-studio's People

Contributors

rangi42 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tilemap-studio's Issues

Edit the selected multi-tile area in the tilemap

If you right-click-and-drag in the tilemap to select multiple tiles, you should be able to press Delete or choose Edit→Clear Selection (disabled when it can't be used) to erase the selected area. It would become all tile $0:00, palette 0, no X/Y flip. Likewise enable controls for X-Flip Selection and Y-Flip Selection if the format supports flipping.

[Feat Req] Select/copy/move tilemap rectangles; etc

Implement standard select/copy/move functionality to the tilemap editor.

Related features:

  • Multiple clipboard slots i.e. the user can define arbitrary-size polytiles that they can drag and drop onto the main tilemap wherever
  • Moving a tilemap past the edge of the screen would cause it to wrap around. Behavior can be specified by the user to respect or ignore the effect of software routines that correct for buffer overflow.
  • Multiple background layers and toggle pixel 0 transparency

Option for Image to Tiles to avoid trailing empty tiles

pokered/pokecrystal have gfx.c's --trim-whitespace option, so they're fine with tileset images that have trailing empty tiles at the end. However pokeemerald does not have this feature.

Under the Input and Output filenames should be a checkbox to pick a tileset size that avoids any trailing tiles, 1 tile wide if necessary.

image

compatibility on apple m1

Hi, i have been trying to build this app to run on apple m1, since it's not possible to use wine anymore (see #16)

FLTK build perfectly, I have used this guide (cmake / make), the examples are working and the library is installed in /usr/local/include/FL

I also had to edit the makefile, because of this error

But now, when i follow the instructions on INSTALL.md, i encounter this error:

>make clean && clear && make
rm -rf bin/tilemapstudio bin/tilemapstudiod tmp/config.o tmp/help-window.o tmp/hex-spinner.o tmp/image-to-tiles.o tmp/image.o tmp/main-window.o tmp/main.o tmp/modal-dialog.o tmp/option-dialogs.o tmp/preferences.o tmp/themes.o tmp/tile-buttons.o tmp/tile-selection.o tmp/tile.o tmp/tilemap-format.o tmp/tilemap.o tmp/tileset.o tmp/utils.o tmp/widgets.o tmp/debug/config.o tmp/debug/help-window.o tmp/debug/hex-spinner.o tmp/debug/image-to-tiles.o tmp/debug/image.o tmp/debug/main-window.o tmp/debug/main.o tmp/debug/modal-dialog.o tmp/debug/option-dialogs.o tmp/debug/preferences.o tmp/debug/themes.o tmp/debug/tile-buttons.o tmp/debug/tile-selection.o tmp/debug/tile.o tmp/debug/tilemap-format.o tmp/debug/tilemap.o tmp/debug/tileset.o tmp/debug/utils.o tmp/debug/widgets.o

c++ -c -std=c++17 -Isrc -Ires -I/usr/local/include -I/usr/local/include/FL/images -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_THREAD_SAFE -D_REENTRANT -DNDEBUG -O3 -flto -mcpu=apple-a11 -o tmp/config.o src/config.cpp
c++ -c -std=c++17 -Isrc -Ires -I/usr/local/include -I/usr/local/include/FL/images -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_THREAD_SAFE -D_REENTRANT -DNDEBUG -O3 -flto -mcpu=apple-a11 -o tmp/help-window.o src/help-window.cpp
c++ -c -std=c++17 -Isrc -Ires -I/usr/local/include -I/usr/local/include/FL/images -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_THREAD_SAFE -D_REENTRANT -DNDEBUG -O3 -flto -mcpu=apple-a11 -o tmp/hex-spinner.o src/hex-spinner.cpp
c++ -c -std=c++17 -Isrc -Ires -I/usr/local/include -I/usr/local/include/FL/images -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_THREAD_SAFE -D_REENTRANT -DNDEBUG -O3 -flto -mcpu=apple-a11 -o tmp/image-to-tiles.o src/image-to-tiles.cpp
In file included from src/image-to-tiles.cpp:20:
src/main-window.h:95:2: error: unknown type name 'Pixmap'
        Pixmap _icon_pixmap, _icon_mask;
        ^
src/image-to-tiles.cpp:271:23: error: cannot initialize a parameter of type 'const Fl_Widget *' with
      an rvalue of type 'Main_Window *'
                _error_dialog->show(this);
                                    ^~~~
src/modal-dialog.h:42:29: note: passing argument to parameter 'p' here
        void show(const Fl_Widget *p);
                                   ^
src/image-to-tiles.cpp:286:23: error: cannot initialize a parameter of type 'const Fl_Widget *' with
      an rvalue of type 'Main_Window *'
                _error_dialog->show(this);
                                    ^~~~
src/modal-dialog.h:42:29: note: passing argument to parameter 'p' here
        void show(const Fl_Widget *p);
                                   ^
src/image-to-tiles.cpp:336:24: error: cannot initialize a parameter of type 'const Fl_Widget *' with
      an rvalue of type 'Main_Window *'
                        _error_dialog->show(this);
                                            ^~~~
src/modal-dialog.h:42:29: note: passing argument to parameter 'p' here
        void show(const Fl_Widget *p);
                                   ^
src/image-to-tiles.cpp:404:24: error: cannot initialize a parameter of type 'const Fl_Widget *' with
      an rvalue of type 'Main_Window *'
                        _error_dialog->show(this);
                                            ^~~~
src/modal-dialog.h:42:29: note: passing argument to parameter 'p' here
        void show(const Fl_Widget *p);
                                   ^
src/image-to-tiles.cpp:417:24: error: cannot initialize a parameter of type 'const Fl_Widget *' with
      an rvalue of type 'Main_Window *'
                        _error_dialog->show(this);
                                            ^~~~
src/modal-dialog.h:42:29: note: passing argument to parameter 'p' here
        void show(const Fl_Widget *p);
                                   ^
src/image-to-tiles.cpp:453:23: error: cannot initialize a parameter of type 'const Fl_Widget *' with
      an rvalue of type 'Main_Window *'
                _error_dialog->show(this);
                                    ^~~~
src/modal-dialog.h:42:29: note: passing argument to parameter 'p' here
        void show(const Fl_Widget *p);
                                   ^
src/image-to-tiles.cpp:475:23: error: cannot initialize a parameter of type 'const Fl_Widget *' with
      an rvalue of type 'Main_Window *'
                _error_dialog->show(this);
                                    ^~~~
src/modal-dialog.h:42:29: note: passing argument to parameter 'p' here
        void show(const Fl_Widget *p);
                                   ^
src/image-to-tiles.cpp:494:24: error: cannot initialize a parameter of type 'const Fl_Widget *' with
      an rvalue of type 'Main_Window *'
                        _error_dialog->show(this);
                                            ^~~~
src/modal-dialog.h:42:29: note: passing argument to parameter 'p' here
        void show(const Fl_Widget *p);
                                   ^
src/image-to-tiles.cpp:512:23: error: cannot initialize a parameter of type 'const Fl_Widget *' with
      an rvalue of type 'Main_Window *'
                _error_dialog->show(this);
                                    ^~~~
src/modal-dialog.h:42:29: note: passing argument to parameter 'p' here
        void show(const Fl_Widget *p);
                                   ^
src/image-to-tiles.cpp:523:24: error: cannot initialize a parameter of type 'const Fl_Widget *' with
      an rvalue of type 'Main_Window *'
        _success_dialog->show(this);
                              ^~~~
src/modal-dialog.h:42:29: note: passing argument to parameter 'p' here
        void show(const Fl_Widget *p);
                                   ^
src/image-to-tiles.cpp:529:2: error: cannot initialize object parameter of type 'Fl_Widget' with an
      expression of type 'Main_Window'
        redraw();
        ^~~~~~
12 errors generated.

And i don't understand why the first files seems to compile but then nothing else :'(

I'm not a c / c++ dev, nor have i developed anything to run on desktop, sorry if i'm doing something stupid. I just really want to have it working on m1 :)

Import/export tilemaps in different formats

  • Import CSV
  • Export CSV
  • Import C
  • Export C
  • Import RMP

Tilemap formats are binary data, and I would recommend that projects use asm INCBIN, C incbin, or xxd -i to include tilemaps in their asm or C projects. However, some GBDK users are used to a different workflow. It would thus be convenient to export tilemaps as .c files:

/* Tilemap: 20 x 18, Plain */
unsigned char filename[] = {
  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
  0x0c, 0x0d, 0x0e, 0x0f
};

Ideally an existing .c file could be imported as well. This just has to parse enough C to handle /* comment */ unsigned char name[] = {1, 0x2, 03, ...};.

Also Telefang stores its tilemaps as .csv files, so as suggested in issue #15, these could be imported and exported. (Telefang's are Plain format, but any format would be exportable.)

Add support for rearranging tiles

I would like to be able to move around tiles in the tileset. When I move tiles, it should also update the tilemap wherever those tiles are currently used.

Version 3.3.1 plans

  • Image to Tiles palette generation supports starting at a nonzero index (issue #28)
  • Image to Tiles PLTE palettes support BMP tilesets
  • Remember and restore the maximized window state on Linux with Xlib
  • Shift Tilemap:
    image

Undo Functionality Bug

Placing a single tile (grouped selection or singular) does not flag the undo button or key shortcuts to be able to reversed.
Only after placing a second does this flag trigger, however the history of actions seems to still be recording, and once another tile is placed, the entire catalogue of placements is able to be undone.

x64 version

I'm trying to use Tilemap-studio on macOS 10.15, using wine. This worked fine on macOS 10.14 (thanks wine!), but now macOS can no longer run 32 bits binary using a 64 bits wine version.

The solution would be to run a x64 version of Tilemap-studio, which should work fine on wine and macOS.

Do you think an x64 version could be provided in Github's Releases?

(Also, thanks for all your work!)

Custom color chooser for Linux

Windows has its own, but Linux doesn't (it's not practical to dynamically use the GTK one if it's available, plus the GTK3 color chooser is bad anyway).

image

image

image

Auto-open "Image to Tiles" when given an image file to open

As the Help file describes, Tilemap Studio can open a file in various ways. It currently expects a tilemap file; the tileset file(s) are loaded separately. If it is given an image file (ending in .png or .bmp) it would be convenient to automatically open the Image to Tiles dialog with that file as the input.

Won't Compile Debian 10

tsukisuperior@debian:~/Code/tilemap-studio$ make
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/preferences.o src/preferences.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/option-dialogs.o src/option-dialogs.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/themes.o src/themes.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/tilemap.o src/tilemap.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/main-window.o src/main-window.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/utils.o src/utils.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/hex-spinner.o src/hex-spinner.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/tilemap-format.o src/tilemap-format.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/tile-selection.o src/tile-selection.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/help-window.o src/help-window.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/image.o src/image.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/image-to-tiles.o src/image-to-tiles.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/config.o src/config.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/tile-buttons.o src/tile-buttons.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/tile.o src/tile.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/main.o src/main.cpp
g++ -c -std=c++17 -Isrc -Ires -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16  -DNDEBUG -O3 -flto -march=native -o tmp/widgets.o src/widgets.cpp
src/widgets.cpp: In constructor ‘OS_Spinner::OS_Spinner(int, int, int, int, const char*)’:
src/widgets.cpp:195:2: error: ‘Fl_Input Fl_Spinner::input_’ is private within this context
  input_.box(OS_INPUT_THIN_DOWN_BOX);
  ^~~~~~
In file included from src/widgets.cpp:6:
/usr/include/FL/Fl_Spinner.H:57:12: note: declared private here
   Fl_Input input_;   // Input field for the value
            ^~~~~~
src/widgets.cpp:196:2: error: ‘Fl_Repeat_Button Fl_Spinner::up_button_’ is private within this context
  up_button_.labelfont(OS_FONT);
  ^~~~~~~~~~
In file included from src/widgets.cpp:6:
/usr/include/FL/Fl_Spinner.H:59:3: note: declared private here
   up_button_,  // Up button
   ^~~~~~~~~~
src/widgets.cpp:197:2: error: ‘Fl_Repeat_Button Fl_Spinner::up_button_’ is private within this context
  up_button_.labelsize(OS_FONT_SIZE);
  ^~~~~~~~~~
In file included from src/widgets.cpp:6:
/usr/include/FL/Fl_Spinner.H:59:3: note: declared private here
   up_button_,  // Up button
   ^~~~~~~~~~
src/widgets.cpp:198:2: error: ‘Fl_Repeat_Button Fl_Spinner::up_button_’ is private within this context
  up_button_.box(OS_MINI_BUTTON_UP_BOX);
  ^~~~~~~~~~
In file included from src/widgets.cpp:6:
/usr/include/FL/Fl_Spinner.H:59:3: note: declared private here
   up_button_,  // Up button
   ^~~~~~~~~~
src/widgets.cpp:199:2: error: ‘Fl_Repeat_Button Fl_Spinner::up_button_’ is private within this context
  up_button_.down_box(OS_MINI_DEPRESSED_DOWN_BOX);
  ^~~~~~~~~~
In file included from src/widgets.cpp:6:
/usr/include/FL/Fl_Spinner.H:59:3: note: declared private here
   up_button_,  // Up button
   ^~~~~~~~~~
src/widgets.cpp:200:2: error: ‘Fl_Repeat_Button Fl_Spinner::down_button_’ is private within this context
  down_button_.labelfont(OS_FONT);
  ^~~~~~~~~~~~
In file included from src/widgets.cpp:6:
/usr/include/FL/Fl_Spinner.H:60:3: note: declared private here
   down_button_;  // Down button
   ^~~~~~~~~~~~
src/widgets.cpp:201:2: error: ‘Fl_Repeat_Button Fl_Spinner::down_button_’ is private within this context
  down_button_.labelsize(OS_FONT_SIZE);
  ^~~~~~~~~~~~
In file included from src/widgets.cpp:6:
/usr/include/FL/Fl_Spinner.H:60:3: note: declared private here
   down_button_;  // Down button
   ^~~~~~~~~~~~
src/widgets.cpp:202:2: error: ‘Fl_Repeat_Button Fl_Spinner::down_button_’ is private within this context
  down_button_.box(OS_MINI_BUTTON_UP_BOX);
  ^~~~~~~~~~~~
In file included from src/widgets.cpp:6:
/usr/include/FL/Fl_Spinner.H:60:3: note: declared private here
   down_button_;  // Down button
   ^~~~~~~~~~~~
src/widgets.cpp:203:2: error: ‘Fl_Repeat_Button Fl_Spinner::down_button_’ is private within this context
  down_button_.down_box(OS_MINI_DEPRESSED_DOWN_BOX);
  ^~~~~~~~~~~~
In file included from src/widgets.cpp:6:
/usr/include/FL/Fl_Spinner.H:60:3: note: declared private here
   down_button_;  // Down button
   ^~~~~~~~~~~~
make: *** [Makefile:56: tmp/widgets.o] Error 1

Crash on launch in some system locales

When launching Tilemap Studio, either latest release or built from source, on a Windows 10 machine with non-Unicode system locale set to Japanese, the process appears for a couple seconds before abruptly terminating. Launching through Visual Studio produces the following error:
image
I switched locale back to en-US and everything worked again.

Proposal for indexed palette support

In the Image to Tiles dialog's Palette Format dropdown, add an Indexed choice. Then instead of outputting a grayscale tileset image and a separate palette file, it will output an indexed-color tileset image.

Edit: This has been implemented.

Proposal to implement Move/Swap Items menu option

Proposal to include a Move/Swap button on the 'Item' sub-menu of the pokémon party screen for easier item moving. The feature has been in the core games since gen 4 or 5 and is an important piece of QoL that is sorely missed.

User Captain Kennedy on the discord says, "Prism added a swap option for items in the party screen. Also works if one pokemon has an item but the other doesn't.", so maybe this piece of code could be ported or something, I don't know. I'm not a coding cybergenius like you guys.

Image to Tiles feedback

  • Default the Palette checkbox to on
  • Warn if a generated tilemap+tileset did not have a palette and has more colors that the platform format supports (e.g. 4 for GBC)
  • In the Saved dialog, mention both the .tilemap and .attrmap files if both exist
  • Save the last selected formats as defaults for the next run

Add support for saving a tileset

I would expect there to be a Tileset -> Save Tileset menu item, but that only exist for the Tilemap` menu. Here, you can see I've constructed a tileset out of two separate images. I want to save it as a single image, but I can't.

image

Shortcuts for Adding Modular Selections Directly to Clipboard

Ctrl+C directly copying either the selection or the full map (after Ctrl+A to select all) to the clipboard as a shortcut instead of having to go to the export print options button.
Although Ctrl+P + Ctrl+C is a quicker method of this, being able to directly add whatever selection is highlighted to the clipboard would be considerably useful

CSV support

It would be useful if Tilemap Studio could read tilemaps from CSV. For example, the Telefang disassembly currently stores tilemaps in a CSV format (raw). This may be useful for other projects, including non-console ones.

Examples of creating a GBA map?

I can see in the readme that this project appears to support creating maps for the Gameboy Advance. However, I can't find any documentation or examples about how to use a map created in Tilemap Studio from an actual GBA game codebase.

My best guess is that you would take the binary data saved and run xdd -i on it to turn it into a C array which could be included in the codebase, but that only handles the map; are you then on your own for converting the palette and tileset?

Feature Request: Snap-to-Grid for Selected Tiles

Requesting a snap-to-grid feature when click+dragging selected tiles.

I.e. tiles selected are a 4x4 tile region (like a tree block in pokecrystal), and user drags them to fill a space. The next region of 4x4 tiles on the grid are then overwritten with the selected tiles.

Ala similar to how PolishedMap works when using blocks, except the selected tiles area is modular.
This would be a fine addition to those who use TileMapStudio for mapping. :)

A custom map image has been provided for clarity:
image_2021-07-23_150033

Auto-Load Tileset

This is a fairly minor point in TODO.md, and could go in a 3.1.1 release along with today's updates.

Shift Tilemap Not Supported by Undo History

As the title says :P
This would be a great function to be supported for quick ease of use, rather than having to manually adjust things over and over if a comparison was needed to be made

Make it easier to create a pokeemerald Town Map

pokeemerald's main Town Map files are graphics/pokenav/region_map_map.bin (a Plain tilemap) and graphics/pokenav/region_map.png. (There's also a slightly different 4bpp graphics/interface/region_map.{bin,png,pal}, used for the Pokédex area map in src/pokedex_area_region_map.c.)

The problem is that region_map.png's palette starts at index 112 (hex $70), i.e. the first seven 16-color palettes are skipped:

image

If you mock up a new Town Map and run Image to Tiles on it, the generated PLTE will start at index 0.

image

A workaround for this is to open the PNG in Aseprite; switch to Sprite→Color Mode→RGB Color; click-and-drag to select the color swatches starting at 0 and Ctrl+C to copy them; click on index 112 and Ctrl+V to paste them there instead; similarly copy-and-paste some of the unused black swatches onto the ones starting at 0; then switch back to Indexed color mode and File→Save. This will remap the used indexes from 0 to 112.

(Note, one thing that makes this difficult to work around is that it's a plain tilemap. For a GBA 4bpp tilemap, you could just generate a JASC palette like pokeemerald's various .pal files; edit it in a text editor to shift the colors down; edit the tilemap in Tilemap Studio's Palettes tab to shift the palette indexes from 0 to 7; and edit the project to include a palette from the .pal file instead of from the PNG's indexed PLTE.)

There should be a better way to do this, ideally flexible enough to accommodate other weird palette requirements.

Feature Request: Open to Image to Tiles Function

Requesting a feature addition for an addition dialog somewhere in the process of opening an image to choose the Image to Tiles function.
An addition like this would improve the speed and navigation for someone who uses TMS for mapping, and would like to open a map already made. The function should be available for images ending in .PNG or .BMP, etc.

Image below for reference:
image_2021-07-23_150351

Layer Supporting

It is specifically about layer based background creation and also dynamic maps. So the rendering alone would be enough, then you could export each background separately as a bin file.

For example, to redesign a title screen to have a preview in the program. What would also be good, if you could turn the individual backgrounds (for visual representation) also the transparency up and down.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.