Browse Source

Add autotile tutorial

Modify tutorials > 2D > using tilemaps to include section on
autotiles, covering different bitmask modes and scripted binding
Peter Chaplin 5 years ago
parent
commit
762ad4dc94
1 changed files with 120 additions and 3 deletions
  1. 120 3
      tutorials/2d/using_tilemaps.rst

+ 120 - 3
tutorials/2d/using_tilemaps.rst

@@ -1,7 +1,7 @@
 .. _doc_using_tilemaps:
 .. _doc_using_tilemaps:
 
 
 Using tilemaps
 Using tilemaps
-~~~~~~~~~~~~~~
+==============
 
 
 Introduction
 Introduction
 ------------
 ------------
@@ -127,8 +127,10 @@ Atlas tiles
 -----------
 -----------
 
 
 Rather than adding individual tiles one at a time, you can define a group of
 Rather than adding individual tiles one at a time, you can define a group of
-tiles all at once using an atlas. Click "New Atlas" and drag to select the
-entire tile sheet.
+tiles all at once using an atlas. This also allows you to randomly generate
+tiles from the group.
+
+Click "New Atlas" and drag to select the entire tile sheet.
 
 
 .. image:: img/tileset_atlas.png
 .. image:: img/tileset_atlas.png
 
 
@@ -150,6 +152,121 @@ tiles it contains:
 In addition to saving time when defining the tiles, this can help by grouping
 In addition to saving time when defining the tiles, this can help by grouping
 similar tiles together when you're working with a large number of tiles.
 similar tiles together when you're working with a large number of tiles.
 
 
+Random tile priorities
+~~~~~~~~~~~~~~~~~~~~~~
+
+When drawing with atlas tiles, enabling the "Use priority" option causes tiles
+to be selected at random. By default, each tile in the tileset has an equal
+likelihood of occurring. You can change the likelihood by setting different
+priorities for each tile. For example, a tile with priority 2 is twice as
+likely to be selected as a tile with priority 1, and a tile with priority 3 is
+50% more likely to be selected than a tile with priority 2.
+
+Autotiles
+---------
+
+Autotiles allow you to define a group of tiles, then add rules to control which
+tile gets used for drawing based on the content of adjacent cells.
+
+Click "New Autotile" and drag to select the tiles you wish to use. You can add
+collisions, occlusion, navigation shapes, tile priorties, and select an icon
+tile in the same manner as for atlas tiles.
+
+Tile selection is controlled by bitmasks. Bitmasks can be added by clicking
+"Bitmask", then clicking parts of the tiles to add or remove bits in the mask.
+Left-clicking an area of the tile adds a bit, right-click removes "off",
+and shift-left-click sets an "ignore" bit.
+
+Whenever Godot updates a cell using an autotile, it first creates a pattern
+based on which adjacent cells are already set. Then, it searches the autotile
+for a single tile with a bitmask matching the created pattern. If no matching
+bitmask is found, the "icon" tile will be used instead. If more than one
+matching bitmask is found, one of them will be selected randomly, using the
+tile priorities.
+
+The rules for matching a bitmask to a pattern depend on the tileset's autotile
+bitmask mode. This can be set in the "Inspector" tab, under the "Selected Tile"
+heading. Allowed values are "2x2", "3x3 (minimal)", and "3x3".
+
+All "on" and "off" bits must be satisfied for a bitmask to match, but "ignore"
+bits are ignored.
+
+2x2
+~~~
+
+In 2x2 mode, each bitmask contains four bits, one for each corner.
+
+Where a bit is "on", all cells connected to that corner must be filled using
+the same autotile, in order for the bitmask to match.
+For example, if the top-left bit is set, the cell directly above,
+directly left, and diagonally above-left must be filled.
+
+Where a bit is "off", at least one cell connected to that corner must not be
+set using the same autotile.
+
+At least one bit must be set for the tile to be used, so a total of 15 tiles
+would be needed to provide exactly one tile for each arrangement that this mode
+can test for.
+
+2x2 mode can only match cells that are part of a 2-by-2 block - cells with no
+neighbors and lines only one cell wide are not supported.
+
+3x3 (minimal)
+~~~~~~~~~~~~~
+
+In 3x3 (minimal) mode, each bitmask contains 9 bits (4 corners, 4 edges,
+1 center).
+
+The 4 corner bits work the same as in 2x2 mode.
+
+When an edge bit is "on", the cell which shares that edge must be filled.
+When an edge bit is "off", the cell which shares that edge must be empty.
+
+The center bit should be "on" for any tile you wish to use.
+
+Note that in this mode, it makes no sense for a corner bit to be "on" when
+either edge bit adjacent to it is not "on".
+
+A total of 47 tiles would be needed to provide exactly one bitmask for each
+arrangement that this mode can test for.
+
+
+3x3
+~~~
+
+In 3x3 mode, each bitmaks contains 9 bits (4 corners, 4 edges, 1 center)
+
+Each bit checks a single adjacent cell. Corner bits only check diagonally
+adjacent cells. The center bit should be "on" for any tile you wish to use.
+
+A total of 256 tiles would be needed to provide exactly one bitmask for each
+arrangement that this mode can test for.
+
+
+Disabling autotile
+~~~~~~~~~~~~~~~~~~
+
+When using an autotile, it is possible to turn of the autotile behaviour and
+select tiles manually, by clicking "Disable Autotile" at the top of the tile
+selection window.
+
+Autotile binding
+~~~~~~~~~~~~~~~~
+
+By default, autotile only checks for adjacent cells filled using the same
+autotile. This behaviour can be overridden in order to have autotiles bind to
+each other, or even bind to empty cells. At present, this can only be done
+through scripting. You will need to add a script to your tileset, and define
+a function named "_is_tile_bound(drawn_id, neighbor_id)". This function will
+be called for each adjacent cell that does not contain the same autotile, and
+should return true if you want the drawn cell to "bind" to the neighbor cell.
+You can find the id of an autotile using "find_tile_by_name(name)", empty cells
+are given an id of -1.
+
+Note that to use this in the editor, the script should start with a "tool"
+declaration, and you may need to close and reload the scene for these changes
+to take effect.
+
 Tips and tricks
 Tips and tricks
 ---------------
 ---------------