...
```ini
Name=mytileset
Type=SET
Version=V1.0
Interior=1 ; 1 = interior, 0 = exterior
HasHeightTransition=0 ; 1 = supports height transitions
EnvMap=mytileset_refl
Transition=1
DisplayName=-1
UnlocalizedName=My Tileset
Border=Wall ; terrain at area edges — MUST be shared if using multiple families
Default=Wall ; default terrain for unpainted areas
Floor=Floor ; default floor terrain
SelectorHeight=5 ; optional — not present in all tilesets
```
### [TERRAIN TYPES]
Defines terrain names for tile corners. Zero-indexed, `Count=` must match. Names are arbitrary — chosen by the tileset author. With multiple families, non-border terrains get a family suffix (e.g., `FloorPlain`, `FloorPainted`).
```ini
[TERRAIN TYPES]
Count=5
[TERRAIN0]
Name=Wall
UnlocalizedName=Wall
```Common types: Wall, Floor, Pit, Subfloor, Platform. With families, non-wall terrains get a suffix: `FloorStone`, `FloorWood`.
### [CROSSER TYPES]
Defines crosser names for tile edges. Zero-indexed, `Count=` must match. Names are arbitrary. With multiple families, crossers get family suffixes.
```ini
[CROSSER TYPES]
Count=4
[CROSSER0]
Name=Corridor
UnlocalizedName=Corridor
```Common types: Corridor, Doorway, Fence, Bridge. With families, crossers get suffixes.
### [PRIMARY RULES] / [SECONDARY RULES]
Usually Not used in practice for custom content. Difficult to implement and generally should be ignored. Set `Count=0`.
### [TILES]
```ini
[TILES]
Count=77
[TILE0]
Model=mytileset_a01_01
WalkMesh=msb01
TopLeft=Wall ; terrain type (must match a TERRAIN name)
TopLeftHeight=0
TopRight=Wall
TopRightHeight=0
BottomLeft=Wall
BottomLeftHeight=0
BottomRight=Wall
BottomRightHeight=0
Top= ; crosser type (empty = none, must match a CROSSER name)
Right=
Bottom=
Left=
MainLight1=0
MainLight2=0
SourceLight1=0
SourceLight2=0
AnimLoop1=0
AnimLoop2=0
AnimLoop3=0
Doors=0
Sounds=0
PathNode=P
Orientation=0
ImageMap2D=mi_mytileset_a01_01 ; always "mi_" + model name
```
Optional Visibility properties:
- `VisibilityNode`, `VisibilityOrientation` , — present on most tiles
- `DoorVisibilityNode`, `DoorVisibilityOrientation` — required when `Doors > 0`. **If a tile has doors but is missing these fields, flag it to the user** — absent door visibility nodes can cause visual culling issues in-game.
### Door Sub-Sections
If `Doors=N` (N > 0), exactly N sections follow named `[TILExxDOORn]`:
```ini
[TILE5DOOR0]
Type=6003 ; 6003 = standard, 6013 = double door
X=0.00
Y=5.00
Z=0.00
Orientation=0.00
```
Door header index must match parent tile index. The `Type` value is an index into the game's `doortypes.2da` file, which defines door models and properties.
### [GROUPS]
```ini
[GROUPS]
Count=3
...