Skip to content

Tilemap editor feature #977

@dacap

Description

@dacap

UI design and main goals of the tilemap feature:

  • Everything related to tilemaps must be hidden until we create a new tilemap layer using a new Layer > New Tilemap Layer menu option (in this way we avoid bloating the UI with tilemap stuff)
  • As tilemaps will be a kind of layer, we'll be able to have several tilemaps in one sprite
  • One tilemap layer will have its own tileset, a tileset will have its own tile specs (grid size, etc.), but the tileset could be linked from an external file (with possibilities to embed the external tileset content inside the tilemap optionally)
  • Each cel in a tilemap layer will be a new kind of image where each pixels reference a tile:
    • Each pixel in the tilemap image will be a 32-bit value with some bits to reference the tile in the tileset and other bits to specify flip and rotation
  • When we create a new tilemap layer, it should behave almost exactly like a regular layer, and tiles should be handled transparently/automatically by default (so even if an user creates a new tilemap layer by mistake, she/he shouldn't see a different behavior from a default layer)
  • When the active layer is a tilemap layer, a new set of buttons should be displayed in the color bar, those buttons should allow:
    • Changing between the palette view <-> tiles view (keyboard shortcut: Shift+Tab)
    • Changing between the automatic mode of handling tiles
    • Do some special operations to tiles, which should match future operations with the palette too. E.g.
  • When a sprite contains tilemap layers, the sprite properties dialog should show a section of "tilesets" #3875
    • We should be able to reorder tilesets
    • We should be able to add new tilesets
  • Possibility to link external tilesets
    • Persistence (.aseprite information)
    • Auto-sync tileset from external file when the original is modified
    • UI to select external tilesets
    • Special import/external/linked tileset options, e.g. from grids, from frames, from layers, from "Import Sprite Sheet", etc.
  • Drawing tile pixels with three modes: Manual (modify the tiles, don't create new tiles), Auto (create/remove existent tiles automatically), Stack (add new tiles when they are modified, keep the existent tiles unmodified)
  • Drawing tools with tiles
    • Paint with tiles (still buggy)
    • Eyedropper for tiles
    • Selecting tools with tiles
    • Fill, Stroke, and Clear commands for tiles
    • Copy and paste tiles

Special Features

Possible advanced features:

  • Flip/Rotation per tile in tilemap layer Implement xflip/yflip/rotation flags in tilemap layers #3603
  • Overlapped tiles (isometric tiles etc., hexagonal tiles, etc.)
  • Palette shifting (e.g. some bits to shift the colors of a tile in the color palette)
  • Metatiles (hierarchy of tiles, where the tiles of one tileset is another tilemap with smaller tiles)

Persistence

  • Create a new chunk in .aseprite format to save tilesets
  • Each tileset should contain specs (tile width/height, type of tiles, etc.) and source of tiles (e.g. for linked tilesets between files).
  • Save/load layer tilemaps and their cels
  • Save only differences between cels in tilemap layers
  • Save (and load?) TMX files
  • Convert grid settings into tileset specs and save then in the .aseprite file if it's possible (Save grid parameters to .ase files #688), this might enable isometric grids too (Isometric object creation tools #720)

Integration

  • Check the integration with Tiled mode

Ideas, issues to review, and old ideas about the implementation

Review

UI Design

Here I'll be updating this issue to talk about the design of this feature. Some questions to solve:

  • How we create a new tilemap? (File > New > Advanced > a new tab for tilemaps appears? or we start creating the sprite sheet?)
  • Should be the tilemap a switcheable mode like "Tiled Mode"? I don't think so, we could be creating several tilemaps from the same tileset/sprite sheet. So it looks like a tilemap is just a way to say "we are going to create a map feeding tiles from these sprite sheets"

The general idea is this:

  • the color bar should be transformed into a tileset where we can pick tiles
  • the sprite editor is the tilemap editor where we can put/draw/pick(eyedropper) tiles

Internal tasks

Tasks to do (this list is not complete):

  • create a new kind of image that can reference different tiles/doc::Image on each area and with different rotation/flipping. (doc::TiledImage?)
  • create a generic iterator for any kind of image (current doc::Image, and this new tiled image)
  • different parts of code will use the doc::Image iterators (e.g. file format encoders/decoders) and other areas should use this generic iterator (e.g. sprite Editor widget).
  • get tileset from a tilemap (from this thread)

An alternative implementation would be to edit images as a regular image, and after each "tool loop", we update/sync the tilemap/tileset depending on these modifications. Pros: easier to implement (there is no new kind of image), Cons: it will use a lot more memory (and it couldn't be an option for big maps).

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureFeature request, or something should be improvedhigh priorityrefactor complexityThis issue needs some refactor / modifying several files / rethinking some part of the architecturetilemap

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions