diff --git a/src/world/map.c b/src/world/map.c index 75bb3795b2..ef156ffe67 100644 --- a/src/world/map.c +++ b/src/world/map.c @@ -3954,3 +3954,14 @@ bool map_surface_is_blocked(sint16 x, sint16 y){ return false; } +/* Clears all map elements, to be used before generating a new map */ +void map_clear_all_elements() +{ + int mapMaxXY = RCT2_GLOBAL(RCT2_ADDRESS_MAP_MAX_XY, uint16); + + for (int y = 0; y < (256 * 32); y += 32) { + for (int x = 0; x < (256 * 32); x += 32) { + sub_68AE2A(x, y); + } + } +} diff --git a/src/world/map.h b/src/world/map.h index 5f26f71ed7..1f82f1fb98 100644 --- a/src/world/map.h +++ b/src/world/map.h @@ -370,4 +370,6 @@ void map_invalidate_element(int x, int y, rct_map_element *mapElement); int map_get_tile_side(int mapX, int mapY); int map_get_tile_quadrant(int mapX, int mapY); +void map_clear_all_elements(); + #endif diff --git a/src/world/mapgen.c b/src/world/mapgen.c index ece85d5509..5bdfb4eeb3 100644 --- a/src/world/mapgen.c +++ b/src/world/mapgen.c @@ -105,6 +105,8 @@ void mapgen_generate_blank(mapgen_settings *settings) int x, y; rct_map_element *mapElement; + map_clear_all_elements(); + map_init(settings->mapSize); for (y = 1; y < settings->mapSize - 1; y++) { for (x = 1; x < settings->mapSize - 1; x++) { @@ -149,6 +151,8 @@ void mapgen_generate(mapgen_settings *settings) } } + map_clear_all_elements(); + // Initialise the base map map_init(mapSize); for (y = 1; y < mapSize - 1; y++) {