Tile Zone Guide

A tile zone is an area that overrides movement and audio properties for players standing on specific tiles within its boundaries. Unlike platforms or walls, a tile zone is invisible — it just adjusts what happens when the player steps on a tile inside it.

All override fields are optional. Leave a field out (or set it to -1) and that property is left exactly as it normally would be. You only need to specify the things you actually want to change.

Basic Syntax
tile_zone minx=value; maxx=value; miny=value; maxy=value; minz=value; maxz=value;
tile_zone minx=0; maxx=20; miny=0; maxy=20; minz=0; maxz=0;

That example does nothing on its own because no overrides are specified — it just defines a region. Add one or more of the optional fields below to make it do something.

Parameters

surface (optional)
The tile type this zone applies to. If left out or set to an empty string, the zone matches every tile within its boundaries regardless of type. If specified, the zone only activates when the player is on that specific tile.
tile_zone minx=0; maxx=20; miny=0; maxy=20; minz=0; maxz=0; surface=grass;

pitch (optional)
Overrides the pitch of step sounds played within this zone. Values are percentages: 100 is normal, 150 is 50% faster, 50 is half speed. Useful for making a tile sound heavier or lighter.
tile_zone minx=0; maxx=20; miny=0; maxy=20; minz=0; maxz=0; pitch=80;

speed (optional)
Overrides how fast the player moves while stepping on tiles in this zone. The value is in milliseconds between steps — higher values are slower, lower values are faster. Normal walking speed is 240ms. Must be greater than 0.
tile_zone minx=0; maxx=20; miny=0; maxy=20; minz=0; maxz=0; speed=400;

land_damage (optional)
Overrides the amount of damage taken when the player lands on a tile in this zone after a normal fall. Does nothing if the player lands softly without enough fall distance.
tile_zone minx=0; maxx=20; miny=0; maxy=20; minz=0; maxz=0; land_damage=25;

hardland_damage (optional)
Like land_damage, but applies a damage multiplier for very hard falls. The final damage is hardland_damage multiplied by the fall distance. Use this for spike pits or brutal terrain.
tile_zone minx=0; maxx=20; miny=0; maxy=20; minz=0; maxz=0; hardland_damage=10;

jump_height (optional)
Overrides how high the player can jump while in this zone. The default jump height varies by map settings, but is usually 5.
tile_zone minx=0; maxx=20; miny=0; maxy=20; minz=0; maxz=0; jump_height=3;

Combining Overrides
You can combine any number of overrides in one tile_zone line.
tile_zone minx=10; maxx=30; miny=10; maxy=30; minz=0; maxz=5; surface=ice; speed=150; pitch=120;
That example makes ice tiles in the given area feel slippery (faster movement) and sound slightly higher-pitched.

Zone Layering
Multiple tile zones can overlap the same area. When they do, later-defined zones win on any property they both override. This means you can define a large base zone and then place a smaller, more specific zone inside it to override only part of the behavior.

tile_zone minx=0; maxx=50; miny=0; maxy=50; minz=0; maxz=0; speed=400;
tile_zone minx=20; maxx=30; miny=20; maxy=30; minz=0; maxz=0; speed=600;

In the above example, the whole area has slowed movement (400ms), but the smaller inner square is even slower (600ms).

Surface Filtering
If you specify a surface, only that tile type triggers the zone's overrides. A player standing on a different tile type inside the zone boundaries will not be affected.

tile_zone minx=0; maxx=50; miny=0; maxy=50; minz=0; maxz=10; surface=ice; speed=150;
tile_zone minx=0; maxx=50; miny=0; maxy=50; minz=0; maxz=10; surface=mud; speed=500;

Here, ice tiles make the player faster and mud tiles make them slower, even though both zones cover the same area. Any other tile type in that area is unaffected.

Resetting After Leaving
When the player leaves a tile zone (steps onto a tile not covered by any zone), their movement speed automatically resets to the map's normal values. You do not need to define a "reset" zone.

2D Maps
For 2D maps, use minz=0; maxz=0; as usual, or simply omit them (they default to 0).
