1 /*****************************************************************************
2  * Copyright (c) 2014-2020 OpenRCT2 developers
3  *
4  * For a complete list of all authors, please refer to contributors.md
5  * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
6  *
7  * OpenRCT2 is licensed under the GNU General Public License version 3.
8  *****************************************************************************/
9 
10 #pragma once
11 
12 #include "../common.h"
13 #include "TileElement.h"
14 
15 enum
16 {
17     TERRAIN_GRASS,
18     TERRAIN_SAND,
19     TERRAIN_DIRT,
20     TERRAIN_ROCK,
21     TERRAIN_MARTIAN,
22     TERRAIN_CHECKERBOARD,
23     TERRAIN_GRASS_CLUMPS,
24     TERRAIN_ICE,
25     TERRAIN_GRID_RED,
26     TERRAIN_GRID_YELLOW,
27     TERRAIN_GRID_BLUE,
28     TERRAIN_GRID_GREEN,
29     TERRAIN_SAND_DARK,
30     TERRAIN_SAND_LIGHT,
31 
32     TERRAIN_RCT2_COUNT,
33 
34     TERRAIN_ROOF_BROWN = TERRAIN_RCT2_COUNT,
35     TERRAIN_ROOF_GREY,
36     TERRAIN_ROOF_IRON,
37     TERRAIN_ROOF_LOG,
38     TERRAIN_COUNT_REGULAR, // The amount of surface types the user can actually select - what follows are technical types
39     TERRAIN_CHECKERBOARD_INVERTED = TERRAIN_COUNT_REGULAR,
40     TERRAIN_UNDERGROUND_VIEW,
41 };
42 
43 enum
44 {
45     TERRAIN_EDGE_ROCK,
46     TERRAIN_EDGE_WOOD_RED,
47     TERRAIN_EDGE_WOOD_BLACK,
48     TERRAIN_EDGE_ICE,
49 
50     TERRAIN_EDGE_RCT2_COUNT,
51 
52     TERRAIN_EDGE_BRICK = TERRAIN_EDGE_RCT2_COUNT,
53     TERRAIN_EDGE_IRON,
54     TERRAIN_EDGE_GREY,
55     TERRAIN_EDGE_YELLOW,
56     TERRAIN_EDGE_RED,
57     TERRAIN_EDGE_PURPLE,
58     TERRAIN_EDGE_GREEN,
59     TERRAIN_EDGE_STONE_BROWN,
60     TERRAIN_EDGE_STONE_GREY,
61     TERRAIN_EDGE_SKYSCRAPER_A,
62     TERRAIN_EDGE_SKYSCRAPER_B,
63 
64     TERRAIN_EDGE_COUNT
65 };
66 
67 enum
68 {
69     GRASS_LENGTH_MOWED,
70     GRASS_LENGTH_CLEAR_0,
71     GRASS_LENGTH_CLEAR_1,
72     GRASS_LENGTH_CLEAR_2,
73     GRASS_LENGTH_CLUMPS_0,
74     GRASS_LENGTH_CLUMPS_1,
75     GRASS_LENGTH_CLUMPS_2
76 };
77 
78 enum
79 {
80     OWNERSHIP_UNOWNED = 0,
81     OWNERSHIP_CONSTRUCTION_RIGHTS_OWNED = (1 << 4),
82     OWNERSHIP_OWNED = (1 << 5),
83     OWNERSHIP_CONSTRUCTION_RIGHTS_AVAILABLE = (1 << 6),
84     OWNERSHIP_AVAILABLE = (1 << 7)
85 };
86 
87 enum
88 {
89     TILE_ELEMENT_SLOPE_FLAT = 0x00,
90     TILE_ELEMENT_SLOPE_ALL_CORNERS_UP = 0x0F,
91 
92     TILE_ELEMENT_SLOPE_N_CORNER_UP = (1 << 0),
93     TILE_ELEMENT_SLOPE_E_CORNER_UP = (1 << 1),
94     TILE_ELEMENT_SLOPE_S_CORNER_UP = (1 << 2),
95     TILE_ELEMENT_SLOPE_W_CORNER_UP = (1 << 3),
96     TILE_ELEMENT_SLOPE_DOUBLE_HEIGHT = (1 << 4),
97 
98     TILE_ELEMENT_SLOPE_W_CORNER_DN = TILE_ELEMENT_SLOPE_ALL_CORNERS_UP & ~TILE_ELEMENT_SLOPE_W_CORNER_UP,
99     TILE_ELEMENT_SLOPE_S_CORNER_DN = TILE_ELEMENT_SLOPE_ALL_CORNERS_UP & ~TILE_ELEMENT_SLOPE_S_CORNER_UP,
100     TILE_ELEMENT_SLOPE_E_CORNER_DN = TILE_ELEMENT_SLOPE_ALL_CORNERS_UP & ~TILE_ELEMENT_SLOPE_E_CORNER_UP,
101     TILE_ELEMENT_SLOPE_N_CORNER_DN = TILE_ELEMENT_SLOPE_ALL_CORNERS_UP & ~TILE_ELEMENT_SLOPE_N_CORNER_UP,
102 
103     TILE_ELEMENT_SLOPE_NE_SIDE_UP = TILE_ELEMENT_SLOPE_N_CORNER_UP | TILE_ELEMENT_SLOPE_E_CORNER_UP,
104     TILE_ELEMENT_SLOPE_SE_SIDE_UP = TILE_ELEMENT_SLOPE_E_CORNER_UP | TILE_ELEMENT_SLOPE_S_CORNER_UP,
105     TILE_ELEMENT_SLOPE_NW_SIDE_UP = TILE_ELEMENT_SLOPE_N_CORNER_UP | TILE_ELEMENT_SLOPE_W_CORNER_UP,
106     TILE_ELEMENT_SLOPE_SW_SIDE_UP = TILE_ELEMENT_SLOPE_S_CORNER_UP | TILE_ELEMENT_SLOPE_W_CORNER_UP,
107 
108     TILE_ELEMENT_SLOPE_W_E_VALLEY = TILE_ELEMENT_SLOPE_E_CORNER_UP | TILE_ELEMENT_SLOPE_W_CORNER_UP,
109     TILE_ELEMENT_SLOPE_N_S_VALLEY = TILE_ELEMENT_SLOPE_N_CORNER_UP | TILE_ELEMENT_SLOPE_S_CORNER_UP
110 };
111 
112 // Surface
113 #define TILE_ELEMENT_SURFACE_DIAGONAL_FLAG 0x10       // in TileElement.properties.surface.slope
114 #define TILE_ELEMENT_SURFACE_RAISED_CORNERS_MASK 0x0F // in TileElement.properties.surface.slope
115 #define TILE_ELEMENT_SURFACE_SLOPE_MASK                                                                                        \
116     (TILE_ELEMENT_SURFACE_DIAGONAL_FLAG | TILE_ELEMENT_SURFACE_RAISED_CORNERS_MASK) // in TileElement.properties.surface.slope
117 
118 #define TILE_ELEMENT_SURFACE_OWNERSHIP_MASK 0xF0
119 #define TILE_ELEMENT_SURFACE_PARK_FENCE_MASK 0x0F
120