|  |  |  | @ -40,8 +40,7 @@ namespace embark_assist { | 
		
	
		
			
				|  |  |  |  |             bool evilness_found[3] = { false, false, false }; | 
		
	
		
			
				|  |  |  |  |             uint16_t aquifer_count = 0; | 
		
	
		
			
				|  |  |  |  |             bool river_found = false; | 
		
	
		
			
				|  |  |  |  |             bool waterfall_found = false; | 
		
	
		
			
				|  |  |  |  |             uint16_t river_elevation = 0xffff; | 
		
	
		
			
				|  |  |  |  |             uint8_t max_waterfall = 0; | 
		
	
		
			
				|  |  |  |  |             uint16_t elevation = mlt->at(start_x).at(start_y).elevation; | 
		
	
		
			
				|  |  |  |  |             bool clay_found = false; | 
		
	
		
			
				|  |  |  |  |             bool sand_found = false; | 
		
	
	
		
			
				
					|  |  |  | @ -149,12 +148,23 @@ namespace embark_assist { | 
		
	
		
			
				|  |  |  |  |                         if (finder->max_river != embark_assist::defs::river_ranges::NA && | 
		
	
		
			
				|  |  |  |  |                             finder->max_river < static_cast<embark_assist::defs::river_ranges>(survey_results->at(x).at(y).river_size)) return false; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                         if (river_found  && river_elevation != mlt->at(i).at(k).river_elevation) { | 
		
	
		
			
				|  |  |  |  |                             if (finder->waterfall == embark_assist::defs::yes_no_ranges::No) return false; | 
		
	
		
			
				|  |  |  |  |                             waterfall_found = true; | 
		
	
		
			
				|  |  |  |  |                         if (i < start_x + finder->x_dim - 2 && | 
		
	
		
			
				|  |  |  |  |                             mlt->at(i + 1).at(k).river_present && | 
		
	
		
			
				|  |  |  |  |                             abs(mlt->at(i).at(k).river_elevation - mlt->at(i + 1).at(k).river_elevation) > max_waterfall) { | 
		
	
		
			
				|  |  |  |  |                             if (finder->min_waterfall == 0) return false;  // 0 = Absent
 | 
		
	
		
			
				|  |  |  |  |                             max_waterfall = | 
		
	
		
			
				|  |  |  |  |                                 abs(mlt->at(i).at(k).river_elevation - mlt->at(i + 1).at(k).river_elevation); | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                         if (k < start_y + finder->y_dim - 2 && | 
		
	
		
			
				|  |  |  |  |                             mlt->at(i).at(k + 1).river_present && | 
		
	
		
			
				|  |  |  |  |                             abs(mlt->at(i).at(k).river_elevation - mlt->at(i).at(k + 1).river_elevation) > max_waterfall) { | 
		
	
		
			
				|  |  |  |  |                             if (finder->min_waterfall == 0) return false;  // 0 = Absent
 | 
		
	
		
			
				|  |  |  |  |                             max_waterfall = | 
		
	
		
			
				|  |  |  |  |                                 abs(mlt->at(i).at(k).river_elevation - mlt->at(i).at(k + 1).river_elevation); | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                         river_found = true; | 
		
	
		
			
				|  |  |  |  |                         river_elevation = mlt->at(i).at(k).river_elevation; | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                     //  Flatness
 | 
		
	
	
		
			
				
					|  |  |  | @ -335,7 +345,7 @@ namespace embark_assist { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             //  River & Waterfall
 | 
		
	
		
			
				|  |  |  |  |             if (!river_found && finder->min_river > embark_assist::defs::river_ranges::None) return false; | 
		
	
		
			
				|  |  |  |  |             if (finder->waterfall == embark_assist::defs::yes_no_ranges::Yes && !waterfall_found) return false; | 
		
	
		
			
				|  |  |  |  |             if (max_waterfall < finder->min_waterfall) return false;  // N/A = -1 is always smaller, so no additional check needed.
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             //  Flatness
 | 
		
	
		
			
				|  |  |  |  |             if (!uneven && finder->flatness == embark_assist::defs::flatness_ranges::Uneven) return false; | 
		
	
	
		
			
				
					|  |  |  | @ -576,19 +586,10 @@ namespace embark_assist { | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                 //  Waterfall
 | 
		
	
		
			
				|  |  |  |  |                 switch (finder->waterfall) { | 
		
	
		
			
				|  |  |  |  |                 case embark_assist::defs::yes_no_ranges::NA: | 
		
	
		
			
				|  |  |  |  |                     break;  //  No restriction
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                 case embark_assist::defs::yes_no_ranges::Yes: | 
		
	
		
			
				|  |  |  |  |                     if (!tile->waterfall) return false; | 
		
	
		
			
				|  |  |  |  |                     break; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                 case embark_assist::defs::yes_no_ranges::No: | 
		
	
		
			
				|  |  |  |  |                     if (tile->waterfall && | 
		
	
		
			
				|  |  |  |  |                         embark_size == 256) return false; | 
		
	
		
			
				|  |  |  |  |                     break; | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |                 if (finder->min_waterfall > tile->max_waterfall) return false;  //  N/A = -1 is always smaller
 | 
		
	
		
			
				|  |  |  |  |                 if (finder->min_waterfall == 0 &&  // Absent
 | 
		
	
		
			
				|  |  |  |  |                     embark_size == 256 && | 
		
	
		
			
				|  |  |  |  |                     tile->max_waterfall > 0) return false; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                 //  Flat. No world tile checks. Need to look at the details
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -1060,7 +1061,7 @@ namespace embark_assist { | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                 //  Waterfall
 | 
		
	
		
			
				|  |  |  |  |                 if (finder->waterfall == embark_assist::defs::yes_no_ranges::Yes && | 
		
	
		
			
				|  |  |  |  |                 if (finder->min_waterfall > 0 && | 
		
	
		
			
				|  |  |  |  |                     tile->river_size == embark_assist::defs::river_sizes::None) return false; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |                 //  Flat. No world tile checks. Need to look at the details
 | 
		
	
	
		
			
				
					|  |  |  | @ -1548,7 +1549,7 @@ uint16_t embark_assist::matcher::find(embark_assist::defs::match_iterators *iter | 
		
	
		
			
				|  |  |  |  |             return 0; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         if (iterator->finder.waterfall == embark_assist::defs::yes_no_ranges::Yes && | 
		
	
		
			
				|  |  |  |  |         if (iterator->finder.min_waterfall > 0 && | 
		
	
		
			
				|  |  |  |  |             iterator->finder.max_river == embark_assist::defs::river_ranges::None) { | 
		
	
		
			
				|  |  |  |  |             out.printerr("matcher::find: Will never find any waterfalls with None as max river\n"); | 
		
	
		
			
				|  |  |  |  |             return 0; | 
		
	
	
		
			
				
					|  |  |  | @ -1560,6 +1561,12 @@ uint16_t embark_assist::matcher::find(embark_assist::defs::match_iterators *iter | 
		
	
		
			
				|  |  |  |  |             return 0; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         if (iterator->finder.flatness == embark_assist::defs::flatness_ranges::Flat_Verified && | 
		
	
		
			
				|  |  |  |  |             (iterator->finder.x_dim > 14 || | 
		
	
		
			
				|  |  |  |  |                 iterator->finder.y_dim > 14)) { | 
		
	
		
			
				|  |  |  |  |             out.printerr("matcher::find: Can never verify flatness without border around embark\n"); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         if (iterator->finder.spire_count_max < iterator->finder.spire_count_min && | 
		
	
		
			
				|  |  |  |  |             iterator->finder.spire_count_max != -1) { | 
		
	
		
			
				|  |  |  |  |             out.printerr("matcher::find: Will never find any matches with max spires < min spires\n"); | 
		
	
	
		
			
				
					|  |  |  | 
 |