Skip to content

Tileset Format Reference

Spooooky edited this page Aug 23, 2024 · 12 revisions

Tileset Format

Vanilla tilesets are comprised of a series of "Masks": descriptions of the configuration of surrounding tiles that are used to pick the texture for a tile (Here 🔗 is a visual guide for the mask attribute, made by tobyaaa).

A tileset xml node is structured as follows:

<Tileset id="X" path="path/from/(Gameplay/tilesets)">
   <set mask="x0x-111-x1x" tiles="0,0"/>
   <set mask="padding" tiles="0,1"/>
   <set mask="center" tiles="1,0;1,1"/>
</Tileset>

Let's break down each line:


<Tileset id="X" path="path/from/(Gameplay/tilesets)">

The beginning of the Tileset definition, where:

id is the character used to represent this tile in the map binary path is the path to the tileset image relative to Gameplay/tilesets


<set mask="x0x-111-x1x" tiles="0,0"/>

This is standard mask definition for a tileset, and will be used for the outer-most tiles. The mask attribute describes a 3x3 square of tiles with the center tile representing the one currently being analyzed.
Characters accepted in vanilla masks are:
1 - Presence of a tile
0 - Absense of a tile
x - Any


<set mask="padding" tiles="0,1"/>
<set mask="center" tiles="1,0;1,1"/>

These define the inner layers of the tileset, with padding describing one layer in from the outer tiles, and center describing everything else.

Everest Features

Everest adds a few new features to custom tilesets as described below from this pull request 🔗.

Instead of just padding and center inner layers, any number of fill layers can be defined:

<set mask="fill0" tiles=""/>
<set mask="fill1" tiles=""/>
...

Custom mask scan width/height can be set with attributes on the Tileset node:

<Tileset scanWidth="5" scanHeight="5">

The y filter can be used in a mask to mean "any tile that isn't this one".
Custom filters can also be defined to be used in masks:

<define id="a" filter="4,5" ignore="true"/>

where:

id is the character to use in the mask.
filter is the tileset ids to add to the filter.
ignore determines whether the ids are whitelisted or blacklisted.

  • (from testing it seems the y mask is currently a bit bugged and if you want it in you'll have to define it and also use an anti y mask, since you can't replace an already defined tile with a custom mask defined tile to my testing, try pasting this in and in the tile masks you want the y mask tiles to go over put z in)
  <define id="y" filter="*" ignore="false"/>
  <define id="A" filter="*" ignore="true"/>

AnimatedTiles

AnimatedTiles are textures that can be added to a tileset mask, and are displayed when that mask is used. They are used in vanilla for the wavy grass strands on the Grass and DeadGrass tilesets.

To add AnimatedTiles to one of your map's tilesets, a similar process must be followed for setup:

  • Retrieve the AnimatedTiles.xml file from Content/Graphics/ in your Celeste folder.
  • Copy the AnimatedTiles.xml into the same folder you put your other tileset xmls.
  • In the map editor, copy the path to your AnimatedTiles.xml into the "Animated Tiles" field in the Map Metadata window.

AnimatedTiles can be added to the xml as follows:

<sprite name="sprite_name" path="path/from/Gameplay/folder" delay="0.2" posX="0" posY="-8" origX="4" origY="4"/>

where:

delay is the animation speed.
posX and posY are the position relative to the tile.
origX and origY are the origin of the sprite.

To add an AnimatedTile to a tileset mask, add the name of the AnimatedTile to the sprites attribute of the mask in your (Fore/Back)groundTiles.xml:

<set mask="x0x-111-x1x" tiles="0,0" sprites="sprite_name"/> 

Multiple AnimatedTiles can be added to a mask, separated by commas, and will be chosen from randomly.

Note

AnimatedTiles are only displayed for terrain tiles by default, and will not show up on most tile entities (DashBlock, CoverupWall, etc...)

Clone this wiki locally