Skip to content
Margen67 edited this page Apr 22, 2021 · 38 revisions

Every tile on the current map is made up of TileElement. There can be multiple TileElements at each tile coordinate. By default, the elements per tile are ordered by their base height and are contiguous in memory. The last element at a coordinate has the last_tile flag set. See also Map Generation.

TileElement Structure

Each TileElement is made up of 8 bytes. There are 8 different types of tile element and they all have the same structure for the first 4 bytes:

Byte Offset Name Notes
0 Type 0bXXYY_YYRR where Y is the type (see table below), X is specific to type see below, R is the rotation
1 Flags See table below
2 Base Height The lowest point of the tile. Multiply by 8 to get real units.
3 Clearance Height The highest point of the tile. Multiply by 8 to get real units.

The other 4 bytes differ per type.

Type Table

Index Type
0 Surface
1 Path
2 Track
3 Scenery Small (Single Tile)
4 Entrance
5 Wall
6 Scenery Large (Multiple Tile)
7 Banner
8-15 Unused; Can cause odd issues if used.

Flags Table

Index Description
0 - 3 Collision Detection. Each bit represents a quarter of the tile 1 == top right, 8 == top left. If set vehicles that are off rails will collide.
4 Ghost (Tile drawn white to indicate where construction will go)
5 Broken (Used to indicate benches, bins, etc. are broken)
6 For tracks this indicates they cannot be removed.
7 Last Tile at coordinate.

Surface Elements (SurfaceElement struct)

Byte Offset Name Notes
0 Type 0bE?YY_YY?T where E is vertical edge style (extra bit), T is terrain style (extra bit)
4 Slope 0bEEES_SSSS where E is the vertical edge style, S is slope. The 4 least significant bits represent one corner each, and the most significant bit tells when a slope is very steep. For steep slopes, three of the least significant bits need to be set.
5 Terrain 0bTTTW_WWWW where T is terrain style, W is water height.
6 Grass Length 0 to 6 (0 = Mowed, 1 = Clear, 4 = Clumped, 6 = Heavily clumped)
7 Ownership 0bOOOO_FFFF where O is ownership flags and F are park fence direction flags.

Path Elements (PathElement struct)

Depending on if the path is a queue or not modifies the structure.

Byte Offset Name Notes
0 Type 0b??YY_YY2Q where Q is set if it is a queue, 2 is set when the path is 2+ sections wide (stops peeps from thinking its a junction)
4 Path Type 0bTTTT_QSDD where T is the type of path (0-15 from the paths available in the scenario), Q is set when it's the last path-element in a queue (the one with a banner), S is set if the path is sloped, and D stores the direction of the path. See Objects#footpath-item
5 Additions Path additions are scenery that can be placed on paths (benches, bins, lamps). 0bG?SS_AAAA where G is set for when the addition is a ghost, A is the type of addition (See rct_path_bit_scenery_entry), and S is the station number (rides can have up to 4 sets of stations).
6 Edges 0bCCCC_SSSS where C are bits indicating if the corners are connected and S are bits indicating whether the edges are connected.
7 Additions Status For each of the 4 edges there are 2 bits to indicate if seat occupied (1 for occupied) / bin fullness (0 for full, 3 for empty).
7 Ride Index Index of the ride that the queue is connected to 0xFF for nothing.

Track Elements (TrackElement struct)

The track element structure has two different forms depending on if its a maze or a regular ride.

Byte Offset Name Notes
0 Type 0bC?YY_YYRR where C is set if it is a chain lift
4 Type Each track element has a different track element type. See Track Data
5 Sequence 0bPPPP_SSSS where S is the sequence index for the track piece (A curve for example is made up of multiple tiles each tile increments the sequence number). P is an extra parameter, for example brakes store the speed in this parameter.
6 Colour 0bSSSS_LICC where C are bits indicating the colour scheme of the track piece. S stores seat rotation. I stores whether this piece is inverted (Multi-dim, Flying, Lay-down). L stores whether this piece contains a cable lift (Giga Coaster, not to be confused with chain lift).
5 - 6 Maze Entry
7 Ride Index Index of the ride that the track is connected to 0xFF for nothing.

Scenery Small (Single Tile) Elements (SmallSceneryElement struct)

Byte Offset Name Notes
0 Type 0bQQTT_TTRR where Q is the quadrant used by small tiles that take up a single quadrant.
1 Flags 0bFFFF_XXXX where X is ???
4 Type Index of the .DAT file that element represents. (Note 255 max small scenery). See Objects#small-scenery
5 Age Used to show ageing of flowers.
6 Colour 1 0b???C_CCCC where C is colour 1
7 Colour 2 0b???C_CCCC where C is colour 2

Entrance Elements (EntranceElement struct)

Byte Offset Name Notes
4 Type There are 3 different types of entrance: PARK, RIDE_ENTRANCE, RIDE_EXIT
5 Index 0bSSRR_IIII where I is the Index for which tile of the park entrance is shown. Park entrances are 3x1 middle tile is 0, left is 1, right is 2. R is the entrance or exit index for rides. S is the station number that the entrance/exit is connected to.
6 Path Type The type of path that is used in the park entrance.
7 Ride Index The ride index for the entrance/exit.

Wall Elements (WallElement struct)

Byte Offset Name Notes
0 Type 0bXXYY_YYRR Where XX stores the slope (0 = flat, 1 and 2 are sloped)
2 Flags 0bL?BG_SS?? S is top 2 bits of secondary colour.
4 Type Type of wall, used to index into the loaded .DAT files. See Objects#wall
5 Tertiary Colour Tertiary Colour
5 Banner Index If the wall has a banner.
6 Primary Colour 0bSSSP_PPPP where P is primary colour and S is secondary colour (Note top 2 bits are in flags).
7 Animation?? 0bLHHH_HLLL where L is ?? and H is ??.

Scenery Large (Multiple Tile) Elements (LargeSceneryElement struct)

Byte Offset Name Notes
0 Type 0bBBTT_TTRR B is for 2 highest bits of banner index (if used).
4 - 5 Type 0bIIII_IITT_TTTT_TTTT Type of large scenery, used to index into the loaded .DAT files. See Objects#large-scenery (Has space to go above the 128 maximum??). I is for Index of the multiple tile. I.e. 0 is for bottom left and counts up.
6 Primary Colour 0bBBBP_PPPP where P is primary colour and B is middle 3 bits of banner index (if used).
7 Secondary Colour 0bBBBS_SSSS where S is secondary colour and B is first 3 bits of banner index (if used).

Banner Elements (BannerElement struct)

Byte Offset Name Notes
4 Index Banner Index. Used to index into the gBanners array to get more information about the banner. See Objects#banner for more information.
5 Position Position on the path that the banner is used across.
6 Flags 0bXXXX_NNNN Where N is an edge that is able to be entered when set and no entry when unset.
7 Unused Not used.
Clone this wiki locally