From 22305e87955d0e7e2d85b6b96e34b304dedf4890 Mon Sep 17 00:00:00 2001 From: reldred Date: Sat, 5 Mar 2022 16:25:50 +1030 Subject: [PATCH 1/5] Allows configuring the width of the coast in tropic maps that generates as tropiczone_normal before the desert kicks in, it does this by creating two additional arrays which house the coordinates to create a filled circle of radius of 19 tiles, and 25 tiles. the default creates a radius of 13 tiles. I'd eventually like to add an Extra Large setting but manually creating the array of coordinates is horrible. I wedged this setting in beside the setting for tropic width around rivers despite it not fitting into the rivers/lakes category because it still feels the most relevant place for now. --- src/landscape.cpp | 68 ++- src/lang/english.txt | 6 + src/settings_gui.cpp | 1 + src/settings_type.h | 1 + src/table/genland.h | 790 +++++++++++++++++++++++++++++++- src/table/settings/settings.ini | 14 + 6 files changed, 869 insertions(+), 11 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index 795055a04a..672134c9c4 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1011,13 +1011,37 @@ static void CreateDesertOrRainForest(uint desert_tropic_line) if (!IsValidTile(tile)) continue; - for (data = _make_desert_or_rainforest_data; + if (_settings_game.game_creation.coast_tropics_width == 0) { + for (data = _make_desert_or_rainforest_data; data != endof(_make_desert_or_rainforest_data); ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))) break; + TileIndex t = AddTileIndexDiffCWrap(tile, *data); + if (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))) break; + } + if (data == endof(_make_desert_or_rainforest_data)) { + SetTropicZone(tile, TROPICZONE_DESERT); + } } - if (data == endof(_make_desert_or_rainforest_data)) { - SetTropicZone(tile, TROPICZONE_DESERT); + + if (_settings_game.game_creation.coast_tropics_width == 1) { + for (data = _make_desert_or_rainforest_data_medium; + data != endof(_make_desert_or_rainforest_data_medium); ++data) { + TileIndex t = AddTileIndexDiffCWrap(tile, *data); + if (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))) break; + } + if (data == endof(_make_desert_or_rainforest_data_medium)) { + SetTropicZone(tile, TROPICZONE_DESERT); + } + } + + if (_settings_game.game_creation.coast_tropics_width == 2) { + for (data = _make_desert_or_rainforest_data_large; + data != endof(_make_desert_or_rainforest_data_large); ++data) { + TileIndex t = AddTileIndexDiffCWrap(tile, *data); + if (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))) break; + } + if (data == endof(_make_desert_or_rainforest_data_large)) { + SetTropicZone(tile, TROPICZONE_DESERT); + } } } @@ -1032,13 +1056,37 @@ static void CreateDesertOrRainForest(uint desert_tropic_line) if (!IsValidTile(tile)) continue; - for (data = _make_desert_or_rainforest_data; + if (_settings_game.game_creation.coast_tropics_width == 0) { + for (data = _make_desert_or_rainforest_data; data != endof(_make_desert_or_rainforest_data); ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)) break; + TileIndex t = AddTileIndexDiffCWrap(tile, *data); + if (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)) break; + } + if (data == endof(_make_desert_or_rainforest_data)) { + SetTropicZone(tile, TROPICZONE_RAINFOREST); + } } - if (data == endof(_make_desert_or_rainforest_data)) { - SetTropicZone(tile, TROPICZONE_RAINFOREST); + + if (_settings_game.game_creation.coast_tropics_width == 1) { + for (data = _make_desert_or_rainforest_data_medium; + data != endof(_make_desert_or_rainforest_data_medium); ++data) { + TileIndex t = AddTileIndexDiffCWrap(tile, *data); + if (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)) break; + } + if (data == endof(_make_desert_or_rainforest_data_medium)) { + SetTropicZone(tile, TROPICZONE_RAINFOREST); + } + } + + if (_settings_game.game_creation.coast_tropics_width == 2) { + for (data = _make_desert_or_rainforest_data_large; + data != endof(_make_desert_or_rainforest_data_large); ++data) { + TileIndex t = AddTileIndexDiffCWrap(tile, *data); + if (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)) break; + } + if (data == endof(_make_desert_or_rainforest_data_large)) { + SetTropicZone(tile, TROPICZONE_RAINFOREST); + } } } } diff --git a/src/lang/english.txt b/src/lang/english.txt index 311017f1cc..5923c6284d 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1679,6 +1679,12 @@ STR_CONFIG_SETTING_RIVERS_TOP_OF_HILL :Rivers require STR_CONFIG_SETTING_RIVERS_TOP_OF_HILL_HELPTEXT :Choose whether rivers require their springs to generate towards the top of hills. STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH :Tropics width around rivers: {STRING} STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH_HELPTEXT :Controls the width of the tropic zone that surrounds rivers in sub-tropic landscape. +STR_CONFIG_SETTING_COAST_TROPICS_WIDTH :Tropics width around coasts: {STRING} +STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_HELPTEXT :Controls the width of the tropic zone that surrounds coasts in sub-tropic landscape. +###length 3 +STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_DEFAULT :Default +STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_MEDIUM :Medium +STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_LARGE :Large STR_CONFIG_SETTING_LAKE_SIZE :Size of lakes: {STRING} STR_CONFIG_SETTING_LAKE_SIZE_HELPTEXT :Controls the size of lakes that are generated along rivers. STR_CONFIG_SETTING_LAKE_SIZE_VALUE :{NUM} diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 832f3e401c..1a60400d41 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2108,6 +2108,7 @@ static SettingsContainer &GetSettingsTree() rivers->Add(new SettingEntry("game_creation.river_route_random")); rivers->Add(new SettingEntry("game_creation.rivers_top_of_hill")); rivers->Add(new SettingEntry("game_creation.river_tropics_width")); + rivers->Add(new SettingEntry("game_creation.coast_tropics_width")); rivers->Add(new SettingEntry("game_creation.lake_size")); rivers->Add(new SettingEntry("game_creation.lakes_allowed_in_deserts")); } diff --git a/src/settings_type.h b/src/settings_type.h index 5899719ed3..3986733b05 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -413,6 +413,7 @@ struct GameCreationSettings { byte amount_of_rivers; ///< the amount of rivers bool rivers_top_of_hill; ///< do rivers require starting near the tops of hills? uint8 river_tropics_width; ///< the configured width of tropics around rivers + uint8 coast_tropics_width; ///< the configured width of tropics around coasts uint8 lake_size; ///< how large can lakes get? bool lakes_allowed_in_deserts; ///< are lakes allowed in deserts? uint8 amount_of_rocks; ///< the amount of rocks diff --git a/src/table/genland.h b/src/table/genland.h index 7bc6294ec7..03e29316be 100644 --- a/src/table/genland.h +++ b/src/table/genland.h @@ -9,6 +9,7 @@ #define M(x, y) {x, y} +// This default array draws a filled circle 13 tiles in diameter static const TileIndexDiffC _make_desert_or_rainforest_data[] = { M(-5, -5), M(-4, -5), @@ -161,6 +162,793 @@ static const TileIndexDiffC _make_desert_or_rainforest_data[] = { M( 3, -6) }; +// This array draws a filled circle 19 tiles in diameter +static const TileIndexDiffC _make_desert_or_rainforest_data_medium[] = { + M(-3, -9), + M(-2, -9), + M(-1, -9), + M(0, -9), + M(1, -9), + M(2, -9), + M(3, -9), + M(-5, -8), + M(-4, -8), + M(-3, -8), + M(-2, -8), + M(-1, -8), + M(0, -8), + M(1, -8), + M(2, -8), + M(3, -8), + M(4, -8), + M(5, -8), + M(-6, -7), + M(-5, -7), + M(-4, -7), + M(-3, -7), + M(-2, -7), + M(-1, -7), + M(0, -7), + M(1, -7), + M(2, -7), + M(3, -7), + M(4, -7), + M(5, -7), + M(6, -7), + M(-7, -6), + M(-6, -6), + M(-5, -6), + M(-4, -6), + M(-3, -6), + M(-2, -6), + M(-1, -6), + M(0, -6), + M(1, -6), + M(2, -6), + M(3, -6), + M(4, -6), + M(5, -6), + M(6, -6), + M(7, -6), + M(-8, -5), + M(-7, -5), + M(-6, -5), + M(-5, -5), + M(-4, -5), + M(-3, -5), + M(-2, -5), + M(-1, -5), + M(0, -5), + M(1, -5), + M(2, -5), + M(3, -5), + M(4, -5), + M(5, -5), + M(6, -5), + M(7, -5), + M(8, -5), + M(-8, -4), + M(-7, -4), + M(-6, -4), + M(-5, -4), + M(-4, -4), + M(-3, -4), + M(-2, -4), + M(-1, -4), + M(0, -4), + M(1, -4), + M(2, -4), + M(3, -4), + M(4, -4), + M(5, -4), + M(6, -4), + M(7, -4), + M(8, -4), + M(-9, -3), + M(-8, -3), + M(-7, -3), + M(-6, -3), + M(-5, -3), + M(-4, -3), + M(-3, -3), + M(-2, -3), + M(-1, -3), + M(0, -3), + M(1, -3), + M(2, -3), + M(3, -3), + M(4, -3), + M(5, -3), + M(6, -3), + M(7, -3), + M(8, -3), + M(9, -3), + M(-9, -2), + M(-8, -2), + M(-7, -2), + M(-6, -2), + M(-5, -2), + M(-4, -2), + M(-3, -2), + M(-2, -2), + M(-1, -2), + M(0, -2), + M(1, -2), + M(2, -2), + M(3, -2), + M(4, -2), + M(5, -2), + M(6, -2), + M(7, -2), + M(8, -2), + M(9, -2), + M(-9, -1), + M(-8, -1), + M(-7, -1), + M(-6, -1), + M(-5, -1), + M(-4, -1), + M(-3, -1), + M(-2, -1), + M(-1, -1), + M(0, -1), + M(1, -1), + M(2, -1), + M(3, -1), + M(4, -1), + M(5, -1), + M(6, -1), + M(7, -1), + M(8, -1), + M(9, -1), + M(-9, 0), + M(-8, 0), + M(-7, 0), + M(-6, 0), + M(-5, 0), + M(-4, 0), + M(-3, 0), + M(-2, 0), + M(-1, 0), + M(0, 0), + M(1, 0), + M(2, 0), + M(3, 0), + M(4, 0), + M(5, 0), + M(6, 0), + M(7, 0), + M(8, 0), + M(9, 0), + M(-9, 1), + M(-8, 1), + M(-7, 1), + M(-6, 1), + M(-5, 1), + M(-4, 1), + M(-3, 1), + M(-2, 1), + M(-1, 1), + M(0, 1), + M(1, 1), + M(2, 1), + M(3, 1), + M(4, 1), + M(5, 1), + M(6, 1), + M(7, 1), + M(8, 1), + M(9, 1), + M(-9, 2), + M(-8, 2), + M(-7, 2), + M(-6, 2), + M(-5, 2), + M(-4, 2), + M(-3, 2), + M(-2, 2), + M(-1, 2), + M(0, 2), + M(1, 2), + M(2, 2), + M(3, 2), + M(4, 2), + M(5, 2), + M(6, 2), + M(7, 2), + M(8, 2), + M(9, 2), + M(-9, 3), + M(-8, 3), + M(-7, 3), + M(-6, 3), + M(-5, 3), + M(-4, 3), + M(-3, 3), + M(-2, 3), + M(-1, 3), + M(0, 3), + M(1, 3), + M(2, 3), + M(3, 3), + M(4, 3), + M(5, 3), + M(6, 3), + M(7, 3), + M(8, 3), + M(9, 3), + M(-8, 4), + M(-7, 4), + M(-6, 4), + M(-5, 4), + M(-4, 4), + M(-3, 4), + M(-2, 4), + M(-1, 4), + M(0, 4), + M(1, 4), + M(2, 4), + M(3, 4), + M(4, 4), + M(5, 4), + M(6, 4), + M(7, 4), + M(8, 4), + M(-8, 5), + M(-7, 5), + M(-6, 5), + M(-5, 5), + M(-4, 5), + M(-3, 5), + M(-2, 5), + M(-1, 5), + M(0, 5), + M(1, 5), + M(2, 5), + M(3, 5), + M(4, 5), + M(5, 5), + M(6, 5), + M(7, 5), + M(8, 5), + M(-7, 6), + M(-6, 6), + M(-5, 6), + M(-4, 6), + M(-3, 6), + M(-2, 6), + M(-1, 6), + M(0, 6), + M(1, 6), + M(2, 6), + M(3, 6), + M(4, 6), + M(5, 6), + M(6, 6), + M(7, 6), + M(-6, 7), + M(-5, 7), + M(-4, 7), + M(-3, 7), + M(-2, 7), + M(-1, 7), + M(0, 7), + M(1, 7), + M(2, 7), + M(3, 7), + M(4, 7), + M(5, 7), + M(6, 7), + M(-5, 8), + M(-4, 8), + M(-3, 8), + M(-2, 8), + M(-1, 8), + M(0, 8), + M(1, 8), + M(2, 8), + M(3, 8), + M(4, 8), + M(5, 8), + M(-3, 9), + M(-2, 9), + M(-1, 9), + M(0, 9), + M(1, 9), + M(2, 9), + M(3, 9) +}; - +// This array draws a filled circle 25 tiles in diameter +static const TileIndexDiffC _make_desert_or_rainforest_data_large[] = { + M(-3, -12), + M(-2, -12), + M(-1, -12), + M(0, -12), + M(1, -12), + M(2, -12), + M(3, -12), + M(-5, -11), + M(-4, -11), + M(-3, -11), + M(-2, -11), + M(-1, -11), + M(0, -11), + M(1, -11), + M(2, -11), + M(3, -11), + M(4, -11), + M(5, -11), + M(-7, -10), + M(-6, -10), + M(-5, -10), + M(-4, -10), + M(-3, -10), + M(-2, -10), + M(-1, -10), + M(0, -10), + M(1, -10), + M(2, -10), + M(3, -10), + M(4, -10), + M(5, -10), + M(6, -10), + M(7, -10), + M(-8, -9), + M(-7, -9), + M(-6, -9), + M(-5, -9), + M(-4, -9), + M(-3, -9), + M(-2, -9), + M(-1, -9), + M(0, -9), + M(1, -9), + M(2, -9), + M(3, -9), + M(4, -9), + M(5, -9), + M(6, -9), + M(7, -9), + M(8, -9), + M(-9, -8), + M(-8, -8), + M(-7, -8), + M(-6, -8), + M(-5, -8), + M(-4, -8), + M(-3, -8), + M(-2, -8), + M(-1, -8), + M(0, -8), + M(1, -8), + M(2, -8), + M(3, -8), + M(4, -8), + M(5, -8), + M(6, -8), + M(7, -8), + M(8, -8), + M(9, -8), + M(-10, -7), + M(-9, -7), + M(-8, -7), + M(-7, -7), + M(-6, -7), + M(-5, -7), + M(-4, -7), + M(-3, -7), + M(-2, -7), + M(-1, -7), + M(0, -7), + M(1, -7), + M(2, -7), + M(3, -7), + M(4, -7), + M(5, -7), + M(6, -7), + M(7, -7), + M(8, -7), + M(9, -7), + M(10, -7), + M(-10, -6), + M(-9, -6), + M(-8, -6), + M(-7, -6), + M(-6, -6), + M(-5, -6), + M(-4, -6), + M(-3, -6), + M(-2, -6), + M(-1, -6), + M(0, -6), + M(1, -6), + M(2, -6), + M(3, -6), + M(4, -6), + M(5, -6), + M(6, -6), + M(7, -6), + M(8, -6), + M(9, -6), + M(10, -6), + M(-11, -5), + M(-10, -5), + M(-9, -5), + M(-8, -5), + M(-7, -5), + M(-6, -5), + M(-5, -5), + M(-4, -5), + M(-3, -5), + M(-2, -5), + M(-1, -5), + M(0, -5), + M(1, -5), + M(2, -5), + M(3, -5), + M(4, -5), + M(5, -5), + M(6, -5), + M(7, -5), + M(8, -5), + M(9, -5), + M(10, -5), + M(11, -5), + M(-11, -4), + M(-10, -4), + M(-9, -4), + M(-8, -4), + M(-7, -4), + M(-6, -4), + M(-5, -4), + M(-4, -4), + M(-3, -4), + M(-2, -4), + M(-1, -4), + M(0, -4), + M(1, -4), + M(2, -4), + M(3, -4), + M(4, -4), + M(5, -4), + M(6, -4), + M(7, -4), + M(8, -4), + M(9, -4), + M(10, -4), + M(11, -4), + M(-12, -3), + M(-11, -3), + M(-10, -3), + M(-9, -3), + M(-8, -3), + M(-7, -3), + M(-6, -3), + M(-5, -3), + M(-4, -3), + M(-3, -3), + M(-2, -3), + M(-1, -3), + M(0, -3), + M(1, -3), + M(2, -3), + M(3, -3), + M(4, -3), + M(5, -3), + M(6, -3), + M(7, -3), + M(8, -3), + M(9, -3), + M(10, -3), + M(11, -3), + M(12, -3), + M(-12, -2), + M(-11, -2), + M(-10, -2), + M(-9, -2), + M(-8, -2), + M(-7, -2), + M(-6, -2), + M(-5, -2), + M(-4, -2), + M(-3, -2), + M(-2, -2), + M(-1, -2), + M(0, -2), + M(1, -2), + M(2, -2), + M(3, -2), + M(4, -2), + M(5, -2), + M(6, -2), + M(7, -2), + M(8, -2), + M(9, -2), + M(10, -2), + M(11, -2), + M(12, -2), + M(-12, -1), + M(-11, -1), + M(-10, -1), + M(-9, -1), + M(-8, -1), + M(-7, -1), + M(-6, -1), + M(-5, -1), + M(-4, -1), + M(-3, -1), + M(-2, -1), + M(-1, -1), + M(0, -1), + M(1, -1), + M(2, -1), + M(3, -1), + M(4, -1), + M(5, -1), + M(6, -1), + M(7, -1), + M(8, -1), + M(9, -1), + M(10, -1), + M(11, -1), + M(12, -1), + M(-12, 0), + M(-11, 0), + M(-10, 0), + M(-9, 0), + M(-8, 0), + M(-7, 0), + M(-6, 0), + M(-5, 0), + M(-4, 0), + M(-3, 0), + M(-2, 0), + M(-1, 0), + M(0, 0), + M(1, 0), + M(2, 0), + M(3, 0), + M(4, 0), + M(5, 0), + M(6, 0), + M(7, 0), + M(8, 0), + M(9, 0), + M(10, 0), + M(11, 0), + M(12, 0), + M(-12, 1), + M(-11, 1), + M(-10, 1), + M(-9, 1), + M(-8, 1), + M(-7, 1), + M(-6, 1), + M(-5, 1), + M(-4, 1), + M(-3, 1), + M(-2, 1), + M(-1, 1), + M(0, 1), + M(1, 1), + M(2, 1), + M(3, 1), + M(4, 1), + M(5, 1), + M(6, 1), + M(7, 1), + M(8, 1), + M(9, 1), + M(10, 1), + M(11, 1), + M(12, 1), + M(-12, 2), + M(-11, 2), + M(-10, 2), + M(-9, 2), + M(-8, 2), + M(-7, 2), + M(-6, 2), + M(-5, 2), + M(-4, 2), + M(-3, 2), + M(-2, 2), + M(-1, 2), + M(0, 2), + M(1, 2), + M(2, 2), + M(3, 2), + M(4, 2), + M(5, 2), + M(6, 2), + M(7, 2), + M(8, 2), + M(9, 2), + M(10, 2), + M(11, 2), + M(12, 2), + M(-12, 3), + M(-11, 3), + M(-10, 3), + M(-9, 3), + M(-8, 3), + M(-7, 3), + M(-6, 3), + M(-5, 3), + M(-4, 3), + M(-3, 3), + M(-2, 3), + M(-1, 3), + M(0, 3), + M(1, 3), + M(2, 3), + M(3, 3), + M(4, 3), + M(5, 3), + M(6, 3), + M(7, 3), + M(8, 3), + M(9, 3), + M(10, 3), + M(11, 3), + M(12, 3), + M(-11, 4), + M(-10, 4), + M(-9, 4), + M(-8, 4), + M(-7, 4), + M(-6, 4), + M(-5, 4), + M(-4, 4), + M(-3, 4), + M(-2, 4), + M(-1, 4), + M(0, 4), + M(1, 4), + M(2, 4), + M(3, 4), + M(4, 4), + M(5, 4), + M(6, 4), + M(7, 4), + M(8, 4), + M(9, 4), + M(10, 4), + M(11, 4), + M(-11, 5), + M(-10, 5), + M(-9, 5), + M(-8, 5), + M(-7, 5), + M(-6, 5), + M(-5, 5), + M(-4, 5), + M(-3, 5), + M(-2, 5), + M(-1, 5), + M(0, 5), + M(1, 5), + M(2, 5), + M(3, 5), + M(4, 5), + M(5, 5), + M(6, 5), + M(7, 5), + M(8, 5), + M(9, 5), + M(10, 5), + M(11, 5), + M(-10, 6), + M(-9, 6), + M(-8, 6), + M(-7, 6), + M(-6, 6), + M(-5, 6), + M(-4, 6), + M(-3, 6), + M(-2, 6), + M(-1, 6), + M(0, 6), + M(1, 6), + M(2, 6), + M(3, 6), + M(4, 6), + M(5, 6), + M(6, 6), + M(7, 6), + M(8, 6), + M(9, 6), + M(10, 6), + M(-10, 7), + M(-9, 7), + M(-8, 7), + M(-7, 7), + M(-6, 7), + M(-5, 7), + M(-4, 7), + M(-3, 7), + M(-2, 7), + M(-1, 7), + M(0, 7), + M(1, 7), + M(2, 7), + M(3, 7), + M(4, 7), + M(5, 7), + M(6, 7), + M(7, 7), + M(8, 7), + M(9, 7), + M(10, 7), + M(-9, 8), + M(-8, 8), + M(-7, 8), + M(-6, 8), + M(-5, 8), + M(-4, 8), + M(-3, 8), + M(-2, 8), + M(-1, 8), + M(0, 8), + M(1, 8), + M(2, 8), + M(3, 8), + M(4, 8), + M(5, 8), + M(6, 8), + M(7, 8), + M(8, 8), + M(9, 8), + M(-8, 9), + M(-7, 9), + M(-6, 9), + M(-5, 9), + M(-4, 9), + M(-3, 9), + M(-2, 9), + M(-1, 9), + M(0, 9), + M(1, 9), + M(2, 9), + M(3, 9), + M(4, 9), + M(5, 9), + M(6, 9), + M(7, 9), + M(8, 9), + M(-7, 10), + M(-6, 10), + M(-5, 10), + M(-4, 10), + M(-3, 10), + M(-2, 10), + M(-1, 10), + M(0, 10), + M(1, 10), + M(2, 10), + M(3, 10), + M(4, 10), + M(5, 10), + M(6, 10), + M(7, 10), + M(-5, 11), + M(-4, 11), + M(-3, 11), + M(-2, 11), + M(-1, 11), + M(0, 11), + M(1, 11), + M(2, 11), + M(3, 11), + M(4, 11), + M(5, 11), + M(-3, 12), + M(-2, 12), + M(-1, 12), + M(0, 12), + M(1, 12), + M(2, 12), + M(3, 12), +}; #undef M diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini index 5727f2f379..b302ae083e 100644 --- a/src/table/settings/settings.ini +++ b/src/table/settings/settings.ini @@ -3890,6 +3890,20 @@ strval = STR_JUST_COMMA cat = SC_BASIC patxname = ""rivers.game_creation.river_tropics_width"" +[SDT_VAR] +var = game_creation.coast_tropics_width +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY +def = 0 +min = 0 +max = 2 +interval = 1 +str = STR_CONFIG_SETTING_COAST_TROPICS_WIDTH +strhelp = STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_HELPTEXT +strval = STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_DEFAULT +cat = SC_BASIC +patxname = ""rivers.game_creation.coast_tropics_width"" + [SDT_VAR] var = game_creation.lake_size type = SLE_UINT8 From f1b6eb932f60685618605459629bb415d0e60b56 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 5 Mar 2022 14:59:31 +0000 Subject: [PATCH 2/5] Reduce duplication in CreateDesertOrRainForest --- src/landscape.cpp | 88 +++++++++++++++-------------------------------- 1 file changed, 27 insertions(+), 61 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index 672134c9c4..0f80c342e4 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1001,47 +1001,38 @@ static void GenerateTerrain(int type, uint flag) #include "table/genland.h" +static std::pair GetDesertOrRainforestData() +{ + switch (_settings_game.game_creation.coast_tropics_width) { + case 0: + return { _make_desert_or_rainforest_data, endof(_make_desert_or_rainforest_data) }; + case 1: + return { _make_desert_or_rainforest_data_medium, endof(_make_desert_or_rainforest_data_medium) }; + case 2: + return { _make_desert_or_rainforest_data_large, endof(_make_desert_or_rainforest_data_large) }; + default: + NOT_REACHED(); + } +} + static void CreateDesertOrRainForest(uint desert_tropic_line) { TileIndex update_freq = MapSize() / 4; const TileIndexDiffC *data; + const std::pair desert_rainforest_data = GetDesertOrRainforestData(); + for (TileIndex tile = 0; tile != MapSize(); ++tile) { if ((tile % update_freq) == 0) IncreaseGeneratingWorldProgress(GWP_LANDSCAPE); if (!IsValidTile(tile)) continue; - if (_settings_game.game_creation.coast_tropics_width == 0) { - for (data = _make_desert_or_rainforest_data; - data != endof(_make_desert_or_rainforest_data); ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))) break; - } - if (data == endof(_make_desert_or_rainforest_data)) { - SetTropicZone(tile, TROPICZONE_DESERT); - } + for (data = desert_rainforest_data.first; data != desert_rainforest_data.second; ++data) { + TileIndex t = AddTileIndexDiffCWrap(tile, *data); + if (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))) break; } - - if (_settings_game.game_creation.coast_tropics_width == 1) { - for (data = _make_desert_or_rainforest_data_medium; - data != endof(_make_desert_or_rainforest_data_medium); ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))) break; - } - if (data == endof(_make_desert_or_rainforest_data_medium)) { - SetTropicZone(tile, TROPICZONE_DESERT); - } - } - - if (_settings_game.game_creation.coast_tropics_width == 2) { - for (data = _make_desert_or_rainforest_data_large; - data != endof(_make_desert_or_rainforest_data_large); ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))) break; - } - if (data == endof(_make_desert_or_rainforest_data_large)) { - SetTropicZone(tile, TROPICZONE_DESERT); - } + if (data == desert_rainforest_data.second) { + SetTropicZone(tile, TROPICZONE_DESERT); } } @@ -1056,37 +1047,12 @@ static void CreateDesertOrRainForest(uint desert_tropic_line) if (!IsValidTile(tile)) continue; - if (_settings_game.game_creation.coast_tropics_width == 0) { - for (data = _make_desert_or_rainforest_data; - data != endof(_make_desert_or_rainforest_data); ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)) break; - } - if (data == endof(_make_desert_or_rainforest_data)) { - SetTropicZone(tile, TROPICZONE_RAINFOREST); - } - } - - if (_settings_game.game_creation.coast_tropics_width == 1) { - for (data = _make_desert_or_rainforest_data_medium; - data != endof(_make_desert_or_rainforest_data_medium); ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)) break; - } - if (data == endof(_make_desert_or_rainforest_data_medium)) { - SetTropicZone(tile, TROPICZONE_RAINFOREST); - } + for (data = desert_rainforest_data.first; data != desert_rainforest_data.second; ++data) { + TileIndex t = AddTileIndexDiffCWrap(tile, *data); + if (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)) break; } - - if (_settings_game.game_creation.coast_tropics_width == 2) { - for (data = _make_desert_or_rainforest_data_large; - data != endof(_make_desert_or_rainforest_data_large); ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)) break; - } - if (data == endof(_make_desert_or_rainforest_data_large)) { - SetTropicZone(tile, TROPICZONE_RAINFOREST); - } + if (data == desert_rainforest_data.second) { + SetTropicZone(tile, TROPICZONE_RAINFOREST); } } } @@ -1266,7 +1232,7 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current) const uint current_river_length = DistanceManhattan(_current_spring, path->node.tile); const uint long_river_length = _settings_game.game_creation.min_river_length * 4; const uint radius = std::min(3u, (current_river_length / (long_river_length / 3u)) + 1u); - + MarkTileDirtyByTile(tile); if (_is_main_river && (radius > 1)) { From 59022c40f9c812f65798fc255fe4e3869dbac4f3 Mon Sep 17 00:00:00 2001 From: reldred Date: Sun, 6 Mar 2022 11:03:46 +1030 Subject: [PATCH 3/5] adjustments; added lake tropic width adjustment added an extra large setting to the coasts (51radius) set minimum width for rivers and lakes to 2 (setting it to 1 actually CTD'd the game) made max for rivers and lakes be 51 tiles to match the 51tiles of the coast setting. --- src/landscape.cpp | 24 +- src/lang/english.txt | 11 +- src/settings_gui.cpp | 1 + src/settings_type.h | 1 + src/table/genland.h | 2058 +++++++++++++++++++++++++++++++ src/table/settings/settings.ini | 20 +- 6 files changed, 2107 insertions(+), 8 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index 672134c9c4..2baa8fa1dc 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1043,6 +1043,17 @@ static void CreateDesertOrRainForest(uint desert_tropic_line) SetTropicZone(tile, TROPICZONE_DESERT); } } + + if (_settings_game.game_creation.coast_tropics_width == 3) { + for (data = _make_desert_or_rainforest_data_extralarge; + data != endof(_make_desert_or_rainforest_data_extralarge); ++data) { + TileIndex t = AddTileIndexDiffCWrap(tile, *data); + if (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))) break; + } + if (data == endof(_make_desert_or_rainforest_data_extralarge)) { + SetTropicZone(tile, TROPICZONE_DESERT); + } + } } for (uint i = 0; i != 256; i++) { @@ -1088,6 +1099,17 @@ static void CreateDesertOrRainForest(uint desert_tropic_line) SetTropicZone(tile, TROPICZONE_RAINFOREST); } } + + if (_settings_game.game_creation.coast_tropics_width == 3) { + for (data = _make_desert_or_rainforest_data_extralarge; + data != endof(_make_desert_or_rainforest_data_extralarge); ++data) { + TileIndex t = AddTileIndexDiffCWrap(tile, *data); + if (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)) break; + } + if (data == endof(_make_desert_or_rainforest_data_extralarge)) { + SetTropicZone(tile, TROPICZONE_RAINFOREST); + } + } } } @@ -1176,7 +1198,7 @@ static bool MakeLake(TileIndex tile, void *user_data) MarkTileDirtyByTile(tile); /* Remove desert directly around the river tile. */ TileIndex t = tile; - CircularTileSearch(&t, _settings_game.game_creation.river_tropics_width, RiverModifyDesertZone, nullptr); + CircularTileSearch(&t, _settings_game.game_creation.lake_tropics_width, RiverModifyDesertZone, nullptr); return false; } } diff --git a/src/lang/english.txt b/src/lang/english.txt index 5923c6284d..09688b058e 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1679,12 +1679,15 @@ STR_CONFIG_SETTING_RIVERS_TOP_OF_HILL :Rivers require STR_CONFIG_SETTING_RIVERS_TOP_OF_HILL_HELPTEXT :Choose whether rivers require their springs to generate towards the top of hills. STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH :Tropics width around rivers: {STRING} STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH_HELPTEXT :Controls the width of the tropic zone that surrounds rivers in sub-tropic landscape. +STR_CONFIG_SETTING_LAKE_TROPICS_WIDTH :Tropics width around lakes: {STRING} +STR_CONFIG_SETTING_LAKE_TROPICS_WIDTH_HELPTEXT :Controls the width of the tropic zone that surrounds lakes in sub-tropic landscape. STR_CONFIG_SETTING_COAST_TROPICS_WIDTH :Tropics width around coasts: {STRING} STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_HELPTEXT :Controls the width of the tropic zone that surrounds coasts in sub-tropic landscape. -###length 3 -STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_DEFAULT :Default -STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_MEDIUM :Medium -STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_LARGE :Large +###length 4 +STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_DEFAULT :Default (13) +STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_MEDIUM :Medium (19) +STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_LARGE :Large (25) +STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_EXTRALARGE :Extra Large (51) STR_CONFIG_SETTING_LAKE_SIZE :Size of lakes: {STRING} STR_CONFIG_SETTING_LAKE_SIZE_HELPTEXT :Controls the size of lakes that are generated along rivers. STR_CONFIG_SETTING_LAKE_SIZE_VALUE :{NUM} diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 1a60400d41..1f8782380e 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2108,6 +2108,7 @@ static SettingsContainer &GetSettingsTree() rivers->Add(new SettingEntry("game_creation.river_route_random")); rivers->Add(new SettingEntry("game_creation.rivers_top_of_hill")); rivers->Add(new SettingEntry("game_creation.river_tropics_width")); + rivers->Add(new SettingEntry("game_creation.lake_tropics_width")); rivers->Add(new SettingEntry("game_creation.coast_tropics_width")); rivers->Add(new SettingEntry("game_creation.lake_size")); rivers->Add(new SettingEntry("game_creation.lakes_allowed_in_deserts")); diff --git a/src/settings_type.h b/src/settings_type.h index 3986733b05..bc7629abd9 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -413,6 +413,7 @@ struct GameCreationSettings { byte amount_of_rivers; ///< the amount of rivers bool rivers_top_of_hill; ///< do rivers require starting near the tops of hills? uint8 river_tropics_width; ///< the configured width of tropics around rivers + uint8 lake_tropics_width; ///< the configured width of tropics around lakes uint8 coast_tropics_width; ///< the configured width of tropics around coasts uint8 lake_size; ///< how large can lakes get? bool lakes_allowed_in_deserts; ///< are lakes allowed in deserts? diff --git a/src/table/genland.h b/src/table/genland.h index 03e29316be..9e448df04c 100644 --- a/src/table/genland.h +++ b/src/table/genland.h @@ -951,4 +951,2062 @@ static const TileIndexDiffC _make_desert_or_rainforest_data_large[] = { M(2, 12), M(3, 12), }; + +// This array draws a filled circle 51 tiles in diameter. This is stupid. +static const TileIndexDiffC _make_desert_or_rainforest_data_extralarge[] = { + M(-5, -25), + M(-4, -25), + M(-3, -25), + M(-2, -25), + M(-1, -25), + M(0, -25), + M(1, -25), + M(2, -25), + M(3, -25), + M(4, -25), + M(5, -25), + M(-8, -24), + M(-7, -24), + M(-6, -24), + M(-5, -24), + M(-4, -24), + M(-3, -24), + M(-2, -24), + M(-1, -24), + M(0, -24), + M(1, -24), + M(2, -24), + M(3, -24), + M(4, -24), + M(5, -24), + M(6, -24), + M(7, -24), + M(8, -24), + M(-11, -23), + M(-10, -23), + M(-9, -23), + M(-8, -23), + M(-7, -23), + M(-6, -23), + M(-5, -23), + M(-4, -23), + M(-3, -23), + M(-2, -23), + M(-1, -23), + M(0, -23), + M(1, -23), + M(2, -23), + M(3, -23), + M(4, -23), + M(5, -23), + M(6, -23), + M(7, -23), + M(8, -23), + M(9, -23), + M(10, -23), + M(11, -23), + M(-12, -22), + M(-11, -22), + M(-10, -22), + M(-9, -22), + M(-8, -22), + M(-7, -22), + M(-6, -22), + M(-5, -22), + M(-4, -22), + M(-3, -22), + M(-2, -22), + M(-1, -22), + M(0, -22), + M(1, -22), + M(2, -22), + M(3, -22), + M(4, -22), + M(5, -22), + M(6, -22), + M(7, -22), + M(8, -22), + M(9, -22), + M(10, -22), + M(11, -22), + M(12, -22), + M(-14, -21), + M(-13, -21), + M(-12, -21), + M(-11, -21), + M(-10, -21), + M(-9, -21), + M(-8, -21), + M(-7, -21), + M(-6, -21), + M(-5, -21), + M(-4, -21), + M(-3, -21), + M(-2, -21), + M(-1, -21), + M(0, -21), + M(1, -21), + M(2, -21), + M(3, -21), + M(4, -21), + M(5, -21), + M(6, -21), + M(7, -21), + M(8, -21), + M(9, -21), + M(10, -21), + M(11, -21), + M(12, -21), + M(13, -21), + M(14, -21), + M(-15, -20), + M(-14, -20), + M(-13, -20), + M(-12, -20), + M(-11, -20), + M(-10, -20), + M(-9, -20), + M(-8, -20), + M(-7, -20), + M(-6, -20), + M(-5, -20), + M(-4, -20), + M(-3, -20), + M(-2, -20), + M(-1, -20), + M(0, -20), + M(1, -20), + M(2, -20), + M(3, -20), + M(4, -20), + M(5, -20), + M(6, -20), + M(7, -20), + M(8, -20), + M(9, -20), + M(10, -20), + M(11, -20), + M(12, -20), + M(13, -20), + M(14, -20), + M(15, -20), + M(-17, -19), + M(-16, -19), + M(-15, -19), + M(-14, -19), + M(-13, -19), + M(-12, -19), + M(-11, -19), + M(-10, -19), + M(-9, -19), + M(-8, -19), + M(-7, -19), + M(-6, -19), + M(-5, -19), + M(-4, -19), + M(-3, -19), + M(-2, -19), + M(-1, -19), + M(0, -19), + M(1, -19), + M(2, -19), + M(3, -19), + M(4, -19), + M(5, -19), + M(6, -19), + M(7, -19), + M(8, -19), + M(9, -19), + M(10, -19), + M(11, -19), + M(12, -19), + M(13, -19), + M(14, -19), + M(15, -19), + M(16, -19), + M(17, -19), + M(-18, -18), + M(-17, -18), + M(-16, -18), + M(-15, -18), + M(-14, -18), + M(-13, -18), + M(-12, -18), + M(-11, -18), + M(-10, -18), + M(-9, -18), + M(-8, -18), + M(-7, -18), + M(-6, -18), + M(-5, -18), + M(-4, -18), + M(-3, -18), + M(-2, -18), + M(-1, -18), + M(0, -18), + M(1, -18), + M(2, -18), + M(3, -18), + M(4, -18), + M(5, -18), + M(6, -18), + M(7, -18), + M(8, -18), + M(9, -18), + M(10, -18), + M(11, -18), + M(12, -18), + M(13, -18), + M(14, -18), + M(15, -18), + M(16, -18), + M(17, -18), + M(18, -18), + M(-19, -17), + M(-18, -17), + M(-17, -17), + M(-16, -17), + M(-15, -17), + M(-14, -17), + M(-13, -17), + M(-12, -17), + M(-11, -17), + M(-10, -17), + M(-9, -17), + M(-8, -17), + M(-7, -17), + M(-6, -17), + M(-5, -17), + M(-4, -17), + M(-3, -17), + M(-2, -17), + M(-1, -17), + M(0, -17), + M(1, -17), + M(2, -17), + M(3, -17), + M(4, -17), + M(5, -17), + M(6, -17), + M(7, -17), + M(8, -17), + M(9, -17), + M(10, -17), + M(11, -17), + M(12, -17), + M(13, -17), + M(14, -17), + M(15, -17), + M(16, -17), + M(17, -17), + M(18, -17), + M(19, -17), + M(-19, -16), + M(-18, -16), + M(-17, -16), + M(-16, -16), + M(-15, -16), + M(-14, -16), + M(-13, -16), + M(-12, -16), + M(-11, -16), + M(-10, -16), + M(-9, -16), + M(-8, -16), + M(-7, -16), + M(-6, -16), + M(-5, -16), + M(-4, -16), + M(-3, -16), + M(-2, -16), + M(-1, -16), + M(0, -16), + M(1, -16), + M(2, -16), + M(3, -16), + M(4, -16), + M(5, -16), + M(6, -16), + M(7, -16), + M(8, -16), + M(9, -16), + M(10, -16), + M(11, -16), + M(12, -16), + M(13, -16), + M(14, -16), + M(15, -16), + M(16, -16), + M(17, -16), + M(18, -16), + M(19, -16), + M(-20, -15), + M(-19, -15), + M(-18, -15), + M(-17, -15), + M(-16, -15), + M(-15, -15), + M(-14, -15), + M(-13, -15), + M(-12, -15), + M(-11, -15), + M(-10, -15), + M(-9, -15), + M(-8, -15), + M(-7, -15), + M(-6, -15), + M(-5, -15), + M(-4, -15), + M(-3, -15), + M(-2, -15), + M(-1, -15), + M(0, -15), + M(1, -15), + M(2, -15), + M(3, -15), + M(4, -15), + M(5, -15), + M(6, -15), + M(7, -15), + M(8, -15), + M(9, -15), + M(10, -15), + M(11, -15), + M(12, -15), + M(13, -15), + M(14, -15), + M(15, -15), + M(16, -15), + M(17, -15), + M(18, -15), + M(19, -15), + M(20, -15), + M(-21, -14), + M(-20, -14), + M(-19, -14), + M(-18, -14), + M(-17, -14), + M(-16, -14), + M(-15, -14), + M(-14, -14), + M(-13, -14), + M(-12, -14), + M(-11, -14), + M(-10, -14), + M(-9, -14), + M(-8, -14), + M(-7, -14), + M(-6, -14), + M(-5, -14), + M(-4, -14), + M(-3, -14), + M(-2, -14), + M(-1, -14), + M(0, -14), + M(1, -14), + M(2, -14), + M(3, -14), + M(4, -14), + M(5, -14), + M(6, -14), + M(7, -14), + M(8, -14), + M(9, -14), + M(10, -14), + M(11, -14), + M(12, -14), + M(13, -14), + M(14, -14), + M(15, -14), + M(16, -14), + M(17, -14), + M(18, -14), + M(19, -14), + M(20, -14), + M(21, -14), + M(-21, -13), + M(-20, -13), + M(-19, -13), + M(-18, -13), + M(-17, -13), + M(-16, -13), + M(-15, -13), + M(-14, -13), + M(-13, -13), + M(-12, -13), + M(-11, -13), + M(-10, -13), + M(-9, -13), + M(-8, -13), + M(-7, -13), + M(-6, -13), + M(-5, -13), + M(-4, -13), + M(-3, -13), + M(-2, -13), + M(-1, -13), + M(0, -13), + M(1, -13), + M(2, -13), + M(3, -13), + M(4, -13), + M(5, -13), + M(6, -13), + M(7, -13), + M(8, -13), + M(9, -13), + M(10, -13), + M(11, -13), + M(12, -13), + M(13, -13), + M(14, -13), + M(15, -13), + M(16, -13), + M(17, -13), + M(18, -13), + M(19, -13), + M(20, -13), + M(21, -13), + M(-22, -12), + M(-21, -12), + M(-20, -12), + M(-19, -12), + M(-18, -12), + M(-17, -12), + M(-16, -12), + M(-15, -12), + M(-14, -12), + M(-13, -12), + M(-12, -12), + M(-11, -12), + M(-10, -12), + M(-9, -12), + M(-8, -12), + M(-7, -12), + M(-6, -12), + M(-5, -12), + M(-4, -12), + M(-3, -12), + M(-2, -12), + M(-1, -12), + M(0, -12), + M(1, -12), + M(2, -12), + M(3, -12), + M(4, -12), + M(5, -12), + M(6, -12), + M(7, -12), + M(8, -12), + M(9, -12), + M(10, -12), + M(11, -12), + M(12, -12), + M(13, -12), + M(14, -12), + M(15, -12), + M(16, -12), + M(17, -12), + M(18, -12), + M(19, -12), + M(20, -12), + M(21, -12), + M(22, -12), + M(-23, -11), + M(-22, -11), + M(-21, -11), + M(-20, -11), + M(-19, -11), + M(-18, -11), + M(-17, -11), + M(-16, -11), + M(-15, -11), + M(-14, -11), + M(-13, -11), + M(-12, -11), + M(-11, -11), + M(-10, -11), + M(-9, -11), + M(-8, -11), + M(-7, -11), + M(-6, -11), + M(-5, -11), + M(-4, -11), + M(-3, -11), + M(-2, -11), + M(-1, -11), + M(0, -11), + M(1, -11), + M(2, -11), + M(3, -11), + M(4, -11), + M(5, -11), + M(6, -11), + M(7, -11), + M(8, -11), + M(9, -11), + M(10, -11), + M(11, -11), + M(12, -11), + M(13, -11), + M(14, -11), + M(15, -11), + M(16, -11), + M(17, -11), + M(18, -11), + M(19, -11), + M(20, -11), + M(21, -11), + M(22, -11), + M(23, -11), + M(-23, -10), + M(-22, -10), + M(-21, -10), + M(-20, -10), + M(-19, -10), + M(-18, -10), + M(-17, -10), + M(-16, -10), + M(-15, -10), + M(-14, -10), + M(-13, -10), + M(-12, -10), + M(-11, -10), + M(-10, -10), + M(-9, -10), + M(-8, -10), + M(-7, -10), + M(-6, -10), + M(-5, -10), + M(-4, -10), + M(-3, -10), + M(-2, -10), + M(-1, -10), + M(0, -10), + M(1, -10), + M(2, -10), + M(3, -10), + M(4, -10), + M(5, -10), + M(6, -10), + M(7, -10), + M(8, -10), + M(9, -10), + M(10, -10), + M(11, -10), + M(12, -10), + M(13, -10), + M(14, -10), + M(15, -10), + M(16, -10), + M(17, -10), + M(18, -10), + M(19, -10), + M(20, -10), + M(21, -10), + M(22, -10), + M(23, -10), + M(-23, -9), + M(-22, -9), + M(-21, -9), + M(-20, -9), + M(-19, -9), + M(-18, -9), + M(-17, -9), + M(-16, -9), + M(-15, -9), + M(-14, -9), + M(-13, -9), + M(-12, -9), + M(-11, -9), + M(-10, -9), + M(-9, -9), + M(-8, -9), + M(-7, -9), + M(-6, -9), + M(-5, -9), + M(-4, -9), + M(-3, -9), + M(-2, -9), + M(-1, -9), + M(0, -9), + M(1, -9), + M(2, -9), + M(3, -9), + M(4, -9), + M(5, -9), + M(6, -9), + M(7, -9), + M(8, -9), + M(9, -9), + M(10, -9), + M(11, -9), + M(12, -9), + M(13, -9), + M(14, -9), + M(15, -9), + M(16, -9), + M(17, -9), + M(18, -9), + M(19, -9), + M(20, -9), + M(21, -9), + M(22, -9), + M(23, -9), + M(-24, -8), + M(-23, -8), + M(-22, -8), + M(-21, -8), + M(-20, -8), + M(-19, -8), + M(-18, -8), + M(-17, -8), + M(-16, -8), + M(-15, -8), + M(-14, -8), + M(-13, -8), + M(-12, -8), + M(-11, -8), + M(-10, -8), + M(-9, -8), + M(-8, -8), + M(-7, -8), + M(-6, -8), + M(-5, -8), + M(-4, -8), + M(-3, -8), + M(-2, -8), + M(-1, -8), + M(0, -8), + M(1, -8), + M(2, -8), + M(3, -8), + M(4, -8), + M(5, -8), + M(6, -8), + M(7, -8), + M(8, -8), + M(9, -8), + M(10, -8), + M(11, -8), + M(12, -8), + M(13, -8), + M(14, -8), + M(15, -8), + M(16, -8), + M(17, -8), + M(18, -8), + M(19, -8), + M(20, -8), + M(21, -8), + M(22, -8), + M(23, -8), + M(24, -8), + M(-24, -7), + M(-23, -7), + M(-22, -7), + M(-21, -7), + M(-20, -7), + M(-19, -7), + M(-18, -7), + M(-17, -7), + M(-16, -7), + M(-15, -7), + M(-14, -7), + M(-13, -7), + M(-12, -7), + M(-11, -7), + M(-10, -7), + M(-9, -7), + M(-8, -7), + M(-7, -7), + M(-6, -7), + M(-5, -7), + M(-4, -7), + M(-3, -7), + M(-2, -7), + M(-1, -7), + M(0, -7), + M(1, -7), + M(2, -7), + M(3, -7), + M(4, -7), + M(5, -7), + M(6, -7), + M(7, -7), + M(8, -7), + M(9, -7), + M(10, -7), + M(11, -7), + M(12, -7), + M(13, -7), + M(14, -7), + M(15, -7), + M(16, -7), + M(17, -7), + M(18, -7), + M(19, -7), + M(20, -7), + M(21, -7), + M(22, -7), + M(23, -7), + M(24, -7), + M(-24, -6), + M(-23, -6), + M(-22, -6), + M(-21, -6), + M(-20, -6), + M(-19, -6), + M(-18, -6), + M(-17, -6), + M(-16, -6), + M(-15, -6), + M(-14, -6), + M(-13, -6), + M(-12, -6), + M(-11, -6), + M(-10, -6), + M(-9, -6), + M(-8, -6), + M(-7, -6), + M(-6, -6), + M(-5, -6), + M(-4, -6), + M(-3, -6), + M(-2, -6), + M(-1, -6), + M(0, -6), + M(1, -6), + M(2, -6), + M(3, -6), + M(4, -6), + M(5, -6), + M(6, -6), + M(7, -6), + M(8, -6), + M(9, -6), + M(10, -6), + M(11, -6), + M(12, -6), + M(13, -6), + M(14, -6), + M(15, -6), + M(16, -6), + M(17, -6), + M(18, -6), + M(19, -6), + M(20, -6), + M(21, -6), + M(22, -6), + M(23, -6), + M(24, -6), + M(-25, -5), + M(-24, -5), + M(-23, -5), + M(-22, -5), + M(-21, -5), + M(-20, -5), + M(-19, -5), + M(-18, -5), + M(-17, -5), + M(-16, -5), + M(-15, -5), + M(-14, -5), + M(-13, -5), + M(-12, -5), + M(-11, -5), + M(-10, -5), + M(-9, -5), + M(-8, -5), + M(-7, -5), + M(-6, -5), + M(-5, -5), + M(-4, -5), + M(-3, -5), + M(-2, -5), + M(-1, -5), + M(0, -5), + M(1, -5), + M(2, -5), + M(3, -5), + M(4, -5), + M(5, -5), + M(6, -5), + M(7, -5), + M(8, -5), + M(9, -5), + M(10, -5), + M(11, -5), + M(12, -5), + M(13, -5), + M(14, -5), + M(15, -5), + M(16, -5), + M(17, -5), + M(18, -5), + M(19, -5), + M(20, -5), + M(21, -5), + M(22, -5), + M(23, -5), + M(24, -5), + M(25, -5), + M(-25, -4), + M(-24, -4), + M(-23, -4), + M(-22, -4), + M(-21, -4), + M(-20, -4), + M(-19, -4), + M(-18, -4), + M(-17, -4), + M(-16, -4), + M(-15, -4), + M(-14, -4), + M(-13, -4), + M(-12, -4), + M(-11, -4), + M(-10, -4), + M(-9, -4), + M(-8, -4), + M(-7, -4), + M(-6, -4), + M(-5, -4), + M(-4, -4), + M(-3, -4), + M(-2, -4), + M(-1, -4), + M(0, -4), + M(1, -4), + M(2, -4), + M(3, -4), + M(4, -4), + M(5, -4), + M(6, -4), + M(7, -4), + M(8, -4), + M(9, -4), + M(10, -4), + M(11, -4), + M(12, -4), + M(13, -4), + M(14, -4), + M(15, -4), + M(16, -4), + M(17, -4), + M(18, -4), + M(19, -4), + M(20, -4), + M(21, -4), + M(22, -4), + M(23, -4), + M(24, -4), + M(25, -4), + M(-25, -3), + M(-24, -3), + M(-23, -3), + M(-22, -3), + M(-21, -3), + M(-20, -3), + M(-19, -3), + M(-18, -3), + M(-17, -3), + M(-16, -3), + M(-15, -3), + M(-14, -3), + M(-13, -3), + M(-12, -3), + M(-11, -3), + M(-10, -3), + M(-9, -3), + M(-8, -3), + M(-7, -3), + M(-6, -3), + M(-5, -3), + M(-4, -3), + M(-3, -3), + M(-2, -3), + M(-1, -3), + M(0, -3), + M(1, -3), + M(2, -3), + M(3, -3), + M(4, -3), + M(5, -3), + M(6, -3), + M(7, -3), + M(8, -3), + M(9, -3), + M(10, -3), + M(11, -3), + M(12, -3), + M(13, -3), + M(14, -3), + M(15, -3), + M(16, -3), + M(17, -3), + M(18, -3), + M(19, -3), + M(20, -3), + M(21, -3), + M(22, -3), + M(23, -3), + M(24, -3), + M(25, -3), + M(-25, -2), + M(-24, -2), + M(-23, -2), + M(-22, -2), + M(-21, -2), + M(-20, -2), + M(-19, -2), + M(-18, -2), + M(-17, -2), + M(-16, -2), + M(-15, -2), + M(-14, -2), + M(-13, -2), + M(-12, -2), + M(-11, -2), + M(-10, -2), + M(-9, -2), + M(-8, -2), + M(-7, -2), + M(-6, -2), + M(-5, -2), + M(-4, -2), + M(-3, -2), + M(-2, -2), + M(-1, -2), + M(0, -2), + M(1, -2), + M(2, -2), + M(3, -2), + M(4, -2), + M(5, -2), + M(6, -2), + M(7, -2), + M(8, -2), + M(9, -2), + M(10, -2), + M(11, -2), + M(12, -2), + M(13, -2), + M(14, -2), + M(15, -2), + M(16, -2), + M(17, -2), + M(18, -2), + M(19, -2), + M(20, -2), + M(21, -2), + M(22, -2), + M(23, -2), + M(24, -2), + M(25, -2), + M(-25, -1), + M(-24, -1), + M(-23, -1), + M(-22, -1), + M(-21, -1), + M(-20, -1), + M(-19, -1), + M(-18, -1), + M(-17, -1), + M(-16, -1), + M(-15, -1), + M(-14, -1), + M(-13, -1), + M(-12, -1), + M(-11, -1), + M(-10, -1), + M(-9, -1), + M(-8, -1), + M(-7, -1), + M(-6, -1), + M(-5, -1), + M(-4, -1), + M(-3, -1), + M(-2, -1), + M(-1, -1), + M(0, -1), + M(1, -1), + M(2, -1), + M(3, -1), + M(4, -1), + M(5, -1), + M(6, -1), + M(7, -1), + M(8, -1), + M(9, -1), + M(10, -1), + M(11, -1), + M(12, -1), + M(13, -1), + M(14, -1), + M(15, -1), + M(16, -1), + M(17, -1), + M(18, -1), + M(19, -1), + M(20, -1), + M(21, -1), + M(22, -1), + M(23, -1), + M(24, -1), + M(25, -1), + M(-25, 0), + M(-24, 0), + M(-23, 0), + M(-22, 0), + M(-21, 0), + M(-20, 0), + M(-19, 0), + M(-18, 0), + M(-17, 0), + M(-16, 0), + M(-15, 0), + M(-14, 0), + M(-13, 0), + M(-12, 0), + M(-11, 0), + M(-10, 0), + M(-9, 0), + M(-8, 0), + M(-7, 0), + M(-6, 0), + M(-5, 0), + M(-4, 0), + M(-3, 0), + M(-2, 0), + M(-1, 0), + M(0, 0), + M(1, 0), + M(2, 0), + M(3, 0), + M(4, 0), + M(5, 0), + M(6, 0), + M(7, 0), + M(8, 0), + M(9, 0), + M(10, 0), + M(11, 0), + M(12, 0), + M(13, 0), + M(14, 0), + M(15, 0), + M(16, 0), + M(17, 0), + M(18, 0), + M(19, 0), + M(20, 0), + M(21, 0), + M(22, 0), + M(23, 0), + M(24, 0), + M(25, 0), + M(-25, 1), + M(-24, 1), + M(-23, 1), + M(-22, 1), + M(-21, 1), + M(-20, 1), + M(-19, 1), + M(-18, 1), + M(-17, 1), + M(-16, 1), + M(-15, 1), + M(-14, 1), + M(-13, 1), + M(-12, 1), + M(-11, 1), + M(-10, 1), + M(-9, 1), + M(-8, 1), + M(-7, 1), + M(-6, 1), + M(-5, 1), + M(-4, 1), + M(-3, 1), + M(-2, 1), + M(-1, 1), + M(0, 1), + M(1, 1), + M(2, 1), + M(3, 1), + M(4, 1), + M(5, 1), + M(6, 1), + M(7, 1), + M(8, 1), + M(9, 1), + M(10, 1), + M(11, 1), + M(12, 1), + M(13, 1), + M(14, 1), + M(15, 1), + M(16, 1), + M(17, 1), + M(18, 1), + M(19, 1), + M(20, 1), + M(21, 1), + M(22, 1), + M(23, 1), + M(24, 1), + M(25, 1), + M(-25, 2), + M(-24, 2), + M(-23, 2), + M(-22, 2), + M(-21, 2), + M(-20, 2), + M(-19, 2), + M(-18, 2), + M(-17, 2), + M(-16, 2), + M(-15, 2), + M(-14, 2), + M(-13, 2), + M(-12, 2), + M(-11, 2), + M(-10, 2), + M(-9, 2), + M(-8, 2), + M(-7, 2), + M(-6, 2), + M(-5, 2), + M(-4, 2), + M(-3, 2), + M(-2, 2), + M(-1, 2), + M(0, 2), + M(1, 2), + M(2, 2), + M(3, 2), + M(4, 2), + M(5, 2), + M(6, 2), + M(7, 2), + M(8, 2), + M(9, 2), + M(10, 2), + M(11, 2), + M(12, 2), + M(13, 2), + M(14, 2), + M(15, 2), + M(16, 2), + M(17, 2), + M(18, 2), + M(19, 2), + M(20, 2), + M(21, 2), + M(22, 2), + M(23, 2), + M(24, 2), + M(25, 2), + M(-25, 3), + M(-24, 3), + M(-23, 3), + M(-22, 3), + M(-21, 3), + M(-20, 3), + M(-19, 3), + M(-18, 3), + M(-17, 3), + M(-16, 3), + M(-15, 3), + M(-14, 3), + M(-13, 3), + M(-12, 3), + M(-11, 3), + M(-10, 3), + M(-9, 3), + M(-8, 3), + M(-7, 3), + M(-6, 3), + M(-5, 3), + M(-4, 3), + M(-3, 3), + M(-2, 3), + M(-1, 3), + M(0, 3), + M(1, 3), + M(2, 3), + M(3, 3), + M(4, 3), + M(5, 3), + M(6, 3), + M(7, 3), + M(8, 3), + M(9, 3), + M(10, 3), + M(11, 3), + M(12, 3), + M(13, 3), + M(14, 3), + M(15, 3), + M(16, 3), + M(17, 3), + M(18, 3), + M(19, 3), + M(20, 3), + M(21, 3), + M(22, 3), + M(23, 3), + M(24, 3), + M(25, 3), + M(-25, 4), + M(-24, 4), + M(-23, 4), + M(-22, 4), + M(-21, 4), + M(-20, 4), + M(-19, 4), + M(-18, 4), + M(-17, 4), + M(-16, 4), + M(-15, 4), + M(-14, 4), + M(-13, 4), + M(-12, 4), + M(-11, 4), + M(-10, 4), + M(-9, 4), + M(-8, 4), + M(-7, 4), + M(-6, 4), + M(-5, 4), + M(-4, 4), + M(-3, 4), + M(-2, 4), + M(-1, 4), + M(0, 4), + M(1, 4), + M(2, 4), + M(3, 4), + M(4, 4), + M(5, 4), + M(6, 4), + M(7, 4), + M(8, 4), + M(9, 4), + M(10, 4), + M(11, 4), + M(12, 4), + M(13, 4), + M(14, 4), + M(15, 4), + M(16, 4), + M(17, 4), + M(18, 4), + M(19, 4), + M(20, 4), + M(21, 4), + M(22, 4), + M(23, 4), + M(24, 4), + M(25, 4), + M(-25, 5), + M(-24, 5), + M(-23, 5), + M(-22, 5), + M(-21, 5), + M(-20, 5), + M(-19, 5), + M(-18, 5), + M(-17, 5), + M(-16, 5), + M(-15, 5), + M(-14, 5), + M(-13, 5), + M(-12, 5), + M(-11, 5), + M(-10, 5), + M(-9, 5), + M(-8, 5), + M(-7, 5), + M(-6, 5), + M(-5, 5), + M(-4, 5), + M(-3, 5), + M(-2, 5), + M(-1, 5), + M(0, 5), + M(1, 5), + M(2, 5), + M(3, 5), + M(4, 5), + M(5, 5), + M(6, 5), + M(7, 5), + M(8, 5), + M(9, 5), + M(10, 5), + M(11, 5), + M(12, 5), + M(13, 5), + M(14, 5), + M(15, 5), + M(16, 5), + M(17, 5), + M(18, 5), + M(19, 5), + M(20, 5), + M(21, 5), + M(22, 5), + M(23, 5), + M(24, 5), + M(25, 5), + M(-24, 6), + M(-23, 6), + M(-22, 6), + M(-21, 6), + M(-20, 6), + M(-19, 6), + M(-18, 6), + M(-17, 6), + M(-16, 6), + M(-15, 6), + M(-14, 6), + M(-13, 6), + M(-12, 6), + M(-11, 6), + M(-10, 6), + M(-9, 6), + M(-8, 6), + M(-7, 6), + M(-6, 6), + M(-5, 6), + M(-4, 6), + M(-3, 6), + M(-2, 6), + M(-1, 6), + M(0, 6), + M(1, 6), + M(2, 6), + M(3, 6), + M(4, 6), + M(5, 6), + M(6, 6), + M(7, 6), + M(8, 6), + M(9, 6), + M(10, 6), + M(11, 6), + M(12, 6), + M(13, 6), + M(14, 6), + M(15, 6), + M(16, 6), + M(17, 6), + M(18, 6), + M(19, 6), + M(20, 6), + M(21, 6), + M(22, 6), + M(23, 6), + M(24, 6), + M(-24, 7), + M(-23, 7), + M(-22, 7), + M(-21, 7), + M(-20, 7), + M(-19, 7), + M(-18, 7), + M(-17, 7), + M(-16, 7), + M(-15, 7), + M(-14, 7), + M(-13, 7), + M(-12, 7), + M(-11, 7), + M(-10, 7), + M(-9, 7), + M(-8, 7), + M(-7, 7), + M(-6, 7), + M(-5, 7), + M(-4, 7), + M(-3, 7), + M(-2, 7), + M(-1, 7), + M(0, 7), + M(1, 7), + M(2, 7), + M(3, 7), + M(4, 7), + M(5, 7), + M(6, 7), + M(7, 7), + M(8, 7), + M(9, 7), + M(10, 7), + M(11, 7), + M(12, 7), + M(13, 7), + M(14, 7), + M(15, 7), + M(16, 7), + M(17, 7), + M(18, 7), + M(19, 7), + M(20, 7), + M(21, 7), + M(22, 7), + M(23, 7), + M(24, 7), + M(-24, 8), + M(-23, 8), + M(-22, 8), + M(-21, 8), + M(-20, 8), + M(-19, 8), + M(-18, 8), + M(-17, 8), + M(-16, 8), + M(-15, 8), + M(-14, 8), + M(-13, 8), + M(-12, 8), + M(-11, 8), + M(-10, 8), + M(-9, 8), + M(-8, 8), + M(-7, 8), + M(-6, 8), + M(-5, 8), + M(-4, 8), + M(-3, 8), + M(-2, 8), + M(-1, 8), + M(0, 8), + M(1, 8), + M(2, 8), + M(3, 8), + M(4, 8), + M(5, 8), + M(6, 8), + M(7, 8), + M(8, 8), + M(9, 8), + M(10, 8), + M(11, 8), + M(12, 8), + M(13, 8), + M(14, 8), + M(15, 8), + M(16, 8), + M(17, 8), + M(18, 8), + M(19, 8), + M(20, 8), + M(21, 8), + M(22, 8), + M(23, 8), + M(24, 8), + M(-23, 9), + M(-22, 9), + M(-21, 9), + M(-20, 9), + M(-19, 9), + M(-18, 9), + M(-17, 9), + M(-16, 9), + M(-15, 9), + M(-14, 9), + M(-13, 9), + M(-12, 9), + M(-11, 9), + M(-10, 9), + M(-9, 9), + M(-8, 9), + M(-7, 9), + M(-6, 9), + M(-5, 9), + M(-4, 9), + M(-3, 9), + M(-2, 9), + M(-1, 9), + M(0, 9), + M(1, 9), + M(2, 9), + M(3, 9), + M(4, 9), + M(5, 9), + M(6, 9), + M(7, 9), + M(8, 9), + M(9, 9), + M(10, 9), + M(11, 9), + M(12, 9), + M(13, 9), + M(14, 9), + M(15, 9), + M(16, 9), + M(17, 9), + M(18, 9), + M(19, 9), + M(20, 9), + M(21, 9), + M(22, 9), + M(23, 9), + M(-23, 10), + M(-22, 10), + M(-21, 10), + M(-20, 10), + M(-19, 10), + M(-18, 10), + M(-17, 10), + M(-16, 10), + M(-15, 10), + M(-14, 10), + M(-13, 10), + M(-12, 10), + M(-11, 10), + M(-10, 10), + M(-9, 10), + M(-8, 10), + M(-7, 10), + M(-6, 10), + M(-5, 10), + M(-4, 10), + M(-3, 10), + M(-2, 10), + M(-1, 10), + M(0, 10), + M(1, 10), + M(2, 10), + M(3, 10), + M(4, 10), + M(5, 10), + M(6, 10), + M(7, 10), + M(8, 10), + M(9, 10), + M(10, 10), + M(11, 10), + M(12, 10), + M(13, 10), + M(14, 10), + M(15, 10), + M(16, 10), + M(17, 10), + M(18, 10), + M(19, 10), + M(20, 10), + M(21, 10), + M(22, 10), + M(23, 10), + M(-23, 11), + M(-22, 11), + M(-21, 11), + M(-20, 11), + M(-19, 11), + M(-18, 11), + M(-17, 11), + M(-16, 11), + M(-15, 11), + M(-14, 11), + M(-13, 11), + M(-12, 11), + M(-11, 11), + M(-10, 11), + M(-9, 11), + M(-8, 11), + M(-7, 11), + M(-6, 11), + M(-5, 11), + M(-4, 11), + M(-3, 11), + M(-2, 11), + M(-1, 11), + M(0, 11), + M(1, 11), + M(2, 11), + M(3, 11), + M(4, 11), + M(5, 11), + M(6, 11), + M(7, 11), + M(8, 11), + M(9, 11), + M(10, 11), + M(11, 11), + M(12, 11), + M(13, 11), + M(14, 11), + M(15, 11), + M(16, 11), + M(17, 11), + M(18, 11), + M(19, 11), + M(20, 11), + M(21, 11), + M(22, 11), + M(23, 11), + M(-22, 12), + M(-21, 12), + M(-20, 12), + M(-19, 12), + M(-18, 12), + M(-17, 12), + M(-16, 12), + M(-15, 12), + M(-14, 12), + M(-13, 12), + M(-12, 12), + M(-11, 12), + M(-10, 12), + M(-9, 12), + M(-8, 12), + M(-7, 12), + M(-6, 12), + M(-5, 12), + M(-4, 12), + M(-3, 12), + M(-2, 12), + M(-1, 12), + M(0, 12), + M(1, 12), + M(2, 12), + M(3, 12), + M(4, 12), + M(5, 12), + M(6, 12), + M(7, 12), + M(8, 12), + M(9, 12), + M(10, 12), + M(11, 12), + M(12, 12), + M(13, 12), + M(14, 12), + M(15, 12), + M(16, 12), + M(17, 12), + M(18, 12), + M(19, 12), + M(20, 12), + M(21, 12), + M(22, 12), + M(-21, 13), + M(-20, 13), + M(-19, 13), + M(-18, 13), + M(-17, 13), + M(-16, 13), + M(-15, 13), + M(-14, 13), + M(-13, 13), + M(-12, 13), + M(-11, 13), + M(-10, 13), + M(-9, 13), + M(-8, 13), + M(-7, 13), + M(-6, 13), + M(-5, 13), + M(-4, 13), + M(-3, 13), + M(-2, 13), + M(-1, 13), + M(0, 13), + M(1, 13), + M(2, 13), + M(3, 13), + M(4, 13), + M(5, 13), + M(6, 13), + M(7, 13), + M(8, 13), + M(9, 13), + M(10, 13), + M(11, 13), + M(12, 13), + M(13, 13), + M(14, 13), + M(15, 13), + M(16, 13), + M(17, 13), + M(18, 13), + M(19, 13), + M(20, 13), + M(21, 13), + M(-21, 14), + M(-20, 14), + M(-19, 14), + M(-18, 14), + M(-17, 14), + M(-16, 14), + M(-15, 14), + M(-14, 14), + M(-13, 14), + M(-12, 14), + M(-11, 14), + M(-10, 14), + M(-9, 14), + M(-8, 14), + M(-7, 14), + M(-6, 14), + M(-5, 14), + M(-4, 14), + M(-3, 14), + M(-2, 14), + M(-1, 14), + M(0, 14), + M(1, 14), + M(2, 14), + M(3, 14), + M(4, 14), + M(5, 14), + M(6, 14), + M(7, 14), + M(8, 14), + M(9, 14), + M(10, 14), + M(11, 14), + M(12, 14), + M(13, 14), + M(14, 14), + M(15, 14), + M(16, 14), + M(17, 14), + M(18, 14), + M(19, 14), + M(20, 14), + M(21, 14), + M(-20, 15), + M(-19, 15), + M(-18, 15), + M(-17, 15), + M(-16, 15), + M(-15, 15), + M(-14, 15), + M(-13, 15), + M(-12, 15), + M(-11, 15), + M(-10, 15), + M(-9, 15), + M(-8, 15), + M(-7, 15), + M(-6, 15), + M(-5, 15), + M(-4, 15), + M(-3, 15), + M(-2, 15), + M(-1, 15), + M(0, 15), + M(1, 15), + M(2, 15), + M(3, 15), + M(4, 15), + M(5, 15), + M(6, 15), + M(7, 15), + M(8, 15), + M(9, 15), + M(10, 15), + M(11, 15), + M(12, 15), + M(13, 15), + M(14, 15), + M(15, 15), + M(16, 15), + M(17, 15), + M(18, 15), + M(19, 15), + M(20, 15), + M(-19, 16), + M(-18, 16), + M(-17, 16), + M(-16, 16), + M(-15, 16), + M(-14, 16), + M(-13, 16), + M(-12, 16), + M(-11, 16), + M(-10, 16), + M(-9, 16), + M(-8, 16), + M(-7, 16), + M(-6, 16), + M(-5, 16), + M(-4, 16), + M(-3, 16), + M(-2, 16), + M(-1, 16), + M(0, 16), + M(1, 16), + M(2, 16), + M(3, 16), + M(4, 16), + M(5, 16), + M(6, 16), + M(7, 16), + M(8, 16), + M(9, 16), + M(10, 16), + M(11, 16), + M(12, 16), + M(13, 16), + M(14, 16), + M(15, 16), + M(16, 16), + M(17, 16), + M(18, 16), + M(19, 16), + M(-19, 17), + M(-18, 17), + M(-17, 17), + M(-16, 17), + M(-15, 17), + M(-14, 17), + M(-13, 17), + M(-12, 17), + M(-11, 17), + M(-10, 17), + M(-9, 17), + M(-8, 17), + M(-7, 17), + M(-6, 17), + M(-5, 17), + M(-4, 17), + M(-3, 17), + M(-2, 17), + M(-1, 17), + M(0, 17), + M(1, 17), + M(2, 17), + M(3, 17), + M(4, 17), + M(5, 17), + M(6, 17), + M(7, 17), + M(8, 17), + M(9, 17), + M(10, 17), + M(11, 17), + M(12, 17), + M(13, 17), + M(14, 17), + M(15, 17), + M(16, 17), + M(17, 17), + M(18, 17), + M(19, 17), + M(-18, 18), + M(-17, 18), + M(-16, 18), + M(-15, 18), + M(-14, 18), + M(-13, 18), + M(-12, 18), + M(-11, 18), + M(-10, 18), + M(-9, 18), + M(-8, 18), + M(-7, 18), + M(-6, 18), + M(-5, 18), + M(-4, 18), + M(-3, 18), + M(-2, 18), + M(-1, 18), + M(0, 18), + M(1, 18), + M(2, 18), + M(3, 18), + M(4, 18), + M(5, 18), + M(6, 18), + M(7, 18), + M(8, 18), + M(9, 18), + M(10, 18), + M(11, 18), + M(12, 18), + M(13, 18), + M(14, 18), + M(15, 18), + M(16, 18), + M(17, 18), + M(18, 18), + M(-17, 19), + M(-16, 19), + M(-15, 19), + M(-14, 19), + M(-13, 19), + M(-12, 19), + M(-11, 19), + M(-10, 19), + M(-9, 19), + M(-8, 19), + M(-7, 19), + M(-6, 19), + M(-5, 19), + M(-4, 19), + M(-3, 19), + M(-2, 19), + M(-1, 19), + M(0, 19), + M(1, 19), + M(2, 19), + M(3, 19), + M(4, 19), + M(5, 19), + M(6, 19), + M(7, 19), + M(8, 19), + M(9, 19), + M(10, 19), + M(11, 19), + M(12, 19), + M(13, 19), + M(14, 19), + M(15, 19), + M(16, 19), + M(17, 19), + M(-15, 20), + M(-14, 20), + M(-13, 20), + M(-12, 20), + M(-11, 20), + M(-10, 20), + M(-9, 20), + M(-8, 20), + M(-7, 20), + M(-6, 20), + M(-5, 20), + M(-4, 20), + M(-3, 20), + M(-2, 20), + M(-1, 20), + M(0, 20), + M(1, 20), + M(2, 20), + M(3, 20), + M(4, 20), + M(5, 20), + M(6, 20), + M(7, 20), + M(8, 20), + M(9, 20), + M(10, 20), + M(11, 20), + M(12, 20), + M(13, 20), + M(14, 20), + M(15, 20), + M(-14, 21), + M(-13, 21), + M(-12, 21), + M(-11, 21), + M(-10, 21), + M(-9, 21), + M(-8, 21), + M(-7, 21), + M(-6, 21), + M(-5, 21), + M(-4, 21), + M(-3, 21), + M(-2, 21), + M(-1, 21), + M(0, 21), + M(1, 21), + M(2, 21), + M(3, 21), + M(4, 21), + M(5, 21), + M(6, 21), + M(7, 21), + M(8, 21), + M(9, 21), + M(10, 21), + M(11, 21), + M(12, 21), + M(13, 21), + M(14, 21), + M(-12, 22), + M(-11, 22), + M(-10, 22), + M(-9, 22), + M(-8, 22), + M(-7, 22), + M(-6, 22), + M(-5, 22), + M(-4, 22), + M(-3, 22), + M(-2, 22), + M(-1, 22), + M(0, 22), + M(1, 22), + M(2, 22), + M(3, 22), + M(4, 22), + M(5, 22), + M(6, 22), + M(7, 22), + M(8, 22), + M(9, 22), + M(10, 22), + M(11, 22), + M(12, 22), + M(-11, 23), + M(-10, 23), + M(-9, 23), + M(-8, 23), + M(-7, 23), + M(-6, 23), + M(-5, 23), + M(-4, 23), + M(-3, 23), + M(-2, 23), + M(-1, 23), + M(0, 23), + M(1, 23), + M(2, 23), + M(3, 23), + M(4, 23), + M(5, 23), + M(6, 23), + M(7, 23), + M(8, 23), + M(9, 23), + M(10, 23), + M(11, 23), + M(-8, 24), + M(-7, 24), + M(-6, 24), + M(-5, 24), + M(-4, 24), + M(-3, 24), + M(-2, 24), + M(-1, 24), + M(0, 24), + M(1, 24), + M(2, 24), + M(3, 24), + M(4, 24), + M(5, 24), + M(6, 24), + M(7, 24), + M(8, 24), + M(-5, 25), + M(-4, 25), + M(-3, 25), + M(-2, 25), + M(-1, 25), + M(0, 25), + M(1, 25), + M(2, 25), + M(3, 25), + M(4, 25), + M(5, 25) +}; + #undef M diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini index b302ae083e..86f1acbe93 100644 --- a/src/table/settings/settings.ini +++ b/src/table/settings/settings.ini @@ -3881,8 +3881,8 @@ var = game_creation.river_tropics_width type = SLE_UINT8 flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO def = 5 -min = 1 -max = 12 +min = 2 +max = 51 interval = 1 str = STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH strhelp = STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH_HELPTEXT @@ -3890,13 +3890,27 @@ strval = STR_JUST_COMMA cat = SC_BASIC patxname = ""rivers.game_creation.river_tropics_width"" +[SDT_VAR] +var = game_creation.lake_tropics_width +type = SLE_UINT8 +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO +def = 5 +min = 2 +max = 51 +interval = 1 +str = STR_CONFIG_SETTING_LAKE_TROPICS_WIDTH +strhelp = STR_CONFIG_SETTING_LAKE_TROPICS_WIDTH_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_BASIC +patxname = ""rivers.game_creation.lake_tropics_width"" + [SDT_VAR] var = game_creation.coast_tropics_width type = SLE_UINT8 flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY def = 0 min = 0 -max = 2 +max = 3 interval = 1 str = STR_CONFIG_SETTING_COAST_TROPICS_WIDTH strhelp = STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_HELPTEXT From 3bf2e850a5ae90ab5ac14d3d3e1c5ab74f21f1f2 Mon Sep 17 00:00:00 2001 From: reldred Date: Sun, 6 Mar 2022 11:17:14 +1030 Subject: [PATCH 4/5] undo the mess I made of JGR's fixes to my janky code --- src/landscape.cpp | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index c28b7ca62b..f0cff8cbd4 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1010,6 +1010,8 @@ static std::pair GetDesertOrRain return { _make_desert_or_rainforest_data_medium, endof(_make_desert_or_rainforest_data_medium) }; case 2: return { _make_desert_or_rainforest_data_large, endof(_make_desert_or_rainforest_data_large) }; + case 3: + return { _make_desert_or_rainforest_data_extralarge, endof(_make_desert_or_rainforest_data_extralarge) }; default: NOT_REACHED(); } @@ -1034,17 +1036,6 @@ static void CreateDesertOrRainForest(uint desert_tropic_line) if (data == desert_rainforest_data.second) { SetTropicZone(tile, TROPICZONE_DESERT); } - - if (_settings_game.game_creation.coast_tropics_width == 3) { - for (data = _make_desert_or_rainforest_data_extralarge; - data != endof(_make_desert_or_rainforest_data_extralarge); ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))) break; - } - if (data == endof(_make_desert_or_rainforest_data_extralarge)) { - SetTropicZone(tile, TROPICZONE_DESERT); - } - } } for (uint i = 0; i != 256; i++) { @@ -1065,17 +1056,6 @@ static void CreateDesertOrRainForest(uint desert_tropic_line) if (data == desert_rainforest_data.second) { SetTropicZone(tile, TROPICZONE_RAINFOREST); } - - if (_settings_game.game_creation.coast_tropics_width == 3) { - for (data = _make_desert_or_rainforest_data_extralarge; - data != endof(_make_desert_or_rainforest_data_extralarge); ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)) break; - } - if (data == endof(_make_desert_or_rainforest_data_extralarge)) { - SetTropicZone(tile, TROPICZONE_RAINFOREST); - } - } } } From 39d39a5c612a3315a4255b6a008edb2291316043 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 6 Mar 2022 02:05:12 +0000 Subject: [PATCH 5/5] Reduce duplication in desert or rainforeset data search arrays --- src/landscape.cpp | 34 +- src/table/genland.h | 3058 +------------------------------------------ 2 files changed, 90 insertions(+), 3002 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index f0cff8cbd4..a9c985b592 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1001,7 +1001,7 @@ static void GenerateTerrain(int type, uint flag) #include "table/genland.h" -static std::pair GetDesertOrRainforestData() +static std::pair GetDesertOrRainforestData() { switch (_settings_game.game_creation.coast_tropics_width) { case 0: @@ -1017,22 +1017,35 @@ static std::pair GetDesertOrRain } } +template +void DesertOrRainforestProcessTiles(const std::pair desert_rainforest_data, const Rect16 *&data, TileIndex tile, F handle_tile) +{ + for (data = desert_rainforest_data.first; data != desert_rainforest_data.second; ++data) { + const Rect16 r = *data; + for (int16 x = r.left; x <= r.right; x++) { + for (int16 y = r.top; y <= r.bottom; y++) { + TileIndex t = AddTileIndexDiffCWrap(tile, { x, y }); + if (handle_tile(t)) return; + } + } + } +} + static void CreateDesertOrRainForest(uint desert_tropic_line) { TileIndex update_freq = MapSize() / 4; - const TileIndexDiffC *data; + const Rect16 *data; - const std::pair desert_rainforest_data = GetDesertOrRainforestData(); + const std::pair desert_rainforest_data = GetDesertOrRainforestData(); for (TileIndex tile = 0; tile != MapSize(); ++tile) { if ((tile % update_freq) == 0) IncreaseGeneratingWorldProgress(GWP_LANDSCAPE); if (!IsValidTile(tile)) continue; - for (data = desert_rainforest_data.first; data != desert_rainforest_data.second; ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))) break; - } + DesertOrRainforestProcessTiles(desert_rainforest_data, data, tile, [&](TileIndex t) -> bool { + return (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))); + }); if (data == desert_rainforest_data.second) { SetTropicZone(tile, TROPICZONE_DESERT); } @@ -1049,10 +1062,9 @@ static void CreateDesertOrRainForest(uint desert_tropic_line) if (!IsValidTile(tile)) continue; - for (data = desert_rainforest_data.first; data != desert_rainforest_data.second; ++data) { - TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)) break; - } + DesertOrRainforestProcessTiles(desert_rainforest_data, data, tile, [&](TileIndex t) -> bool { + return (t != INVALID_TILE && IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_DESERT)); + }); if (data == desert_rainforest_data.second) { SetTropicZone(tile, TROPICZONE_RAINFOREST); } diff --git a/src/table/genland.h b/src/table/genland.h index 9e448df04c..3ddc0e05f3 100644 --- a/src/table/genland.h +++ b/src/table/genland.h @@ -7,3006 +7,82 @@ /** @file genland.h Table used to generate deserts and/or rain forests. */ -#define M(x, y) {x, y} +#define R(x1, x2, y1, y2) {x1, y1, x2, y2} // This default array draws a filled circle 13 tiles in diameter -static const TileIndexDiffC _make_desert_or_rainforest_data[] = { - M(-5, -5), - M(-4, -5), - M(-3, -5), - M(-2, -5), - M(-1, -5), - M( 0, -5), - M( 1, -5), - M( 2, -5), - M( 3, -5), - M( 4, -5), - M( 5, -5), - M(-5, -4), - M(-4, -4), - M(-3, -4), - M(-2, -4), - M(-1, -4), - M( 0, -4), - M( 1, -4), - M( 2, -4), - M( 3, -4), - M( 4, -4), - M( 5, -4), - M(-5, -3), - M(-4, -3), - M(-3, -3), - M(-2, -3), - M(-1, -3), - M( 0, -3), - M( 1, -3), - M( 2, -3), - M( 3, -3), - M( 4, -3), - M( 5, -3), - M(-5, -2), - M(-4, -2), - M(-3, -2), - M(-2, -2), - M(-1, -2), - M( 0, -2), - M( 1, -2), - M( 2, -2), - M( 3, -2), - M( 4, -2), - M( 5, -2), - M(-5, -1), - M(-4, -1), - M(-3, -1), - M(-2, -1), - M(-1, -1), - M( 0, -1), - M( 1, -1), - M( 2, -1), - M( 3, -1), - M( 4, -1), - M( 5, -1), - M(-5, 0), - M(-4, 0), - M(-3, 0), - M(-2, 0), - M(-1, 0), - M( 0, 0), - M( 1, 0), - M( 2, 0), - M( 3, 0), - M( 4, 0), - M( 5, 0), - M(-5, 1), - M(-4, 1), - M(-3, 1), - M(-2, 1), - M(-1, 1), - M( 0, 1), - M( 1, 1), - M( 2, 1), - M( 3, 1), - M( 4, 1), - M( 5, 1), - M(-5, 2), - M(-4, 2), - M(-3, 2), - M(-2, 2), - M(-1, 2), - M( 0, 2), - M( 1, 2), - M( 2, 2), - M( 3, 2), - M( 4, 2), - M( 5, 2), - M(-5, 3), - M(-4, 3), - M(-3, 3), - M(-2, 3), - M(-1, 3), - M( 0, 3), - M( 1, 3), - M( 2, 3), - M( 3, 3), - M( 4, 3), - M( 5, 3), - M(-5, 4), - M(-4, 4), - M(-3, 4), - M(-2, 4), - M(-1, 4), - M( 0, 4), - M( 1, 4), - M( 2, 4), - M( 3, 4), - M( 4, 4), - M( 5, 4), - M(-5, 5), - M(-4, 5), - M(-3, 5), - M(-2, 5), - M(-1, 5), - M( 0, 5), - M( 1, 5), - M( 2, 5), - M( 3, 5), - M( 4, 5), - M( 5, 5), - M( 6, -3), - M(-6, -3), - M(-3, 6), - M(-3, -6), - M( 6, -2), - M(-6, -2), - M(-2, 6), - M(-2, -6), - M( 6, -1), - M(-6, -1), - M(-1, 6), - M(-1, -6), - M( 6, 0), - M(-6, 0), - M( 0, 6), - M( 0, -6), - M( 6, 1), - M(-6, 1), - M( 1, 6), - M( 1, -6), - M( 6, 2), - M(-6, 2), - M( 2, 6), - M( 2, -6), - M( 6, 3), - M(-6, 3), - M( 3, 6), - M( 3, -6) +static const Rect16 _make_desert_or_rainforest_data[] = { + R(-5, 5, -5, 5), + R( 6, 6, -3, 3), + R(-6, -6, -3, 3), + R(-3, 3, 6, 6), + R(-3, 3, -6, -6) }; // This array draws a filled circle 19 tiles in diameter -static const TileIndexDiffC _make_desert_or_rainforest_data_medium[] = { - M(-3, -9), - M(-2, -9), - M(-1, -9), - M(0, -9), - M(1, -9), - M(2, -9), - M(3, -9), - M(-5, -8), - M(-4, -8), - M(-3, -8), - M(-2, -8), - M(-1, -8), - M(0, -8), - M(1, -8), - M(2, -8), - M(3, -8), - M(4, -8), - M(5, -8), - M(-6, -7), - M(-5, -7), - M(-4, -7), - M(-3, -7), - M(-2, -7), - M(-1, -7), - M(0, -7), - M(1, -7), - M(2, -7), - M(3, -7), - M(4, -7), - M(5, -7), - M(6, -7), - M(-7, -6), - M(-6, -6), - M(-5, -6), - M(-4, -6), - M(-3, -6), - M(-2, -6), - M(-1, -6), - M(0, -6), - M(1, -6), - M(2, -6), - M(3, -6), - M(4, -6), - M(5, -6), - M(6, -6), - M(7, -6), - M(-8, -5), - M(-7, -5), - M(-6, -5), - M(-5, -5), - M(-4, -5), - M(-3, -5), - M(-2, -5), - M(-1, -5), - M(0, -5), - M(1, -5), - M(2, -5), - M(3, -5), - M(4, -5), - M(5, -5), - M(6, -5), - M(7, -5), - M(8, -5), - M(-8, -4), - M(-7, -4), - M(-6, -4), - M(-5, -4), - M(-4, -4), - M(-3, -4), - M(-2, -4), - M(-1, -4), - M(0, -4), - M(1, -4), - M(2, -4), - M(3, -4), - M(4, -4), - M(5, -4), - M(6, -4), - M(7, -4), - M(8, -4), - M(-9, -3), - M(-8, -3), - M(-7, -3), - M(-6, -3), - M(-5, -3), - M(-4, -3), - M(-3, -3), - M(-2, -3), - M(-1, -3), - M(0, -3), - M(1, -3), - M(2, -3), - M(3, -3), - M(4, -3), - M(5, -3), - M(6, -3), - M(7, -3), - M(8, -3), - M(9, -3), - M(-9, -2), - M(-8, -2), - M(-7, -2), - M(-6, -2), - M(-5, -2), - M(-4, -2), - M(-3, -2), - M(-2, -2), - M(-1, -2), - M(0, -2), - M(1, -2), - M(2, -2), - M(3, -2), - M(4, -2), - M(5, -2), - M(6, -2), - M(7, -2), - M(8, -2), - M(9, -2), - M(-9, -1), - M(-8, -1), - M(-7, -1), - M(-6, -1), - M(-5, -1), - M(-4, -1), - M(-3, -1), - M(-2, -1), - M(-1, -1), - M(0, -1), - M(1, -1), - M(2, -1), - M(3, -1), - M(4, -1), - M(5, -1), - M(6, -1), - M(7, -1), - M(8, -1), - M(9, -1), - M(-9, 0), - M(-8, 0), - M(-7, 0), - M(-6, 0), - M(-5, 0), - M(-4, 0), - M(-3, 0), - M(-2, 0), - M(-1, 0), - M(0, 0), - M(1, 0), - M(2, 0), - M(3, 0), - M(4, 0), - M(5, 0), - M(6, 0), - M(7, 0), - M(8, 0), - M(9, 0), - M(-9, 1), - M(-8, 1), - M(-7, 1), - M(-6, 1), - M(-5, 1), - M(-4, 1), - M(-3, 1), - M(-2, 1), - M(-1, 1), - M(0, 1), - M(1, 1), - M(2, 1), - M(3, 1), - M(4, 1), - M(5, 1), - M(6, 1), - M(7, 1), - M(8, 1), - M(9, 1), - M(-9, 2), - M(-8, 2), - M(-7, 2), - M(-6, 2), - M(-5, 2), - M(-4, 2), - M(-3, 2), - M(-2, 2), - M(-1, 2), - M(0, 2), - M(1, 2), - M(2, 2), - M(3, 2), - M(4, 2), - M(5, 2), - M(6, 2), - M(7, 2), - M(8, 2), - M(9, 2), - M(-9, 3), - M(-8, 3), - M(-7, 3), - M(-6, 3), - M(-5, 3), - M(-4, 3), - M(-3, 3), - M(-2, 3), - M(-1, 3), - M(0, 3), - M(1, 3), - M(2, 3), - M(3, 3), - M(4, 3), - M(5, 3), - M(6, 3), - M(7, 3), - M(8, 3), - M(9, 3), - M(-8, 4), - M(-7, 4), - M(-6, 4), - M(-5, 4), - M(-4, 4), - M(-3, 4), - M(-2, 4), - M(-1, 4), - M(0, 4), - M(1, 4), - M(2, 4), - M(3, 4), - M(4, 4), - M(5, 4), - M(6, 4), - M(7, 4), - M(8, 4), - M(-8, 5), - M(-7, 5), - M(-6, 5), - M(-5, 5), - M(-4, 5), - M(-3, 5), - M(-2, 5), - M(-1, 5), - M(0, 5), - M(1, 5), - M(2, 5), - M(3, 5), - M(4, 5), - M(5, 5), - M(6, 5), - M(7, 5), - M(8, 5), - M(-7, 6), - M(-6, 6), - M(-5, 6), - M(-4, 6), - M(-3, 6), - M(-2, 6), - M(-1, 6), - M(0, 6), - M(1, 6), - M(2, 6), - M(3, 6), - M(4, 6), - M(5, 6), - M(6, 6), - M(7, 6), - M(-6, 7), - M(-5, 7), - M(-4, 7), - M(-3, 7), - M(-2, 7), - M(-1, 7), - M(0, 7), - M(1, 7), - M(2, 7), - M(3, 7), - M(4, 7), - M(5, 7), - M(6, 7), - M(-5, 8), - M(-4, 8), - M(-3, 8), - M(-2, 8), - M(-1, 8), - M(0, 8), - M(1, 8), - M(2, 8), - M(3, 8), - M(4, 8), - M(5, 8), - M(-3, 9), - M(-2, 9), - M(-1, 9), - M(0, 9), - M(1, 9), - M(2, 9), - M(3, 9) +static const Rect16 _make_desert_or_rainforest_data_medium[] = { + R(-3, 3, -9, -9), + R(-5, 5, -8, -8), + R(-6, 6, -7, -7), + R(-7, 7, -6, -6), + R(-8, 8, -5, -4), + R(-9, 9, -3, 3), + R(-8, 8, 4, 5), + R(-7, 7, 6, 6), + R(-6, 6, 7, 7), + R(-5, 5, 8, 8), + R(-3, 3, 9, 9) }; // This array draws a filled circle 25 tiles in diameter -static const TileIndexDiffC _make_desert_or_rainforest_data_large[] = { - M(-3, -12), - M(-2, -12), - M(-1, -12), - M(0, -12), - M(1, -12), - M(2, -12), - M(3, -12), - M(-5, -11), - M(-4, -11), - M(-3, -11), - M(-2, -11), - M(-1, -11), - M(0, -11), - M(1, -11), - M(2, -11), - M(3, -11), - M(4, -11), - M(5, -11), - M(-7, -10), - M(-6, -10), - M(-5, -10), - M(-4, -10), - M(-3, -10), - M(-2, -10), - M(-1, -10), - M(0, -10), - M(1, -10), - M(2, -10), - M(3, -10), - M(4, -10), - M(5, -10), - M(6, -10), - M(7, -10), - M(-8, -9), - M(-7, -9), - M(-6, -9), - M(-5, -9), - M(-4, -9), - M(-3, -9), - M(-2, -9), - M(-1, -9), - M(0, -9), - M(1, -9), - M(2, -9), - M(3, -9), - M(4, -9), - M(5, -9), - M(6, -9), - M(7, -9), - M(8, -9), - M(-9, -8), - M(-8, -8), - M(-7, -8), - M(-6, -8), - M(-5, -8), - M(-4, -8), - M(-3, -8), - M(-2, -8), - M(-1, -8), - M(0, -8), - M(1, -8), - M(2, -8), - M(3, -8), - M(4, -8), - M(5, -8), - M(6, -8), - M(7, -8), - M(8, -8), - M(9, -8), - M(-10, -7), - M(-9, -7), - M(-8, -7), - M(-7, -7), - M(-6, -7), - M(-5, -7), - M(-4, -7), - M(-3, -7), - M(-2, -7), - M(-1, -7), - M(0, -7), - M(1, -7), - M(2, -7), - M(3, -7), - M(4, -7), - M(5, -7), - M(6, -7), - M(7, -7), - M(8, -7), - M(9, -7), - M(10, -7), - M(-10, -6), - M(-9, -6), - M(-8, -6), - M(-7, -6), - M(-6, -6), - M(-5, -6), - M(-4, -6), - M(-3, -6), - M(-2, -6), - M(-1, -6), - M(0, -6), - M(1, -6), - M(2, -6), - M(3, -6), - M(4, -6), - M(5, -6), - M(6, -6), - M(7, -6), - M(8, -6), - M(9, -6), - M(10, -6), - M(-11, -5), - M(-10, -5), - M(-9, -5), - M(-8, -5), - M(-7, -5), - M(-6, -5), - M(-5, -5), - M(-4, -5), - M(-3, -5), - M(-2, -5), - M(-1, -5), - M(0, -5), - M(1, -5), - M(2, -5), - M(3, -5), - M(4, -5), - M(5, -5), - M(6, -5), - M(7, -5), - M(8, -5), - M(9, -5), - M(10, -5), - M(11, -5), - M(-11, -4), - M(-10, -4), - M(-9, -4), - M(-8, -4), - M(-7, -4), - M(-6, -4), - M(-5, -4), - M(-4, -4), - M(-3, -4), - M(-2, -4), - M(-1, -4), - M(0, -4), - M(1, -4), - M(2, -4), - M(3, -4), - M(4, -4), - M(5, -4), - M(6, -4), - M(7, -4), - M(8, -4), - M(9, -4), - M(10, -4), - M(11, -4), - M(-12, -3), - M(-11, -3), - M(-10, -3), - M(-9, -3), - M(-8, -3), - M(-7, -3), - M(-6, -3), - M(-5, -3), - M(-4, -3), - M(-3, -3), - M(-2, -3), - M(-1, -3), - M(0, -3), - M(1, -3), - M(2, -3), - M(3, -3), - M(4, -3), - M(5, -3), - M(6, -3), - M(7, -3), - M(8, -3), - M(9, -3), - M(10, -3), - M(11, -3), - M(12, -3), - M(-12, -2), - M(-11, -2), - M(-10, -2), - M(-9, -2), - M(-8, -2), - M(-7, -2), - M(-6, -2), - M(-5, -2), - M(-4, -2), - M(-3, -2), - M(-2, -2), - M(-1, -2), - M(0, -2), - M(1, -2), - M(2, -2), - M(3, -2), - M(4, -2), - M(5, -2), - M(6, -2), - M(7, -2), - M(8, -2), - M(9, -2), - M(10, -2), - M(11, -2), - M(12, -2), - M(-12, -1), - M(-11, -1), - M(-10, -1), - M(-9, -1), - M(-8, -1), - M(-7, -1), - M(-6, -1), - M(-5, -1), - M(-4, -1), - M(-3, -1), - M(-2, -1), - M(-1, -1), - M(0, -1), - M(1, -1), - M(2, -1), - M(3, -1), - M(4, -1), - M(5, -1), - M(6, -1), - M(7, -1), - M(8, -1), - M(9, -1), - M(10, -1), - M(11, -1), - M(12, -1), - M(-12, 0), - M(-11, 0), - M(-10, 0), - M(-9, 0), - M(-8, 0), - M(-7, 0), - M(-6, 0), - M(-5, 0), - M(-4, 0), - M(-3, 0), - M(-2, 0), - M(-1, 0), - M(0, 0), - M(1, 0), - M(2, 0), - M(3, 0), - M(4, 0), - M(5, 0), - M(6, 0), - M(7, 0), - M(8, 0), - M(9, 0), - M(10, 0), - M(11, 0), - M(12, 0), - M(-12, 1), - M(-11, 1), - M(-10, 1), - M(-9, 1), - M(-8, 1), - M(-7, 1), - M(-6, 1), - M(-5, 1), - M(-4, 1), - M(-3, 1), - M(-2, 1), - M(-1, 1), - M(0, 1), - M(1, 1), - M(2, 1), - M(3, 1), - M(4, 1), - M(5, 1), - M(6, 1), - M(7, 1), - M(8, 1), - M(9, 1), - M(10, 1), - M(11, 1), - M(12, 1), - M(-12, 2), - M(-11, 2), - M(-10, 2), - M(-9, 2), - M(-8, 2), - M(-7, 2), - M(-6, 2), - M(-5, 2), - M(-4, 2), - M(-3, 2), - M(-2, 2), - M(-1, 2), - M(0, 2), - M(1, 2), - M(2, 2), - M(3, 2), - M(4, 2), - M(5, 2), - M(6, 2), - M(7, 2), - M(8, 2), - M(9, 2), - M(10, 2), - M(11, 2), - M(12, 2), - M(-12, 3), - M(-11, 3), - M(-10, 3), - M(-9, 3), - M(-8, 3), - M(-7, 3), - M(-6, 3), - M(-5, 3), - M(-4, 3), - M(-3, 3), - M(-2, 3), - M(-1, 3), - M(0, 3), - M(1, 3), - M(2, 3), - M(3, 3), - M(4, 3), - M(5, 3), - M(6, 3), - M(7, 3), - M(8, 3), - M(9, 3), - M(10, 3), - M(11, 3), - M(12, 3), - M(-11, 4), - M(-10, 4), - M(-9, 4), - M(-8, 4), - M(-7, 4), - M(-6, 4), - M(-5, 4), - M(-4, 4), - M(-3, 4), - M(-2, 4), - M(-1, 4), - M(0, 4), - M(1, 4), - M(2, 4), - M(3, 4), - M(4, 4), - M(5, 4), - M(6, 4), - M(7, 4), - M(8, 4), - M(9, 4), - M(10, 4), - M(11, 4), - M(-11, 5), - M(-10, 5), - M(-9, 5), - M(-8, 5), - M(-7, 5), - M(-6, 5), - M(-5, 5), - M(-4, 5), - M(-3, 5), - M(-2, 5), - M(-1, 5), - M(0, 5), - M(1, 5), - M(2, 5), - M(3, 5), - M(4, 5), - M(5, 5), - M(6, 5), - M(7, 5), - M(8, 5), - M(9, 5), - M(10, 5), - M(11, 5), - M(-10, 6), - M(-9, 6), - M(-8, 6), - M(-7, 6), - M(-6, 6), - M(-5, 6), - M(-4, 6), - M(-3, 6), - M(-2, 6), - M(-1, 6), - M(0, 6), - M(1, 6), - M(2, 6), - M(3, 6), - M(4, 6), - M(5, 6), - M(6, 6), - M(7, 6), - M(8, 6), - M(9, 6), - M(10, 6), - M(-10, 7), - M(-9, 7), - M(-8, 7), - M(-7, 7), - M(-6, 7), - M(-5, 7), - M(-4, 7), - M(-3, 7), - M(-2, 7), - M(-1, 7), - M(0, 7), - M(1, 7), - M(2, 7), - M(3, 7), - M(4, 7), - M(5, 7), - M(6, 7), - M(7, 7), - M(8, 7), - M(9, 7), - M(10, 7), - M(-9, 8), - M(-8, 8), - M(-7, 8), - M(-6, 8), - M(-5, 8), - M(-4, 8), - M(-3, 8), - M(-2, 8), - M(-1, 8), - M(0, 8), - M(1, 8), - M(2, 8), - M(3, 8), - M(4, 8), - M(5, 8), - M(6, 8), - M(7, 8), - M(8, 8), - M(9, 8), - M(-8, 9), - M(-7, 9), - M(-6, 9), - M(-5, 9), - M(-4, 9), - M(-3, 9), - M(-2, 9), - M(-1, 9), - M(0, 9), - M(1, 9), - M(2, 9), - M(3, 9), - M(4, 9), - M(5, 9), - M(6, 9), - M(7, 9), - M(8, 9), - M(-7, 10), - M(-6, 10), - M(-5, 10), - M(-4, 10), - M(-3, 10), - M(-2, 10), - M(-1, 10), - M(0, 10), - M(1, 10), - M(2, 10), - M(3, 10), - M(4, 10), - M(5, 10), - M(6, 10), - M(7, 10), - M(-5, 11), - M(-4, 11), - M(-3, 11), - M(-2, 11), - M(-1, 11), - M(0, 11), - M(1, 11), - M(2, 11), - M(3, 11), - M(4, 11), - M(5, 11), - M(-3, 12), - M(-2, 12), - M(-1, 12), - M(0, 12), - M(1, 12), - M(2, 12), - M(3, 12), +static const Rect16 _make_desert_or_rainforest_data_large[] = { + R( -3, 3, -12, -12), + R( -5, 5, -11, -11), + R( -7, 7, -10, -10), + R( -8, 8, -9, -9), + R( -9, 9, -8, -8), + R(-10, 10, -7, -6), + R(-11, 11, -5, -4), + R(-12, 12, -3, 3), + R(-11, 11, 4, 5), + R(-10, 10, 6, 7), + R( -9, 9, 8, 8), + R( -8, 8, 9, 9), + R( -7, 7, 10, 10), + R( -5, 5, 11, 11), + R( -3, 3, 12, 12) }; -// This array draws a filled circle 51 tiles in diameter. This is stupid. -static const TileIndexDiffC _make_desert_or_rainforest_data_extralarge[] = { - M(-5, -25), - M(-4, -25), - M(-3, -25), - M(-2, -25), - M(-1, -25), - M(0, -25), - M(1, -25), - M(2, -25), - M(3, -25), - M(4, -25), - M(5, -25), - M(-8, -24), - M(-7, -24), - M(-6, -24), - M(-5, -24), - M(-4, -24), - M(-3, -24), - M(-2, -24), - M(-1, -24), - M(0, -24), - M(1, -24), - M(2, -24), - M(3, -24), - M(4, -24), - M(5, -24), - M(6, -24), - M(7, -24), - M(8, -24), - M(-11, -23), - M(-10, -23), - M(-9, -23), - M(-8, -23), - M(-7, -23), - M(-6, -23), - M(-5, -23), - M(-4, -23), - M(-3, -23), - M(-2, -23), - M(-1, -23), - M(0, -23), - M(1, -23), - M(2, -23), - M(3, -23), - M(4, -23), - M(5, -23), - M(6, -23), - M(7, -23), - M(8, -23), - M(9, -23), - M(10, -23), - M(11, -23), - M(-12, -22), - M(-11, -22), - M(-10, -22), - M(-9, -22), - M(-8, -22), - M(-7, -22), - M(-6, -22), - M(-5, -22), - M(-4, -22), - M(-3, -22), - M(-2, -22), - M(-1, -22), - M(0, -22), - M(1, -22), - M(2, -22), - M(3, -22), - M(4, -22), - M(5, -22), - M(6, -22), - M(7, -22), - M(8, -22), - M(9, -22), - M(10, -22), - M(11, -22), - M(12, -22), - M(-14, -21), - M(-13, -21), - M(-12, -21), - M(-11, -21), - M(-10, -21), - M(-9, -21), - M(-8, -21), - M(-7, -21), - M(-6, -21), - M(-5, -21), - M(-4, -21), - M(-3, -21), - M(-2, -21), - M(-1, -21), - M(0, -21), - M(1, -21), - M(2, -21), - M(3, -21), - M(4, -21), - M(5, -21), - M(6, -21), - M(7, -21), - M(8, -21), - M(9, -21), - M(10, -21), - M(11, -21), - M(12, -21), - M(13, -21), - M(14, -21), - M(-15, -20), - M(-14, -20), - M(-13, -20), - M(-12, -20), - M(-11, -20), - M(-10, -20), - M(-9, -20), - M(-8, -20), - M(-7, -20), - M(-6, -20), - M(-5, -20), - M(-4, -20), - M(-3, -20), - M(-2, -20), - M(-1, -20), - M(0, -20), - M(1, -20), - M(2, -20), - M(3, -20), - M(4, -20), - M(5, -20), - M(6, -20), - M(7, -20), - M(8, -20), - M(9, -20), - M(10, -20), - M(11, -20), - M(12, -20), - M(13, -20), - M(14, -20), - M(15, -20), - M(-17, -19), - M(-16, -19), - M(-15, -19), - M(-14, -19), - M(-13, -19), - M(-12, -19), - M(-11, -19), - M(-10, -19), - M(-9, -19), - M(-8, -19), - M(-7, -19), - M(-6, -19), - M(-5, -19), - M(-4, -19), - M(-3, -19), - M(-2, -19), - M(-1, -19), - M(0, -19), - M(1, -19), - M(2, -19), - M(3, -19), - M(4, -19), - M(5, -19), - M(6, -19), - M(7, -19), - M(8, -19), - M(9, -19), - M(10, -19), - M(11, -19), - M(12, -19), - M(13, -19), - M(14, -19), - M(15, -19), - M(16, -19), - M(17, -19), - M(-18, -18), - M(-17, -18), - M(-16, -18), - M(-15, -18), - M(-14, -18), - M(-13, -18), - M(-12, -18), - M(-11, -18), - M(-10, -18), - M(-9, -18), - M(-8, -18), - M(-7, -18), - M(-6, -18), - M(-5, -18), - M(-4, -18), - M(-3, -18), - M(-2, -18), - M(-1, -18), - M(0, -18), - M(1, -18), - M(2, -18), - M(3, -18), - M(4, -18), - M(5, -18), - M(6, -18), - M(7, -18), - M(8, -18), - M(9, -18), - M(10, -18), - M(11, -18), - M(12, -18), - M(13, -18), - M(14, -18), - M(15, -18), - M(16, -18), - M(17, -18), - M(18, -18), - M(-19, -17), - M(-18, -17), - M(-17, -17), - M(-16, -17), - M(-15, -17), - M(-14, -17), - M(-13, -17), - M(-12, -17), - M(-11, -17), - M(-10, -17), - M(-9, -17), - M(-8, -17), - M(-7, -17), - M(-6, -17), - M(-5, -17), - M(-4, -17), - M(-3, -17), - M(-2, -17), - M(-1, -17), - M(0, -17), - M(1, -17), - M(2, -17), - M(3, -17), - M(4, -17), - M(5, -17), - M(6, -17), - M(7, -17), - M(8, -17), - M(9, -17), - M(10, -17), - M(11, -17), - M(12, -17), - M(13, -17), - M(14, -17), - M(15, -17), - M(16, -17), - M(17, -17), - M(18, -17), - M(19, -17), - M(-19, -16), - M(-18, -16), - M(-17, -16), - M(-16, -16), - M(-15, -16), - M(-14, -16), - M(-13, -16), - M(-12, -16), - M(-11, -16), - M(-10, -16), - M(-9, -16), - M(-8, -16), - M(-7, -16), - M(-6, -16), - M(-5, -16), - M(-4, -16), - M(-3, -16), - M(-2, -16), - M(-1, -16), - M(0, -16), - M(1, -16), - M(2, -16), - M(3, -16), - M(4, -16), - M(5, -16), - M(6, -16), - M(7, -16), - M(8, -16), - M(9, -16), - M(10, -16), - M(11, -16), - M(12, -16), - M(13, -16), - M(14, -16), - M(15, -16), - M(16, -16), - M(17, -16), - M(18, -16), - M(19, -16), - M(-20, -15), - M(-19, -15), - M(-18, -15), - M(-17, -15), - M(-16, -15), - M(-15, -15), - M(-14, -15), - M(-13, -15), - M(-12, -15), - M(-11, -15), - M(-10, -15), - M(-9, -15), - M(-8, -15), - M(-7, -15), - M(-6, -15), - M(-5, -15), - M(-4, -15), - M(-3, -15), - M(-2, -15), - M(-1, -15), - M(0, -15), - M(1, -15), - M(2, -15), - M(3, -15), - M(4, -15), - M(5, -15), - M(6, -15), - M(7, -15), - M(8, -15), - M(9, -15), - M(10, -15), - M(11, -15), - M(12, -15), - M(13, -15), - M(14, -15), - M(15, -15), - M(16, -15), - M(17, -15), - M(18, -15), - M(19, -15), - M(20, -15), - M(-21, -14), - M(-20, -14), - M(-19, -14), - M(-18, -14), - M(-17, -14), - M(-16, -14), - M(-15, -14), - M(-14, -14), - M(-13, -14), - M(-12, -14), - M(-11, -14), - M(-10, -14), - M(-9, -14), - M(-8, -14), - M(-7, -14), - M(-6, -14), - M(-5, -14), - M(-4, -14), - M(-3, -14), - M(-2, -14), - M(-1, -14), - M(0, -14), - M(1, -14), - M(2, -14), - M(3, -14), - M(4, -14), - M(5, -14), - M(6, -14), - M(7, -14), - M(8, -14), - M(9, -14), - M(10, -14), - M(11, -14), - M(12, -14), - M(13, -14), - M(14, -14), - M(15, -14), - M(16, -14), - M(17, -14), - M(18, -14), - M(19, -14), - M(20, -14), - M(21, -14), - M(-21, -13), - M(-20, -13), - M(-19, -13), - M(-18, -13), - M(-17, -13), - M(-16, -13), - M(-15, -13), - M(-14, -13), - M(-13, -13), - M(-12, -13), - M(-11, -13), - M(-10, -13), - M(-9, -13), - M(-8, -13), - M(-7, -13), - M(-6, -13), - M(-5, -13), - M(-4, -13), - M(-3, -13), - M(-2, -13), - M(-1, -13), - M(0, -13), - M(1, -13), - M(2, -13), - M(3, -13), - M(4, -13), - M(5, -13), - M(6, -13), - M(7, -13), - M(8, -13), - M(9, -13), - M(10, -13), - M(11, -13), - M(12, -13), - M(13, -13), - M(14, -13), - M(15, -13), - M(16, -13), - M(17, -13), - M(18, -13), - M(19, -13), - M(20, -13), - M(21, -13), - M(-22, -12), - M(-21, -12), - M(-20, -12), - M(-19, -12), - M(-18, -12), - M(-17, -12), - M(-16, -12), - M(-15, -12), - M(-14, -12), - M(-13, -12), - M(-12, -12), - M(-11, -12), - M(-10, -12), - M(-9, -12), - M(-8, -12), - M(-7, -12), - M(-6, -12), - M(-5, -12), - M(-4, -12), - M(-3, -12), - M(-2, -12), - M(-1, -12), - M(0, -12), - M(1, -12), - M(2, -12), - M(3, -12), - M(4, -12), - M(5, -12), - M(6, -12), - M(7, -12), - M(8, -12), - M(9, -12), - M(10, -12), - M(11, -12), - M(12, -12), - M(13, -12), - M(14, -12), - M(15, -12), - M(16, -12), - M(17, -12), - M(18, -12), - M(19, -12), - M(20, -12), - M(21, -12), - M(22, -12), - M(-23, -11), - M(-22, -11), - M(-21, -11), - M(-20, -11), - M(-19, -11), - M(-18, -11), - M(-17, -11), - M(-16, -11), - M(-15, -11), - M(-14, -11), - M(-13, -11), - M(-12, -11), - M(-11, -11), - M(-10, -11), - M(-9, -11), - M(-8, -11), - M(-7, -11), - M(-6, -11), - M(-5, -11), - M(-4, -11), - M(-3, -11), - M(-2, -11), - M(-1, -11), - M(0, -11), - M(1, -11), - M(2, -11), - M(3, -11), - M(4, -11), - M(5, -11), - M(6, -11), - M(7, -11), - M(8, -11), - M(9, -11), - M(10, -11), - M(11, -11), - M(12, -11), - M(13, -11), - M(14, -11), - M(15, -11), - M(16, -11), - M(17, -11), - M(18, -11), - M(19, -11), - M(20, -11), - M(21, -11), - M(22, -11), - M(23, -11), - M(-23, -10), - M(-22, -10), - M(-21, -10), - M(-20, -10), - M(-19, -10), - M(-18, -10), - M(-17, -10), - M(-16, -10), - M(-15, -10), - M(-14, -10), - M(-13, -10), - M(-12, -10), - M(-11, -10), - M(-10, -10), - M(-9, -10), - M(-8, -10), - M(-7, -10), - M(-6, -10), - M(-5, -10), - M(-4, -10), - M(-3, -10), - M(-2, -10), - M(-1, -10), - M(0, -10), - M(1, -10), - M(2, -10), - M(3, -10), - M(4, -10), - M(5, -10), - M(6, -10), - M(7, -10), - M(8, -10), - M(9, -10), - M(10, -10), - M(11, -10), - M(12, -10), - M(13, -10), - M(14, -10), - M(15, -10), - M(16, -10), - M(17, -10), - M(18, -10), - M(19, -10), - M(20, -10), - M(21, -10), - M(22, -10), - M(23, -10), - M(-23, -9), - M(-22, -9), - M(-21, -9), - M(-20, -9), - M(-19, -9), - M(-18, -9), - M(-17, -9), - M(-16, -9), - M(-15, -9), - M(-14, -9), - M(-13, -9), - M(-12, -9), - M(-11, -9), - M(-10, -9), - M(-9, -9), - M(-8, -9), - M(-7, -9), - M(-6, -9), - M(-5, -9), - M(-4, -9), - M(-3, -9), - M(-2, -9), - M(-1, -9), - M(0, -9), - M(1, -9), - M(2, -9), - M(3, -9), - M(4, -9), - M(5, -9), - M(6, -9), - M(7, -9), - M(8, -9), - M(9, -9), - M(10, -9), - M(11, -9), - M(12, -9), - M(13, -9), - M(14, -9), - M(15, -9), - M(16, -9), - M(17, -9), - M(18, -9), - M(19, -9), - M(20, -9), - M(21, -9), - M(22, -9), - M(23, -9), - M(-24, -8), - M(-23, -8), - M(-22, -8), - M(-21, -8), - M(-20, -8), - M(-19, -8), - M(-18, -8), - M(-17, -8), - M(-16, -8), - M(-15, -8), - M(-14, -8), - M(-13, -8), - M(-12, -8), - M(-11, -8), - M(-10, -8), - M(-9, -8), - M(-8, -8), - M(-7, -8), - M(-6, -8), - M(-5, -8), - M(-4, -8), - M(-3, -8), - M(-2, -8), - M(-1, -8), - M(0, -8), - M(1, -8), - M(2, -8), - M(3, -8), - M(4, -8), - M(5, -8), - M(6, -8), - M(7, -8), - M(8, -8), - M(9, -8), - M(10, -8), - M(11, -8), - M(12, -8), - M(13, -8), - M(14, -8), - M(15, -8), - M(16, -8), - M(17, -8), - M(18, -8), - M(19, -8), - M(20, -8), - M(21, -8), - M(22, -8), - M(23, -8), - M(24, -8), - M(-24, -7), - M(-23, -7), - M(-22, -7), - M(-21, -7), - M(-20, -7), - M(-19, -7), - M(-18, -7), - M(-17, -7), - M(-16, -7), - M(-15, -7), - M(-14, -7), - M(-13, -7), - M(-12, -7), - M(-11, -7), - M(-10, -7), - M(-9, -7), - M(-8, -7), - M(-7, -7), - M(-6, -7), - M(-5, -7), - M(-4, -7), - M(-3, -7), - M(-2, -7), - M(-1, -7), - M(0, -7), - M(1, -7), - M(2, -7), - M(3, -7), - M(4, -7), - M(5, -7), - M(6, -7), - M(7, -7), - M(8, -7), - M(9, -7), - M(10, -7), - M(11, -7), - M(12, -7), - M(13, -7), - M(14, -7), - M(15, -7), - M(16, -7), - M(17, -7), - M(18, -7), - M(19, -7), - M(20, -7), - M(21, -7), - M(22, -7), - M(23, -7), - M(24, -7), - M(-24, -6), - M(-23, -6), - M(-22, -6), - M(-21, -6), - M(-20, -6), - M(-19, -6), - M(-18, -6), - M(-17, -6), - M(-16, -6), - M(-15, -6), - M(-14, -6), - M(-13, -6), - M(-12, -6), - M(-11, -6), - M(-10, -6), - M(-9, -6), - M(-8, -6), - M(-7, -6), - M(-6, -6), - M(-5, -6), - M(-4, -6), - M(-3, -6), - M(-2, -6), - M(-1, -6), - M(0, -6), - M(1, -6), - M(2, -6), - M(3, -6), - M(4, -6), - M(5, -6), - M(6, -6), - M(7, -6), - M(8, -6), - M(9, -6), - M(10, -6), - M(11, -6), - M(12, -6), - M(13, -6), - M(14, -6), - M(15, -6), - M(16, -6), - M(17, -6), - M(18, -6), - M(19, -6), - M(20, -6), - M(21, -6), - M(22, -6), - M(23, -6), - M(24, -6), - M(-25, -5), - M(-24, -5), - M(-23, -5), - M(-22, -5), - M(-21, -5), - M(-20, -5), - M(-19, -5), - M(-18, -5), - M(-17, -5), - M(-16, -5), - M(-15, -5), - M(-14, -5), - M(-13, -5), - M(-12, -5), - M(-11, -5), - M(-10, -5), - M(-9, -5), - M(-8, -5), - M(-7, -5), - M(-6, -5), - M(-5, -5), - M(-4, -5), - M(-3, -5), - M(-2, -5), - M(-1, -5), - M(0, -5), - M(1, -5), - M(2, -5), - M(3, -5), - M(4, -5), - M(5, -5), - M(6, -5), - M(7, -5), - M(8, -5), - M(9, -5), - M(10, -5), - M(11, -5), - M(12, -5), - M(13, -5), - M(14, -5), - M(15, -5), - M(16, -5), - M(17, -5), - M(18, -5), - M(19, -5), - M(20, -5), - M(21, -5), - M(22, -5), - M(23, -5), - M(24, -5), - M(25, -5), - M(-25, -4), - M(-24, -4), - M(-23, -4), - M(-22, -4), - M(-21, -4), - M(-20, -4), - M(-19, -4), - M(-18, -4), - M(-17, -4), - M(-16, -4), - M(-15, -4), - M(-14, -4), - M(-13, -4), - M(-12, -4), - M(-11, -4), - M(-10, -4), - M(-9, -4), - M(-8, -4), - M(-7, -4), - M(-6, -4), - M(-5, -4), - M(-4, -4), - M(-3, -4), - M(-2, -4), - M(-1, -4), - M(0, -4), - M(1, -4), - M(2, -4), - M(3, -4), - M(4, -4), - M(5, -4), - M(6, -4), - M(7, -4), - M(8, -4), - M(9, -4), - M(10, -4), - M(11, -4), - M(12, -4), - M(13, -4), - M(14, -4), - M(15, -4), - M(16, -4), - M(17, -4), - M(18, -4), - M(19, -4), - M(20, -4), - M(21, -4), - M(22, -4), - M(23, -4), - M(24, -4), - M(25, -4), - M(-25, -3), - M(-24, -3), - M(-23, -3), - M(-22, -3), - M(-21, -3), - M(-20, -3), - M(-19, -3), - M(-18, -3), - M(-17, -3), - M(-16, -3), - M(-15, -3), - M(-14, -3), - M(-13, -3), - M(-12, -3), - M(-11, -3), - M(-10, -3), - M(-9, -3), - M(-8, -3), - M(-7, -3), - M(-6, -3), - M(-5, -3), - M(-4, -3), - M(-3, -3), - M(-2, -3), - M(-1, -3), - M(0, -3), - M(1, -3), - M(2, -3), - M(3, -3), - M(4, -3), - M(5, -3), - M(6, -3), - M(7, -3), - M(8, -3), - M(9, -3), - M(10, -3), - M(11, -3), - M(12, -3), - M(13, -3), - M(14, -3), - M(15, -3), - M(16, -3), - M(17, -3), - M(18, -3), - M(19, -3), - M(20, -3), - M(21, -3), - M(22, -3), - M(23, -3), - M(24, -3), - M(25, -3), - M(-25, -2), - M(-24, -2), - M(-23, -2), - M(-22, -2), - M(-21, -2), - M(-20, -2), - M(-19, -2), - M(-18, -2), - M(-17, -2), - M(-16, -2), - M(-15, -2), - M(-14, -2), - M(-13, -2), - M(-12, -2), - M(-11, -2), - M(-10, -2), - M(-9, -2), - M(-8, -2), - M(-7, -2), - M(-6, -2), - M(-5, -2), - M(-4, -2), - M(-3, -2), - M(-2, -2), - M(-1, -2), - M(0, -2), - M(1, -2), - M(2, -2), - M(3, -2), - M(4, -2), - M(5, -2), - M(6, -2), - M(7, -2), - M(8, -2), - M(9, -2), - M(10, -2), - M(11, -2), - M(12, -2), - M(13, -2), - M(14, -2), - M(15, -2), - M(16, -2), - M(17, -2), - M(18, -2), - M(19, -2), - M(20, -2), - M(21, -2), - M(22, -2), - M(23, -2), - M(24, -2), - M(25, -2), - M(-25, -1), - M(-24, -1), - M(-23, -1), - M(-22, -1), - M(-21, -1), - M(-20, -1), - M(-19, -1), - M(-18, -1), - M(-17, -1), - M(-16, -1), - M(-15, -1), - M(-14, -1), - M(-13, -1), - M(-12, -1), - M(-11, -1), - M(-10, -1), - M(-9, -1), - M(-8, -1), - M(-7, -1), - M(-6, -1), - M(-5, -1), - M(-4, -1), - M(-3, -1), - M(-2, -1), - M(-1, -1), - M(0, -1), - M(1, -1), - M(2, -1), - M(3, -1), - M(4, -1), - M(5, -1), - M(6, -1), - M(7, -1), - M(8, -1), - M(9, -1), - M(10, -1), - M(11, -1), - M(12, -1), - M(13, -1), - M(14, -1), - M(15, -1), - M(16, -1), - M(17, -1), - M(18, -1), - M(19, -1), - M(20, -1), - M(21, -1), - M(22, -1), - M(23, -1), - M(24, -1), - M(25, -1), - M(-25, 0), - M(-24, 0), - M(-23, 0), - M(-22, 0), - M(-21, 0), - M(-20, 0), - M(-19, 0), - M(-18, 0), - M(-17, 0), - M(-16, 0), - M(-15, 0), - M(-14, 0), - M(-13, 0), - M(-12, 0), - M(-11, 0), - M(-10, 0), - M(-9, 0), - M(-8, 0), - M(-7, 0), - M(-6, 0), - M(-5, 0), - M(-4, 0), - M(-3, 0), - M(-2, 0), - M(-1, 0), - M(0, 0), - M(1, 0), - M(2, 0), - M(3, 0), - M(4, 0), - M(5, 0), - M(6, 0), - M(7, 0), - M(8, 0), - M(9, 0), - M(10, 0), - M(11, 0), - M(12, 0), - M(13, 0), - M(14, 0), - M(15, 0), - M(16, 0), - M(17, 0), - M(18, 0), - M(19, 0), - M(20, 0), - M(21, 0), - M(22, 0), - M(23, 0), - M(24, 0), - M(25, 0), - M(-25, 1), - M(-24, 1), - M(-23, 1), - M(-22, 1), - M(-21, 1), - M(-20, 1), - M(-19, 1), - M(-18, 1), - M(-17, 1), - M(-16, 1), - M(-15, 1), - M(-14, 1), - M(-13, 1), - M(-12, 1), - M(-11, 1), - M(-10, 1), - M(-9, 1), - M(-8, 1), - M(-7, 1), - M(-6, 1), - M(-5, 1), - M(-4, 1), - M(-3, 1), - M(-2, 1), - M(-1, 1), - M(0, 1), - M(1, 1), - M(2, 1), - M(3, 1), - M(4, 1), - M(5, 1), - M(6, 1), - M(7, 1), - M(8, 1), - M(9, 1), - M(10, 1), - M(11, 1), - M(12, 1), - M(13, 1), - M(14, 1), - M(15, 1), - M(16, 1), - M(17, 1), - M(18, 1), - M(19, 1), - M(20, 1), - M(21, 1), - M(22, 1), - M(23, 1), - M(24, 1), - M(25, 1), - M(-25, 2), - M(-24, 2), - M(-23, 2), - M(-22, 2), - M(-21, 2), - M(-20, 2), - M(-19, 2), - M(-18, 2), - M(-17, 2), - M(-16, 2), - M(-15, 2), - M(-14, 2), - M(-13, 2), - M(-12, 2), - M(-11, 2), - M(-10, 2), - M(-9, 2), - M(-8, 2), - M(-7, 2), - M(-6, 2), - M(-5, 2), - M(-4, 2), - M(-3, 2), - M(-2, 2), - M(-1, 2), - M(0, 2), - M(1, 2), - M(2, 2), - M(3, 2), - M(4, 2), - M(5, 2), - M(6, 2), - M(7, 2), - M(8, 2), - M(9, 2), - M(10, 2), - M(11, 2), - M(12, 2), - M(13, 2), - M(14, 2), - M(15, 2), - M(16, 2), - M(17, 2), - M(18, 2), - M(19, 2), - M(20, 2), - M(21, 2), - M(22, 2), - M(23, 2), - M(24, 2), - M(25, 2), - M(-25, 3), - M(-24, 3), - M(-23, 3), - M(-22, 3), - M(-21, 3), - M(-20, 3), - M(-19, 3), - M(-18, 3), - M(-17, 3), - M(-16, 3), - M(-15, 3), - M(-14, 3), - M(-13, 3), - M(-12, 3), - M(-11, 3), - M(-10, 3), - M(-9, 3), - M(-8, 3), - M(-7, 3), - M(-6, 3), - M(-5, 3), - M(-4, 3), - M(-3, 3), - M(-2, 3), - M(-1, 3), - M(0, 3), - M(1, 3), - M(2, 3), - M(3, 3), - M(4, 3), - M(5, 3), - M(6, 3), - M(7, 3), - M(8, 3), - M(9, 3), - M(10, 3), - M(11, 3), - M(12, 3), - M(13, 3), - M(14, 3), - M(15, 3), - M(16, 3), - M(17, 3), - M(18, 3), - M(19, 3), - M(20, 3), - M(21, 3), - M(22, 3), - M(23, 3), - M(24, 3), - M(25, 3), - M(-25, 4), - M(-24, 4), - M(-23, 4), - M(-22, 4), - M(-21, 4), - M(-20, 4), - M(-19, 4), - M(-18, 4), - M(-17, 4), - M(-16, 4), - M(-15, 4), - M(-14, 4), - M(-13, 4), - M(-12, 4), - M(-11, 4), - M(-10, 4), - M(-9, 4), - M(-8, 4), - M(-7, 4), - M(-6, 4), - M(-5, 4), - M(-4, 4), - M(-3, 4), - M(-2, 4), - M(-1, 4), - M(0, 4), - M(1, 4), - M(2, 4), - M(3, 4), - M(4, 4), - M(5, 4), - M(6, 4), - M(7, 4), - M(8, 4), - M(9, 4), - M(10, 4), - M(11, 4), - M(12, 4), - M(13, 4), - M(14, 4), - M(15, 4), - M(16, 4), - M(17, 4), - M(18, 4), - M(19, 4), - M(20, 4), - M(21, 4), - M(22, 4), - M(23, 4), - M(24, 4), - M(25, 4), - M(-25, 5), - M(-24, 5), - M(-23, 5), - M(-22, 5), - M(-21, 5), - M(-20, 5), - M(-19, 5), - M(-18, 5), - M(-17, 5), - M(-16, 5), - M(-15, 5), - M(-14, 5), - M(-13, 5), - M(-12, 5), - M(-11, 5), - M(-10, 5), - M(-9, 5), - M(-8, 5), - M(-7, 5), - M(-6, 5), - M(-5, 5), - M(-4, 5), - M(-3, 5), - M(-2, 5), - M(-1, 5), - M(0, 5), - M(1, 5), - M(2, 5), - M(3, 5), - M(4, 5), - M(5, 5), - M(6, 5), - M(7, 5), - M(8, 5), - M(9, 5), - M(10, 5), - M(11, 5), - M(12, 5), - M(13, 5), - M(14, 5), - M(15, 5), - M(16, 5), - M(17, 5), - M(18, 5), - M(19, 5), - M(20, 5), - M(21, 5), - M(22, 5), - M(23, 5), - M(24, 5), - M(25, 5), - M(-24, 6), - M(-23, 6), - M(-22, 6), - M(-21, 6), - M(-20, 6), - M(-19, 6), - M(-18, 6), - M(-17, 6), - M(-16, 6), - M(-15, 6), - M(-14, 6), - M(-13, 6), - M(-12, 6), - M(-11, 6), - M(-10, 6), - M(-9, 6), - M(-8, 6), - M(-7, 6), - M(-6, 6), - M(-5, 6), - M(-4, 6), - M(-3, 6), - M(-2, 6), - M(-1, 6), - M(0, 6), - M(1, 6), - M(2, 6), - M(3, 6), - M(4, 6), - M(5, 6), - M(6, 6), - M(7, 6), - M(8, 6), - M(9, 6), - M(10, 6), - M(11, 6), - M(12, 6), - M(13, 6), - M(14, 6), - M(15, 6), - M(16, 6), - M(17, 6), - M(18, 6), - M(19, 6), - M(20, 6), - M(21, 6), - M(22, 6), - M(23, 6), - M(24, 6), - M(-24, 7), - M(-23, 7), - M(-22, 7), - M(-21, 7), - M(-20, 7), - M(-19, 7), - M(-18, 7), - M(-17, 7), - M(-16, 7), - M(-15, 7), - M(-14, 7), - M(-13, 7), - M(-12, 7), - M(-11, 7), - M(-10, 7), - M(-9, 7), - M(-8, 7), - M(-7, 7), - M(-6, 7), - M(-5, 7), - M(-4, 7), - M(-3, 7), - M(-2, 7), - M(-1, 7), - M(0, 7), - M(1, 7), - M(2, 7), - M(3, 7), - M(4, 7), - M(5, 7), - M(6, 7), - M(7, 7), - M(8, 7), - M(9, 7), - M(10, 7), - M(11, 7), - M(12, 7), - M(13, 7), - M(14, 7), - M(15, 7), - M(16, 7), - M(17, 7), - M(18, 7), - M(19, 7), - M(20, 7), - M(21, 7), - M(22, 7), - M(23, 7), - M(24, 7), - M(-24, 8), - M(-23, 8), - M(-22, 8), - M(-21, 8), - M(-20, 8), - M(-19, 8), - M(-18, 8), - M(-17, 8), - M(-16, 8), - M(-15, 8), - M(-14, 8), - M(-13, 8), - M(-12, 8), - M(-11, 8), - M(-10, 8), - M(-9, 8), - M(-8, 8), - M(-7, 8), - M(-6, 8), - M(-5, 8), - M(-4, 8), - M(-3, 8), - M(-2, 8), - M(-1, 8), - M(0, 8), - M(1, 8), - M(2, 8), - M(3, 8), - M(4, 8), - M(5, 8), - M(6, 8), - M(7, 8), - M(8, 8), - M(9, 8), - M(10, 8), - M(11, 8), - M(12, 8), - M(13, 8), - M(14, 8), - M(15, 8), - M(16, 8), - M(17, 8), - M(18, 8), - M(19, 8), - M(20, 8), - M(21, 8), - M(22, 8), - M(23, 8), - M(24, 8), - M(-23, 9), - M(-22, 9), - M(-21, 9), - M(-20, 9), - M(-19, 9), - M(-18, 9), - M(-17, 9), - M(-16, 9), - M(-15, 9), - M(-14, 9), - M(-13, 9), - M(-12, 9), - M(-11, 9), - M(-10, 9), - M(-9, 9), - M(-8, 9), - M(-7, 9), - M(-6, 9), - M(-5, 9), - M(-4, 9), - M(-3, 9), - M(-2, 9), - M(-1, 9), - M(0, 9), - M(1, 9), - M(2, 9), - M(3, 9), - M(4, 9), - M(5, 9), - M(6, 9), - M(7, 9), - M(8, 9), - M(9, 9), - M(10, 9), - M(11, 9), - M(12, 9), - M(13, 9), - M(14, 9), - M(15, 9), - M(16, 9), - M(17, 9), - M(18, 9), - M(19, 9), - M(20, 9), - M(21, 9), - M(22, 9), - M(23, 9), - M(-23, 10), - M(-22, 10), - M(-21, 10), - M(-20, 10), - M(-19, 10), - M(-18, 10), - M(-17, 10), - M(-16, 10), - M(-15, 10), - M(-14, 10), - M(-13, 10), - M(-12, 10), - M(-11, 10), - M(-10, 10), - M(-9, 10), - M(-8, 10), - M(-7, 10), - M(-6, 10), - M(-5, 10), - M(-4, 10), - M(-3, 10), - M(-2, 10), - M(-1, 10), - M(0, 10), - M(1, 10), - M(2, 10), - M(3, 10), - M(4, 10), - M(5, 10), - M(6, 10), - M(7, 10), - M(8, 10), - M(9, 10), - M(10, 10), - M(11, 10), - M(12, 10), - M(13, 10), - M(14, 10), - M(15, 10), - M(16, 10), - M(17, 10), - M(18, 10), - M(19, 10), - M(20, 10), - M(21, 10), - M(22, 10), - M(23, 10), - M(-23, 11), - M(-22, 11), - M(-21, 11), - M(-20, 11), - M(-19, 11), - M(-18, 11), - M(-17, 11), - M(-16, 11), - M(-15, 11), - M(-14, 11), - M(-13, 11), - M(-12, 11), - M(-11, 11), - M(-10, 11), - M(-9, 11), - M(-8, 11), - M(-7, 11), - M(-6, 11), - M(-5, 11), - M(-4, 11), - M(-3, 11), - M(-2, 11), - M(-1, 11), - M(0, 11), - M(1, 11), - M(2, 11), - M(3, 11), - M(4, 11), - M(5, 11), - M(6, 11), - M(7, 11), - M(8, 11), - M(9, 11), - M(10, 11), - M(11, 11), - M(12, 11), - M(13, 11), - M(14, 11), - M(15, 11), - M(16, 11), - M(17, 11), - M(18, 11), - M(19, 11), - M(20, 11), - M(21, 11), - M(22, 11), - M(23, 11), - M(-22, 12), - M(-21, 12), - M(-20, 12), - M(-19, 12), - M(-18, 12), - M(-17, 12), - M(-16, 12), - M(-15, 12), - M(-14, 12), - M(-13, 12), - M(-12, 12), - M(-11, 12), - M(-10, 12), - M(-9, 12), - M(-8, 12), - M(-7, 12), - M(-6, 12), - M(-5, 12), - M(-4, 12), - M(-3, 12), - M(-2, 12), - M(-1, 12), - M(0, 12), - M(1, 12), - M(2, 12), - M(3, 12), - M(4, 12), - M(5, 12), - M(6, 12), - M(7, 12), - M(8, 12), - M(9, 12), - M(10, 12), - M(11, 12), - M(12, 12), - M(13, 12), - M(14, 12), - M(15, 12), - M(16, 12), - M(17, 12), - M(18, 12), - M(19, 12), - M(20, 12), - M(21, 12), - M(22, 12), - M(-21, 13), - M(-20, 13), - M(-19, 13), - M(-18, 13), - M(-17, 13), - M(-16, 13), - M(-15, 13), - M(-14, 13), - M(-13, 13), - M(-12, 13), - M(-11, 13), - M(-10, 13), - M(-9, 13), - M(-8, 13), - M(-7, 13), - M(-6, 13), - M(-5, 13), - M(-4, 13), - M(-3, 13), - M(-2, 13), - M(-1, 13), - M(0, 13), - M(1, 13), - M(2, 13), - M(3, 13), - M(4, 13), - M(5, 13), - M(6, 13), - M(7, 13), - M(8, 13), - M(9, 13), - M(10, 13), - M(11, 13), - M(12, 13), - M(13, 13), - M(14, 13), - M(15, 13), - M(16, 13), - M(17, 13), - M(18, 13), - M(19, 13), - M(20, 13), - M(21, 13), - M(-21, 14), - M(-20, 14), - M(-19, 14), - M(-18, 14), - M(-17, 14), - M(-16, 14), - M(-15, 14), - M(-14, 14), - M(-13, 14), - M(-12, 14), - M(-11, 14), - M(-10, 14), - M(-9, 14), - M(-8, 14), - M(-7, 14), - M(-6, 14), - M(-5, 14), - M(-4, 14), - M(-3, 14), - M(-2, 14), - M(-1, 14), - M(0, 14), - M(1, 14), - M(2, 14), - M(3, 14), - M(4, 14), - M(5, 14), - M(6, 14), - M(7, 14), - M(8, 14), - M(9, 14), - M(10, 14), - M(11, 14), - M(12, 14), - M(13, 14), - M(14, 14), - M(15, 14), - M(16, 14), - M(17, 14), - M(18, 14), - M(19, 14), - M(20, 14), - M(21, 14), - M(-20, 15), - M(-19, 15), - M(-18, 15), - M(-17, 15), - M(-16, 15), - M(-15, 15), - M(-14, 15), - M(-13, 15), - M(-12, 15), - M(-11, 15), - M(-10, 15), - M(-9, 15), - M(-8, 15), - M(-7, 15), - M(-6, 15), - M(-5, 15), - M(-4, 15), - M(-3, 15), - M(-2, 15), - M(-1, 15), - M(0, 15), - M(1, 15), - M(2, 15), - M(3, 15), - M(4, 15), - M(5, 15), - M(6, 15), - M(7, 15), - M(8, 15), - M(9, 15), - M(10, 15), - M(11, 15), - M(12, 15), - M(13, 15), - M(14, 15), - M(15, 15), - M(16, 15), - M(17, 15), - M(18, 15), - M(19, 15), - M(20, 15), - M(-19, 16), - M(-18, 16), - M(-17, 16), - M(-16, 16), - M(-15, 16), - M(-14, 16), - M(-13, 16), - M(-12, 16), - M(-11, 16), - M(-10, 16), - M(-9, 16), - M(-8, 16), - M(-7, 16), - M(-6, 16), - M(-5, 16), - M(-4, 16), - M(-3, 16), - M(-2, 16), - M(-1, 16), - M(0, 16), - M(1, 16), - M(2, 16), - M(3, 16), - M(4, 16), - M(5, 16), - M(6, 16), - M(7, 16), - M(8, 16), - M(9, 16), - M(10, 16), - M(11, 16), - M(12, 16), - M(13, 16), - M(14, 16), - M(15, 16), - M(16, 16), - M(17, 16), - M(18, 16), - M(19, 16), - M(-19, 17), - M(-18, 17), - M(-17, 17), - M(-16, 17), - M(-15, 17), - M(-14, 17), - M(-13, 17), - M(-12, 17), - M(-11, 17), - M(-10, 17), - M(-9, 17), - M(-8, 17), - M(-7, 17), - M(-6, 17), - M(-5, 17), - M(-4, 17), - M(-3, 17), - M(-2, 17), - M(-1, 17), - M(0, 17), - M(1, 17), - M(2, 17), - M(3, 17), - M(4, 17), - M(5, 17), - M(6, 17), - M(7, 17), - M(8, 17), - M(9, 17), - M(10, 17), - M(11, 17), - M(12, 17), - M(13, 17), - M(14, 17), - M(15, 17), - M(16, 17), - M(17, 17), - M(18, 17), - M(19, 17), - M(-18, 18), - M(-17, 18), - M(-16, 18), - M(-15, 18), - M(-14, 18), - M(-13, 18), - M(-12, 18), - M(-11, 18), - M(-10, 18), - M(-9, 18), - M(-8, 18), - M(-7, 18), - M(-6, 18), - M(-5, 18), - M(-4, 18), - M(-3, 18), - M(-2, 18), - M(-1, 18), - M(0, 18), - M(1, 18), - M(2, 18), - M(3, 18), - M(4, 18), - M(5, 18), - M(6, 18), - M(7, 18), - M(8, 18), - M(9, 18), - M(10, 18), - M(11, 18), - M(12, 18), - M(13, 18), - M(14, 18), - M(15, 18), - M(16, 18), - M(17, 18), - M(18, 18), - M(-17, 19), - M(-16, 19), - M(-15, 19), - M(-14, 19), - M(-13, 19), - M(-12, 19), - M(-11, 19), - M(-10, 19), - M(-9, 19), - M(-8, 19), - M(-7, 19), - M(-6, 19), - M(-5, 19), - M(-4, 19), - M(-3, 19), - M(-2, 19), - M(-1, 19), - M(0, 19), - M(1, 19), - M(2, 19), - M(3, 19), - M(4, 19), - M(5, 19), - M(6, 19), - M(7, 19), - M(8, 19), - M(9, 19), - M(10, 19), - M(11, 19), - M(12, 19), - M(13, 19), - M(14, 19), - M(15, 19), - M(16, 19), - M(17, 19), - M(-15, 20), - M(-14, 20), - M(-13, 20), - M(-12, 20), - M(-11, 20), - M(-10, 20), - M(-9, 20), - M(-8, 20), - M(-7, 20), - M(-6, 20), - M(-5, 20), - M(-4, 20), - M(-3, 20), - M(-2, 20), - M(-1, 20), - M(0, 20), - M(1, 20), - M(2, 20), - M(3, 20), - M(4, 20), - M(5, 20), - M(6, 20), - M(7, 20), - M(8, 20), - M(9, 20), - M(10, 20), - M(11, 20), - M(12, 20), - M(13, 20), - M(14, 20), - M(15, 20), - M(-14, 21), - M(-13, 21), - M(-12, 21), - M(-11, 21), - M(-10, 21), - M(-9, 21), - M(-8, 21), - M(-7, 21), - M(-6, 21), - M(-5, 21), - M(-4, 21), - M(-3, 21), - M(-2, 21), - M(-1, 21), - M(0, 21), - M(1, 21), - M(2, 21), - M(3, 21), - M(4, 21), - M(5, 21), - M(6, 21), - M(7, 21), - M(8, 21), - M(9, 21), - M(10, 21), - M(11, 21), - M(12, 21), - M(13, 21), - M(14, 21), - M(-12, 22), - M(-11, 22), - M(-10, 22), - M(-9, 22), - M(-8, 22), - M(-7, 22), - M(-6, 22), - M(-5, 22), - M(-4, 22), - M(-3, 22), - M(-2, 22), - M(-1, 22), - M(0, 22), - M(1, 22), - M(2, 22), - M(3, 22), - M(4, 22), - M(5, 22), - M(6, 22), - M(7, 22), - M(8, 22), - M(9, 22), - M(10, 22), - M(11, 22), - M(12, 22), - M(-11, 23), - M(-10, 23), - M(-9, 23), - M(-8, 23), - M(-7, 23), - M(-6, 23), - M(-5, 23), - M(-4, 23), - M(-3, 23), - M(-2, 23), - M(-1, 23), - M(0, 23), - M(1, 23), - M(2, 23), - M(3, 23), - M(4, 23), - M(5, 23), - M(6, 23), - M(7, 23), - M(8, 23), - M(9, 23), - M(10, 23), - M(11, 23), - M(-8, 24), - M(-7, 24), - M(-6, 24), - M(-5, 24), - M(-4, 24), - M(-3, 24), - M(-2, 24), - M(-1, 24), - M(0, 24), - M(1, 24), - M(2, 24), - M(3, 24), - M(4, 24), - M(5, 24), - M(6, 24), - M(7, 24), - M(8, 24), - M(-5, 25), - M(-4, 25), - M(-3, 25), - M(-2, 25), - M(-1, 25), - M(0, 25), - M(1, 25), - M(2, 25), - M(3, 25), - M(4, 25), - M(5, 25) +// This array draws a filled circle 51 tiles in diameter. +static const Rect16 _make_desert_or_rainforest_data_extralarge[] = { + R( -5, 5, -25, -25), + R( -8, 8, -24, -24), + R(-11, 11, -23, -23), + R(-12, 12, -22, -22), + R(-14, 14, -21, -21), + R(-15, 15, -20, -20), + R(-17, 17, -19, -19), + R(-18, 18, -18, -18), + R(-19, 19, -17, -16), + R(-20, 20, -15, -15), + R(-21, 21, -14, -13), + R(-22, 22, -12, -12), + R(-23, 23, -11, -9), + R(-24, 24, -8, -6), + R(-25, 25, -5, 5), + R(-24, 24, 6, 8), + R(-23, 23, 9, 11), + R(-22, 22, 12, 12), + R(-21, 21, 13, 14), + R(-20, 20, 15, 15), + R(-19, 19, 16, 17), + R(-18, 18, 18, 18), + R(-17, 17, 19, 19), + R(-15, 15, 20, 20), + R(-14, 14, 21, 21), + R(-12, 12, 22, 22), + R(-11, 11, 23, 23), + R( -8, 8, 24, 24), + R( -5, 5, 25, 25) }; -#undef M +#undef R