From 435f8590009412ddf11e0c04628cacd6e65b3ff2 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Fri, 27 Oct 2023 03:06:16 -0700 Subject: [PATCH] reinstate embark screen estimates --- docs/changelog.txt | 1 + docs/plugins/prospector.rst | 4 ++-- plugins/prospector.cpp | 34 ++++++++++++---------------------- 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/docs/changelog.txt b/docs/changelog.txt index 0e21b5d04..1c16f3088 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -54,6 +54,7 @@ Template for new versions: ## New Tools ## New Features +- `prospect`: can now give you an estimate of resources from the embark screen. hover the mouse over a potential embark area and run `prospect`. ## Fixes - `stockpiles`: hide configure and help buttons when the overlay panel is minimized diff --git a/docs/plugins/prospector.rst b/docs/plugins/prospector.rst index 4628d11c8..68ec3d9b1 100644 --- a/docs/plugins/prospector.rst +++ b/docs/plugins/prospector.rst @@ -11,8 +11,8 @@ prospector .. dfhack-command:: prospect :summary: Shows a summary of resources that exist on the map. -It can also calculate an estimate of resources available in the selected embark -area. +It can also calculate an estimate of resources available in the currently +highlighted embark area. Usage ----- diff --git a/plugins/prospector.cpp b/plugins/prospector.cpp index 4f74661ba..3091f0703 100644 --- a/plugins/prospector.cpp +++ b/plugins/prospector.cpp @@ -567,26 +567,11 @@ static command_result embark_prospector(color_ostream &out, df::viewscreen_choose_start_sitest *screen, const prospect_options &options) { - out.printerr("prospector at embark is not currently available.\n"); - return CR_FAILURE; - -/* - if (!world || !world->world_data) - { + if (!world->world_data) { out.printerr("World data is not available.\n"); return CR_FAILURE; } - df::world_data *data = world->world_data; - coord2d cur_region = screen->location.region_pos; - auto cur_details = get_details(data, cur_region); - - if (!cur_details) - { - out.printerr("Current region details are not available.\n"); - return CR_FAILURE; - } - // Compute material maps MatMap layerMats; MatMap veinMats; @@ -595,12 +580,18 @@ static command_result embark_prospector(color_ostream &out, // Compute biomes std::map biomes; - for (int x = screen->location.embark_pos_min.x; x <= 15 && x <= screen->location.embark_pos_max.x; x++) - { - for (int y = screen->location.embark_pos_min.y; y <= 15 && y <= screen->location.embark_pos_max.y; y++) - { + int32_t max_x = (world->worldgen.worldgen_parms.dim_x * 16) - 1; + int32_t max_y = (world->worldgen.worldgen_parms.dim_y * 16) - 1; + + for (int x = screen->location.embark_pos_min.x; x <= max_x && x <= screen->location.embark_pos_max.x; ++x) { + for (int y = screen->location.embark_pos_min.y; y <= max_y && y <= screen->location.embark_pos_max.y; ++y) { + auto cur_details = get_details(world->world_data, coord2d(x / 16, y / 16)); + + if (!cur_details) + continue; + EmbarkTileLayout tile; - if (!estimate_underground(out, tile, cur_details, x, y) || + if (!estimate_underground(out, tile, cur_details, x % 16, y % 16) || !estimate_materials(out, tile, layerMats, veinMats)) return CR_FAILURE; @@ -627,7 +618,6 @@ static command_result embark_prospector(color_ostream &out, out << std::endl << "Warning: the above data is only a very rough estimate." << std::endl; return CR_OK; -*/ } static command_result map_prospector(color_ostream &con,