From 2a4e16d6dab9afbedec1085abc7dbe5fd5853c6f Mon Sep 17 00:00:00 2001 From: Tachytaenius Date: Sat, 28 Nov 2020 18:08:04 +0000 Subject: [PATCH 1/8] Cover artifacts at greasing station The inconsistent [DOES_NOT_DETERMINE_PRODUCT_AMOUNT] distribution is right, I assume? --- plugins/raw/reaction_spatter.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/plugins/raw/reaction_spatter.txt b/plugins/raw/reaction_spatter.txt index 062e82287..73467eca4 100644 --- a/plugins/raw/reaction_spatter.txt +++ b/plugins/raw/reaction_spatter.txt @@ -19,11 +19,13 @@ Reaction name must start with 'SPATTER_ADD_': [REAGENT:object:1:NONE:NONE:NONE:NONE] [PRESERVE_REAGENT] [DOES_NOT_DETERMINE_PRODUCT_AMOUNT] + [CAN_USE_ARTIFACT] Need some excuse why the spatter is water-resistant: [REAGENT:grease:1:GLOB:NONE:NONE:NONE][REACTION_CLASS:FAT][UNROTTEN] [DOES_NOT_DETERMINE_PRODUCT_AMOUNT] The probability is used as spatter size; Legendary gives +90%: COVERED = liquid, GLAZED = solid, BANDS = paste, SPIKES = powder + [TRANSFER_ARTIFACT_STATUS] [IMPROVEMENT:800:object:COVERED:GET_MATERIAL_FROM_REAGENT:extract:NONE] [REACTION:SPATTER_ADD_WEAPON_EXTRACT] @@ -38,6 +40,7 @@ Reaction name must start with 'SPATTER_ADD_': [CONTAINS:extract] [PRESERVE_REAGENT] [DOES_NOT_DETERMINE_PRODUCT_AMOUNT] + [CAN_USE_ARTIFACT] The object to improve must be after the input mat, so that it is known: [REAGENT:object:1:WEAPON:NONE:NONE:NONE] [PRESERVE_REAGENT] @@ -47,6 +50,7 @@ Reaction name must start with 'SPATTER_ADD_': [DOES_NOT_DETERMINE_PRODUCT_AMOUNT] The probability is used as spatter size; Legendary gives +90%: COVERED = liquid, GLAZED = solid, BANDS = paste, SPIKES = powder + [TRANSFER_ARTIFACT_STATUS] [IMPROVEMENT:800:object:COVERED:GET_MATERIAL_FROM_REAGENT:extract:NONE] [REACTION:SPATTER_ADD_AMMO_EXTRACT] @@ -61,6 +65,7 @@ Reaction name must start with 'SPATTER_ADD_': [CONTAINS:extract] [PRESERVE_REAGENT] [DOES_NOT_DETERMINE_PRODUCT_AMOUNT] + [CAN_USE_ARTIFACT] The object to improve must be after the input mat, so that it is known: [REAGENT:object:1:AMMO:NONE:NONE:NONE] [PRESERVE_REAGENT] @@ -71,6 +76,7 @@ Reaction name must start with 'SPATTER_ADD_': [DOES_NOT_DETERMINE_PRODUCT_AMOUNT] The probability is used as spatter size; Legendary gives +90%: COVERED = liquid, GLAZED = solid, BANDS = paste, SPIKES = powder + [TRANSFER_ARTIFACT_STATUS] [IMPROVEMENT:200:object:COVERED:GET_MATERIAL_FROM_REAGENT:extract:NONE] [REACTION:SPATTER_ADD_WEAPON_GCS] @@ -87,10 +93,12 @@ Reaction name must start with 'SPATTER_ADD_': The object to improve must be after the input mat, so that it is known: [REAGENT:object:1:WEAPON:NONE:NONE:NONE] [PRESERVE_REAGENT] + [CAN_USE_ARTIFACT] Need some excuse why the spatter is water-resistant: [REAGENT:grease:1:GLOB:NONE:NONE:NONE][REACTION_CLASS:TALLOW][UNROTTEN] The probability is used as spatter size; Legendary gives +90%: COVERED = liquid, GLAZED = solid, BANDS = paste, SPIKES = powder + [TRANSFER_ARTIFACT_STATUS] [IMPROVEMENT:800:object:COVERED:GET_MATERIAL_FROM_REAGENT:extract:NONE] [REACTION:SPATTER_ADD_AMMO_GCS] @@ -107,10 +115,12 @@ Reaction name must start with 'SPATTER_ADD_': The object to improve must be after the input mat, so that it is known: [REAGENT:object:1:AMMO:NONE:NONE:NONE] [PRESERVE_REAGENT] + [CAN_USE_ARTIFACT] Need some excuse why the spatter is water-resistant: [REAGENT:grease:1:GLOB:NONE:NONE:NONE][REACTION_CLASS:TALLOW][UNROTTEN] The probability is used as spatter size; Legendary gives +90%: COVERED = liquid, GLAZED = solid, BANDS = paste, SPIKES = powder + [TRANSFER_ARTIFACT_STATUS] [IMPROVEMENT:200:object:COVERED:GET_MATERIAL_FROM_REAGENT:extract:NONE] [REACTION:SPATTER_ADD_WEAPON_GDS] @@ -127,10 +137,12 @@ Reaction name must start with 'SPATTER_ADD_': The object to improve must be after the input mat, so that it is known: [REAGENT:object:1:WEAPON:NONE:NONE:NONE] [PRESERVE_REAGENT] + [CAN_USE_ARTIFACT] Need some excuse why the spatter is water-resistant: [REAGENT:grease:1:GLOB:NONE:NONE:NONE][REACTION_CLASS:TALLOW][UNROTTEN] The probability is used as spatter size; Legendary gives +90%: COVERED = liquid, GLAZED = solid, BANDS = paste, SPIKES = powder + [TRANSFER_ARTIFACT_STATUS] [IMPROVEMENT:800:object:COVERED:GET_MATERIAL_FROM_REAGENT:extract:NONE] [REACTION:SPATTER_ADD_AMMO_GDS] @@ -147,8 +159,10 @@ Reaction name must start with 'SPATTER_ADD_': The object to improve must be after the input mat, so that it is known: [REAGENT:object:1:AMMO:NONE:NONE:NONE] [PRESERVE_REAGENT] + [CAN_USE_ARTIFACT] Need some excuse why the spatter is water-resistant: [REAGENT:grease:1:GLOB:NONE:NONE:NONE][REACTION_CLASS:TALLOW][UNROTTEN] The probability is used as spatter size; Legendary gives +90%: COVERED = liquid, GLAZED = solid, BANDS = paste, SPIKES = powder + [TRANSFER_ARTIFACT_STATUS] [IMPROVEMENT:200:object:COVERED:GET_MATERIAL_FROM_REAGENT:extract:NONE] From c36fbe4c8b13a9eb71fd018108b9b09fb7eabe26 Mon Sep 17 00:00:00 2001 From: PatrikLundell Date: Thu, 3 Dec 2020 15:40:22 +0100 Subject: [PATCH 2/8] Corrected river size handling --- plugins/embark-assistant/defs.h | 5 +- plugins/embark-assistant/embark-assistant.cpp | 3 +- plugins/embark-assistant/help_ui.cpp | 2 +- plugins/embark-assistant/matcher.cpp | 66 ++------- plugins/embark-assistant/survey.cpp | 136 +++++++----------- 5 files changed, 70 insertions(+), 142 deletions(-) diff --git a/plugins/embark-assistant/defs.h b/plugins/embark-assistant/defs.h index 5c9a2c23e..0f34b288a 100644 --- a/plugins/embark-assistant/defs.h +++ b/plugins/embark-assistant/defs.h @@ -78,7 +78,7 @@ namespace embark_assist { int8_t soil_depth; int8_t offset; int16_t elevation; - bool river_present = false; + river_sizes river_size = river_sizes::None; int16_t river_elevation = 100; int8_t adamantine_level; // -1 = none, 0 .. 3 = cavern 1 .. magma sea. Currently not used beyond present/absent. int8_t magma_level; // -1 = none, 0 .. 3 = cavern 3 .. surface/volcano @@ -110,7 +110,8 @@ namespace embark_assist { uint8_t min_region_soil = 10; uint8_t max_region_soil = 0; uint8_t max_waterfall = 0; - river_sizes river_size; + river_sizes min_river_size = river_sizes::None; // The smallest actual river size, with none only if no rivers exist. + river_sizes max_river_size = river_sizes::None; int16_t biome_index[10]; // Indexed through biome_offset; -1 = null, Index of region, [0] not used int16_t biome[10]; // Indexed through biome_offset; -1 = null, df::biome_type, [0] not used uint8_t biome_count; diff --git a/plugins/embark-assistant/embark-assistant.cpp b/plugins/embark-assistant/embark-assistant.cpp index 7a0b678a8..db73b81f2 100644 --- a/plugins/embark-assistant/embark-assistant.cpp +++ b/plugins/embark-assistant/embark-assistant.cpp @@ -334,7 +334,8 @@ command_result embark_assistant(color_ostream &out, std::vector & embark_assist::main::state->survey_results[i][k].min_region_soil = 10; embark_assist::main::state->survey_results[i][k].max_region_soil = 0; embark_assist::main::state->survey_results[i][k].max_waterfall = 0; - embark_assist::main::state->survey_results[i][k].river_size = embark_assist::defs::river_sizes::None; + embark_assist::main::state->survey_results[i][k].min_river_size = embark_assist::defs::river_sizes::None; + embark_assist::main::state->survey_results[i][k].max_river_size = embark_assist::defs::river_sizes::None; embark_assist::main::state->survey_results[i][k].min_tree_level = embark_assist::defs::tree_levels::Heavily_Forested; embark_assist::main::state->survey_results[i][k].max_tree_level = embark_assist::defs::tree_levels::None; diff --git a/plugins/embark-assistant/help_ui.cpp b/plugins/embark-assistant/help_ui.cpp index e2988f8b7..72a93a3be 100644 --- a/plugins/embark-assistant/help_ui.cpp +++ b/plugins/embark-assistant/help_ui.cpp @@ -340,7 +340,7 @@ namespace embark_assist{ help_text.push_back(" the N, followed by the one to the W, and lastly the one acting as the"); help_text.push_back(" reference. This means there's a risk embarks with such 'trouble' corners"); help_text.push_back(" may get affected corner(s) evaluated incorrectly."); - help_text.push_back("Version 0.12 2020-11-17"); + help_text.push_back("Version 0.13 2020-12-03"); break; } diff --git a/plugins/embark-assistant/matcher.cpp b/plugins/embark-assistant/matcher.cpp index 3e2675e1d..e15dacd90 100644 --- a/plugins/embark-assistant/matcher.cpp +++ b/plugins/embark-assistant/matcher.cpp @@ -684,13 +684,15 @@ namespace embark_assist { } // River & Waterfall - if (mlt->at(i).at(k).river_present) { - // Actual size values were checked on the world tile level for min rivers + if (mlt->at(i).at(k).river_size != embark_assist::defs::river_sizes::None) { + if (finder->min_river != embark_assist::defs::river_ranges::NA && + finder->min_river > static_cast(mlt->at(i).at(k).river_size)) return false; + if (finder->max_river != embark_assist::defs::river_ranges::NA && - finder->max_river < static_cast(survey_results->at(x).at(y).river_size)) return false; + finder->max_river < static_cast(mlt->at(i).at(k).river_size)) return false; if (i < start_x + finder->x_dim - 2 && - mlt->at(i + 1).at(k).river_present && + mlt->at(i + 1).at(k).river_size != embark_assist::defs::river_sizes::None && abs(mlt->at(i).at(k).river_elevation - mlt->at(i + 1).at(k).river_elevation) > result.max_waterfall) { if (finder->min_waterfall == 0) return false; // 0 = Absent result.max_waterfall = @@ -698,7 +700,7 @@ namespace embark_assist { } if (k < start_y + finder->y_dim - 2 && - mlt->at(i).at(k + 1).river_present && + mlt->at(i).at(k + 1).river_size != embark_assist::defs::river_sizes::None && abs(mlt->at(i).at(k).river_elevation - mlt->at(i).at(k + 1).river_elevation) > result.max_waterfall) { if (finder->min_waterfall == 0) return false; // 0 = Absent result.max_waterfall = @@ -1588,7 +1590,7 @@ namespace embark_assist { } // River size. Every tile has riverless tiles, so max rivers has to be checked on the detailed level. - switch (tile->river_size) { + switch (tile->max_river_size) { case embark_assist::defs::river_sizes::None: if (finder->min_river > embark_assist::defs::river_ranges::None) { if (trace) out.print("matcher::world_tile_match: River_Size None (%i, %i)\n", x, y); @@ -2204,7 +2206,10 @@ namespace embark_assist { } } } - else { // Not surveyed + else { // Not surveyed. This code is essentially obsolete size we're now surveying every tile the first time, + // but it does still provide a hint about the number of matching world tiles, and thus is kept. + // If designed this way originally the effort to code it wouldn't have been made, though... + // Savagery for (uint8_t i = 0; i < 3; i++) { @@ -2267,54 +2272,11 @@ namespace embark_assist { // Aquifer // Requires survey - // River size - switch (tile->river_size) { - case embark_assist::defs::river_sizes::None: - if (finder->min_river > embark_assist::defs::river_ranges::None) { - if (trace) out.print("matcher::world_tile_match: NS River None (%i, %i)\n", x, y); - return false; - } - break; - - case embark_assist::defs::river_sizes::Brook: - if (finder->min_river > embark_assist::defs::river_ranges::Brook) { - if (trace) out.print("matcher::world_tile_match: NS River Brook (%i, %i)\n", x, y); - return false; - } - break; - - case embark_assist::defs::river_sizes::Stream: - if (finder->min_river > embark_assist::defs::river_ranges::Stream) { - if (trace) out.print("matcher::world_tile_match: NS River Stream (%i, %i)\n", x, y); - return false; - } - break; - - case embark_assist::defs::river_sizes::Minor: - if (finder->min_river > embark_assist::defs::river_ranges::Minor) { - if (trace) out.print("matcher::world_tile_match: NS River Minor (%i, %i)\n", x, y); - return false; - } - break; - - case embark_assist::defs::river_sizes::Medium: - if (finder->min_river > embark_assist::defs::river_ranges::Medium) { - if (trace) out.print("matcher::world_tile_match: NS River Medium (%i, %i)\n", x, y); - return false; - } - break; - - case embark_assist::defs::river_sizes::Major: - if (finder->max_river != embark_assist::defs::river_ranges::NA) { - if (trace) out.print("matcher::world_tile_match: NS River Major (%i, %i)\n", x, y); - return false; - } - break; - } + // River size // Requires survey // Waterfall if (finder->min_waterfall > 0 && - tile->river_size == embark_assist::defs::river_sizes::None) { + tile->min_river_size == embark_assist::defs::river_sizes::None) { if (trace) out.print("matcher::world_tile_match: NS Waterfall (%i, %i)\n", x, y); return false; } diff --git a/plugins/embark-assistant/survey.cpp b/plugins/embark-assistant/survey.cpp index eaea5fc15..cab5254dc 100644 --- a/plugins/embark-assistant/survey.cpp +++ b/plugins/embark-assistant/survey.cpp @@ -88,6 +88,23 @@ namespace embark_assist { //======================================================================================= + embark_assist::defs::river_sizes river_size_of(uint8_t width) { + if (width < 7) { + return embark_assist::defs::river_sizes::Stream; + } + else if (width < 13) { + return embark_assist::defs::river_sizes::Minor; + } + else if (width < 24) { + return embark_assist::defs::river_sizes::Medium; + } + else { + return embark_assist::defs::river_sizes::Major; + } + } + + //======================================================================================= + bool geo_survey(embark_assist::defs::geo_data *geo_summary) { color_ostream_proxy out(Core::getInstance().getConsole()); df::world_data *world_data = world->world_data; @@ -229,71 +246,6 @@ namespace embark_assist { return true; } - - //================================================================================= - - void survey_rivers(embark_assist::defs::world_tile_data *survey_results) { - // color_ostream_proxy out(Core::getInstance().getConsole()); - df::world_data *world_data = world->world_data; - int16_t x; - int16_t y; - - for (uint16_t i = 0; i < world_data->rivers.size(); i++) { - for (uint16_t k = 0; k < world_data->rivers[i]->path.x.size(); k++) { - x = world_data->rivers[i]->path.x[k]; - y = world_data->rivers[i]->path.y[k]; - - if (world_data->rivers[i]->flow[k] < 5000) { - if (world_data->region_map[x][y].flags.is_set(df::region_map_entry_flags::is_brook)) { - survey_results->at(x).at(y).river_size = embark_assist::defs::river_sizes::Brook; - } - else { - survey_results->at(x).at(y).river_size = embark_assist::defs::river_sizes::Stream; - } - } - else if (world_data->rivers[i]->flow[k] < 10000) { - survey_results->at(x).at(y).river_size = embark_assist::defs::river_sizes::Minor; - } - else if (world_data->rivers[i]->flow[k] < 20000) { - survey_results->at(x).at(y).river_size = embark_assist::defs::river_sizes::Medium; - } - else { - survey_results->at(x).at(y).river_size = embark_assist::defs::river_sizes::Major; - } - } - - x = world_data->rivers[i]->end_pos.x; - y = world_data->rivers[i]->end_pos.y; - - // Make the guess the river size for the end is the same as the tile next to the end. Note that DF - // doesn't actually recognize this tile as part of the river in the pre embark river name display. - // We also assume the is_river/is_brook flags are actually set properly for the end tile. - // - if (x >= 0 && y >= 0 && x < world->worldgen.worldgen_parms.dim_x && y < world->worldgen.worldgen_parms.dim_y) { - if (survey_results->at(x).at(y).river_size == embark_assist::defs::river_sizes::None) { - if (world_data->rivers[i]->path.x.size() && - world_data->rivers[i]->flow[world_data->rivers[i]->path.x.size() - 1] < 5000) { - if (world_data->region_map[x][y].flags.is_set(df::region_map_entry_flags::is_brook)) { - survey_results->at(x).at(y).river_size = embark_assist::defs::river_sizes::Brook; - } - else { - survey_results->at(x).at(y).river_size = embark_assist::defs::river_sizes::Stream; - } - } - else if (world_data->rivers[i]->flow[world_data->rivers[i]->path.x.size() - 1] < 10000) { - survey_results->at(x).at(y).river_size = embark_assist::defs::river_sizes::Minor; - } - else if (world_data->rivers[i]->flow[world_data->rivers[i]->path.x.size() - 1] < 20000) { - survey_results->at(x).at(y).river_size = embark_assist::defs::river_sizes::Medium; - } - else { - survey_results->at(x).at(y).river_size = embark_assist::defs::river_sizes::Major; - } - } - } - } - } - //================================================================================= void survey_evil_weather(embark_assist::defs::world_tile_data *survey_results) { @@ -945,7 +897,6 @@ void embark_assist::survey::high_level_world_survey(embark_assist::defs::geo_dat } } - embark_assist::survey::survey_rivers(survey_results); embark_assist::survey::survey_evil_weather(survey_results); } @@ -1112,18 +1063,23 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data } mlt->at(i).at(k).offset = offset; mlt->at(i).at(k).elevation = details->elevation[i][k]; - mlt->at(i).at(k).river_present = false; + mlt->at(i).at(k).river_size = embark_assist::defs::river_sizes::None; mlt->at(i).at(k).river_elevation = 100; if (details->rivers_vertical.active[i][k] != 0) { - mlt->at(i).at(k).river_present = true; + mlt->at(i).at(k).river_size = river_size_of (details->rivers_vertical.x_max[i][k] - details->rivers_vertical.x_min[i][k] + 1); mlt->at(i).at(k).river_elevation = details->rivers_vertical.elevation[i][k]; } else if (details->rivers_horizontal.active[i][k] != 0) { - mlt->at(i).at(k).river_present = true; + mlt->at(i).at(k).river_size = river_size_of (details->rivers_horizontal.y_max[i][k] - details->rivers_horizontal.y_min[i][k] + 1); mlt->at(i).at(k).river_elevation = details->rivers_horizontal.elevation[i][k]; } + if (mlt->at(i).at(k).river_size != embark_assist::defs::river_sizes::None && + world_tile->flags.is_set(df::region_map_entry_flags::is_brook)) { + mlt->at(i).at(k).river_size = embark_assist::defs::river_sizes::Brook; + } + if (tile->min_region_soil > mlt->at(i).at(k).soil_depth) { tile->min_region_soil = mlt->at(i).at(k).soil_depth; } @@ -1277,8 +1233,8 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data for (uint8_t k = 0; k < 15; k++) { if (details->rivers_horizontal.active[i][k] != 0 && details->rivers_vertical.active[i - 1][k + 1] != 0 && - !mlt->at(i - 1).at(k).river_present) { // Probably never true - mlt->at(i - 1).at(k).river_present = true; + mlt->at(i - 1).at(k).river_size == embark_assist::defs::river_sizes::None) { // Probably never true + mlt->at(i - 1).at(k).river_size = mlt->at(i).at(k).river_size; mlt->at(i - 1).at(k).river_elevation = mlt->at(i).at(k).river_elevation; if (mlt->at(i - 1).at(k).river_elevation > mlt->at(i - 1).at(k + 1).river_elevation) { @@ -1291,8 +1247,8 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data for (uint8_t i = 0; i < 16; i++) { for (uint8_t k = 1; k < 16; k++) { if (details->rivers_vertical.active[i][k] != 0 && - !mlt->at(i).at(k - 1).river_present) { - mlt->at(i).at(k - 1).river_present = true; + mlt->at(i).at(k - 1).river_size == embark_assist::defs::river_sizes::None) { + mlt->at(i).at(k - 1).river_size = mlt->at(i).at(k).river_size; mlt->at(i).at(k - 1).river_elevation = mlt->at(i).at(k).river_elevation; } } @@ -1301,8 +1257,8 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data for (uint8_t i = 1; i < 16; i++) { for (uint8_t k = 0; k < 16; k++) { if (details->rivers_horizontal.active[i][k] != 0 && - !mlt->at(i - 1).at(k).river_present) { - mlt->at(i - 1).at(k).river_present = true; + mlt->at(i - 1).at(k).river_size == embark_assist::defs::river_sizes::None) { + mlt->at(i - 1).at(k).river_size = mlt->at(i).at(k).river_size; mlt->at(i - 1).at(k).river_elevation = mlt->at(i).at(k).river_elevation; } } @@ -1338,9 +1294,18 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data survey_results->at(x).at(y).max_region_soil = mlt->at(i).at(k).soil_depth; } - if (mlt->at(i).at(k).river_present) { + if (mlt->at(i).at(k).river_size != embark_assist::defs::river_sizes::None) { + if (survey_results->at(x).at(y).min_river_size == embark_assist::defs::river_sizes::None || + mlt->at(i).at(k).river_size < survey_results->at(x).at(y).min_river_size) { + survey_results->at(x).at(y).min_river_size = mlt->at(i).at(k).river_size; + } + + if (survey_results->at(x).at(y).max_river_size < mlt->at(i).at(k).river_size) { + survey_results->at(x).at(y).max_river_size = mlt->at(i).at(k).river_size; + } + if (i < 15 && - mlt->at(i + 1).at(k).river_present && + mlt->at(i + 1).at(k).river_size != embark_assist::defs::river_sizes::None && abs (mlt->at(i).at(k).river_elevation - mlt->at(i + 1).at(k).river_elevation) > survey_results->at(x).at(y).max_waterfall) { survey_results->at(x).at(y).max_waterfall = @@ -1348,7 +1313,7 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data } if (k < 15 && - mlt->at(i).at(k + 1).river_present && + mlt->at(i).at(k + 1).river_size != embark_assist::defs::river_sizes::None && abs(mlt->at(i).at(k).river_elevation - mlt->at(i).at(k + 1).river_elevation) > survey_results->at(x).at(y).max_waterfall) { survey_results->at(x).at(y).max_waterfall = @@ -1356,7 +1321,6 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data } } - // River size surveyed separately // biome_index handled above // biome handled below // evil weather handled separately @@ -1442,10 +1406,10 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data tile->west_column[i].elevation = mlt->at(0).at(i).elevation; tile->east_column[i].elevation = mlt->at(15).at(i).elevation; - tile->north_row[i].river_present = mlt->at(i).at(0).river_present; // Not used - tile->south_row[i].river_present = mlt->at(i).at(15).river_present; - tile->west_column[i].river_present = mlt->at(0).at(i).river_present; - tile->east_column[i].river_present = mlt->at(15).at(i).river_present; + tile->north_row[i].river_size = mlt->at(i).at(0).river_size; // Not used + tile->south_row[i].river_size = mlt->at(i).at(15).river_size; + tile->west_column[i].river_size = mlt->at(0).at(i).river_size; + tile->east_column[i].river_size = mlt->at(15).at(i).river_size; tile->north_row[i].river_elevation = mlt->at(i).at(0).river_elevation; // Not used tile->south_row[i].river_elevation = mlt->at(i).at(15).river_elevation; @@ -2325,9 +2289,9 @@ void embark_assist::survey::survey_embark(embark_assist::defs::mid_level_tiles * site_info->flat = false; } - if (mlt->at(i).at(k).river_present) { + if (mlt->at(i).at(k).river_size != embark_assist::defs::river_sizes::None) { if (i < 15 && - mlt->at(i + 1).at(k).river_present && + mlt->at(i + 1).at(k).river_size != embark_assist::defs::river_sizes::None && abs(mlt->at(i).at(k).river_elevation - mlt->at(i + 1).at(k).river_elevation) > site_info->max_waterfall) { site_info->max_waterfall = @@ -2335,7 +2299,7 @@ void embark_assist::survey::survey_embark(embark_assist::defs::mid_level_tiles * } if (k < 15 && - mlt->at(i).at(k + 1).river_present && + mlt->at(i).at(k + 1).river_size != embark_assist::defs::river_sizes::None && abs(mlt->at(i).at(k).river_elevation - mlt->at(i).at(k + 1).river_elevation) > site_info->max_waterfall) { site_info->max_waterfall = From 9b53222932a831ae024d7b48763bf0889dcdeef9 Mon Sep 17 00:00:00 2001 From: PatrikLundell Date: Thu, 3 Dec 2020 15:48:28 +0100 Subject: [PATCH 3/8] river size determination change log --- docs/changelog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog.txt b/docs/changelog.txt index 616f08214..e3f299def 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -39,6 +39,7 @@ changelog.txt uses a syntax similar to RST, with a few special sequences: - `buildingplan`: no longer erroneously matches items to buildings while the game is paused - `dwarfmonitor`: fixed a crash when opening the ``prefs`` screen if units have vague preferences - `embark-assistant`: fixed an issue causing incursion resource matching (e.g. sand/clay) to skip some tiles if those resources were provided only through incursions +- `embark-assistant`: corrected river size determination by performing it at the MLT level rather than the world tile one - `zone`: fixed an issue causing the ``enumnick`` subcommand to run when attempting to run ``assign``, ``unassign``, or ``slaughter`` ## Misc Improvements From 38e0f1c485f0cafa32080f842f9f87d697e90be9 Mon Sep 17 00:00:00 2001 From: lethosor Date: Sat, 21 Nov 2020 10:10:47 -0500 Subject: [PATCH 4/8] Update authors (dfhack/scripts#217) --- docs/Authors.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Authors.rst b/docs/Authors.rst index e3478e486..83ce58ef0 100644 --- a/docs/Authors.rst +++ b/docs/Authors.rst @@ -159,6 +159,7 @@ stolencatkarma Stoyan Gaydarov sgayda2 suokko suokko shrieker sv-esk sv-esk +Tachytaenius wolfboyft Tacomagic thefriendlyhacker thefriendlyhacker TheHologram TheHologram From af2255956a9fc0909e0c02e53d6968a5bb79c468 Mon Sep 17 00:00:00 2001 From: lethosor Date: Thu, 3 Dec 2020 23:00:21 -0500 Subject: [PATCH 5/8] Update submodules --- library/xml | 2 +- scripts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library/xml b/library/xml index dd8b93350..d3f25767d 160000 --- a/library/xml +++ b/library/xml @@ -1 +1 @@ -Subproject commit dd8b9335007941c3aea27474b0a08ba31f6bc97f +Subproject commit d3f25767defd6bf1750fa1f4d484a53a6f00038d diff --git a/scripts b/scripts index 4ac39084f..bef4ccbc0 160000 --- a/scripts +++ b/scripts @@ -1 +1 @@ -Subproject commit 4ac39084f7e6fde5ec08c5c5691422859a212460 +Subproject commit bef4ccbc092459b70cd6c669d15f7328a47bde40 From 855ce84eca2002792fbeef2ced5cd263f5b4634e Mon Sep 17 00:00:00 2001 From: lethosor Date: Fri, 4 Dec 2020 23:55:43 -0500 Subject: [PATCH 6/8] Update submodules --- library/xml | 2 +- scripts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library/xml b/library/xml index d3f25767d..403722a6c 160000 --- a/library/xml +++ b/library/xml @@ -1 +1 @@ -Subproject commit d3f25767defd6bf1750fa1f4d484a53a6f00038d +Subproject commit 403722a6cbdcb65256359ceab03b203d65489c3e diff --git a/scripts b/scripts index bef4ccbc0..cc202a95a 160000 --- a/scripts +++ b/scripts @@ -1 +1 @@ -Subproject commit bef4ccbc092459b70cd6c669d15f7328a47bde40 +Subproject commit cc202a95a747f8d0e28446b74daae03c8b0e0ae1 From a3d8c5a2ec0eac4e2d258fbb1fd82dff4bdd3d4b Mon Sep 17 00:00:00 2001 From: lethosor Date: Sat, 5 Dec 2020 19:41:32 -0500 Subject: [PATCH 7/8] revflood docs: clarify that constructed walls are ignored Closes #1719 --- docs/Plugins.rst | 5 +++-- plugins/reveal.cpp | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/Plugins.rst b/docs/Plugins.rst index 73c0e1073..f8fcd569d 100644 --- a/docs/Plugins.rst +++ b/docs/Plugins.rst @@ -187,8 +187,9 @@ Usage and related commands: :reveal demon: Reveals everything and allows unpausing - good luck! :unreveal: Reverts the effects of ``reveal`` :revtoggle: Switches between ``reveal`` and ``unreveal`` -:revflood: Hide everything, then reveal tiles with a path to the cursor - (useful to make walled-off rooms vanish) +:revflood: Hide everything, then reveal tiles with a path to the cursor. + Note that tiles behind constructed walls are also revealed as a + workaround for :bug:`1871`. :revforget: Discard info about what was visible before revealing the map. Only useful where (e.g.) you abandoned with the fort revealed and no longer want the data. diff --git a/plugins/reveal.cpp b/plugins/reveal.cpp index 7dc7563a2..257dd5127 100644 --- a/plugins/reveal.cpp +++ b/plugins/reveal.cpp @@ -91,7 +91,8 @@ DFhackCExport command_result plugin_init ( color_ostream &out, vector Date: Sat, 5 Dec 2020 19:42:24 -0500 Subject: [PATCH 8/8] Update scripts --- scripts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts b/scripts index cc202a95a..2c8b19167 160000 --- a/scripts +++ b/scripts @@ -1 +1 @@ -Subproject commit cc202a95a747f8d0e28446b74daae03c8b0e0ae1 +Subproject commit 2c8b19167268c4aee7976f67c93c510b30b115e1