-
Notifications
You must be signed in to change notification settings - Fork 15
Terrain Surface
Contents
The first image is the (43x32) preview image of this surface type, with the edges faded.
Then there are 6 images (64x63) that are used for terrain smoothing. These are basically crops of the repeated tile for 6 different slopes:
- Slope facing left
- Slope facing front left
- Flat
- Slope facing the camera
- Slopo facing front right
- Slop facing right
See this image for the portion that is cropped:
Next are the main surface images. They come in what I'm going to call "image sets", where each set is a group of 19 images that show the 19 possible slopes. Each set is one of the visual variations for this surface object.
For each set, the images are in this order:
- All flat
- L up
- F up
- L and F up
- R up
- L and R up (the crease runs from F to B, so the sides are "folded up")
- R and F up
- B down
- B up
- L and B up
- F and B up (or L and R down) (same shape as L and R up, rotated 90degs, so the crease runs from L to R)
- R down
- B and R up
- F down
- L down
- B up and F down
- F up and B down (presumably, since this is just blank)
- L up and R down
- L down and R up
There are 3 sets as default. First is the normal surface. Next is the surface when gridlines are enabled
(basically the edges are darkened), and last is the surface when underground view is enabled. For some surfaces,
they use more than these 3 default sets. This is what the special
array is for. Each entry gives the game an
index for the set to use instead of the default, when certain condition(s) are true.
The checkerboard surface, for example, is not symmetrical, so it repeats all three default sets at a 90deg rotation, and tells the game to use these sets when the view is rotated 90 degrees.
Additionally, there are 3 sizes of surface sprites. A quarter size, a half size, and the full size. For reference, the flat tiles for these sizes are 16x7, 32x15, and 64x31 pixels, respectively. At the moment, the locations of these smaller sizes seems to be hardcoded at the start of g1.dat.
- colour :
enum (of string)
-
The color of the surface, if it uses remappable colors in the images. This is only used for the colored grid surface styles. (i.e., there's only one group of images for the 4 colored grid styles, and they use this field to specify what color those images are remapped to)
Must be one of:
"black"
,"grey"
,"white"
,"dark_purple"
,"light_purple"
,"bright_purple"
,"dark_blue"
,"light_blue"
,"icy_blue"
,"teal"
,"aquamarine"
,"saturated_green"
,"dark_green"
,"moss_green"
,"bright_green"
,"olive_green"
,"dark_olive_green"
,"bright_yellow"
,"yellow"
,"dark_yellow"
,"light_orange"
,"dark_orange"
,"light_brown"
,"saturated_brown"
,"dark_brown"
,"salmon_pink"
,"bordeaux_red"
,"saturated_red"
,"bright_red"
,"dark_pink"
,"bright_pink"
,"light_pink"
, - rotations :
integer
- Unused field.
- price :
integer
- The cost of building this surface style.
- smoothWithSelf :
boolean
- If true, when
Landscape Smoothing
is enabled, smooth this surface with connected surfaces of the same style. This only affects surfaces that are connected with different slopes. - smoothWithOther :
boolean
- If true, when
Landscape Smoothing
is enabled, smooth this surface with connected surfaces of other styles. - canGrow :
boolean
- If true, this surface acts as grass, and "grows" over time, and can be mowed by staff. See
length
down below for more details. - default :
object
-
No surface objects currently use this, but this can be used to specify the index of the default normal, gridded, and underground sets for this surface, if they aren't in positions 0, 1, and 2.
- normal :
integer
- The index of the regular version of this surface. Normally 0
- grid :
integer
- The index of the grid version of this surface. Normally 1
- underground :
integer
- The index of the underground version of this surface. Normally 2
- normal :
- special :
array
-
This is a list of special sets that should be used instead of the default sets, with condition(s) that tell the game when to use a special set instead of the default.
- items :
object
-
- index :
integer
- This is the index of this special set, in the list of all surface sets for this surface object.
- length :
integer
- If this is set, this image set will be used when the grass length is at this value. From 0 to 7. The
grass length starts at 1. If
canGrow
is true, it will slowly increase over time, and when it is above 1, staff will mow it (if set to) down to a length of 0. - rotation :
integer
- If this is set, this image set will be used when the view direction is at this value, from 0 to 3.
- variation :
integer
- This is a value from 0 to 3 that changes for each tile position. Can be used for a pseudo-random choice of image set.
- grid :
boolean
- This is true if this image set should be used when gridlines are enabled.
- underground :
boolean
- This is true if this image set should be used when the underground view is enabled.
- index :
- items :
rct2.terrain_surface.dirt
(Dirt)
"properties": {
"price": 80,
"smoothWithSelf": true,
"smoothWithOther": true
}
rct2.terrain_surface.chequerboard
(Checkerboard)
"properties": {
"price": 100,
"special": [
{ "rotation": 1, "index": 3 },
{ "rotation": 1, "grid": true, "index": 4 },
{ "rotation": 1, "underground": true, "index": 5 },
{ "rotation": 3, "index": 3 },
{ "rotation": 3, "grid": true, "index": 4 },
{ "rotation": 3, "underground": true, "index": 5 }
]
}
rct2.terrain_surface.grass
(Grass)
"properties": {
"price": 300,
"smoothWithSelf": true,
"smoothWithOther": true,
"canGrow": true,
"special": [
{ "length": 0, "rotation": 0, "index": 5 },
{ "length": 0, "rotation": 2, "index": 5 },
{ "length": 0, "rotation": 0, "grid": true, "index": 6 },
{ "length": 0, "rotation": 2, "grid": true, "index": 6 },
{ "length": 0, "rotation": 1, "index": 3 },
{ "length": 0, "rotation": 3, "index": 3 },
{ "length": 0, "rotation": 1, "grid": true, "index": 4 },
{ "length": 0, "rotation": 3, "grid": true, "index": 4 },
{ "length": 4, "variation": 0, "index": 7 },
{ "length": 4, "variation": 0, "grid": true, "index": 8 },
{ "length": 4, "variation": 1, "index": 9 },
{ "length": 4, "variation": 1, "grid": true, "index": 10 },
{ "length": 4, "variation": 2, "index": 11 },
{ "length": 4, "variation": 2, "grid": true, "index": 12 },
{ "length": 4, "variation": 3, "index": 13 },
{ "length": 4, "variation": 3, "grid": true, "index": 14 },
{ "length": 5, "variation": 0, "index": 7 },
{ "length": 5, "variation": 0, "grid": true, "index": 8 },
{ "length": 5, "variation": 1, "index": 9 },
{ "length": 5, "variation": 1, "grid": true, "index": 10 },
{ "length": 5, "variation": 2, "index": 11 },
{ "length": 5, "variation": 2, "grid": true, "index": 12 },
{ "length": 5, "variation": 3, "index": 13 },
{ "length": 5, "variation": 3, "grid": true, "index": 14 },
{ "length": 6, "variation": 0, "index": 15 },
{ "length": 6, "variation": 0, "grid": true, "index": 16 },
{ "length": 6, "variation": 1, "index": 17 },
{ "length": 6, "variation": 1, "grid": true, "index": 18 },
{ "length": 6, "variation": 2, "index": 19 },
{ "length": 6, "variation": 2, "grid": true, "index": 20 },
{ "length": 6, "variation": 3, "index": 21 },
{ "length": 6, "variation": 3, "grid": true, "index": 22 }
]
}