From 7002720f24d369e17494a131bfcb6e2097e8f4b5 Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Wed, 17 Sep 2014 23:42:18 +0100 Subject: [PATCH] add and fix terrain get/set functions --- src/map.c | 20 ++++++++++++++++++-- src/map.h | 4 ++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/map.c b/src/map.c index f654935c4a..3db145ec96 100644 --- a/src/map.c +++ b/src/map.c @@ -25,6 +25,22 @@ static void tiles_init(); +int map_element_get_terrain(rct_map_element *element) +{ + int terrain = (element->properties.surface.terrain >> 5) & 7; + if (element->type & 1) + terrain |= (1 << 3); + return terrain; +} + +int map_element_get_terrain_edge(rct_map_element *element) +{ + int terrain_edge = (element->properties.surface.slope >> 5) & 7; + if (element->type & 128) + terrain_edge |= (1 << 3); + return terrain_edge; +} + void map_element_set_terrain(rct_map_element *element, int terrain) { // Bit 3 for terrain is stored in element.type bit 0 @@ -40,7 +56,7 @@ void map_element_set_terrain(rct_map_element *element, int terrain) void map_element_set_terrain_edge(rct_map_element *element, int terrain) { - // Bit 3 for terrain is stored in element.type bit 0 + // Bit 3 for terrain is stored in element.type bit 7 if (terrain & 8) element->type |= 128; else @@ -48,7 +64,7 @@ void map_element_set_terrain_edge(rct_map_element *element, int terrain) // Bits 0, 1, 2 for terrain are stored in element.slope bit 5, 6, 7 element->properties.surface.slope &= ~0xE0; - element->properties.surface.slope = (terrain & 7) << 5; + element->properties.surface.slope |= (terrain & 7) << 5; } rct_map_element *map_get_surface_element_at(int x, int y) diff --git a/src/map.h b/src/map.h index 1546d9e3fe..8b0073eaa0 100644 --- a/src/map.h +++ b/src/map.h @@ -195,6 +195,10 @@ typedef struct { void map_init(); void map_update_tile_pointers(); +int map_element_get_terrain(rct_map_element *element); +int map_element_get_terrain_edge(rct_map_element *element); +void map_element_set_terrain(rct_map_element *element, int terrain); +void map_element_set_terrain_edge(rct_map_element *element, int terrain); rct_map_element *map_get_surface_element_at(int x, int y); int map_element_height(int x, int y); void sub_68B089();