From 9a8e2518533a2b8d1f2f471cbf53e8b4f2815228 Mon Sep 17 00:00:00 2001 From: PatrikLundell Date: Thu, 21 Jun 2018 20:51:36 +0200 Subject: [PATCH] Updated evil weather --- plugins/embark-assistant/survey.cpp | 69 +++++++++++++++++++++++++---- 1 file changed, 61 insertions(+), 8 deletions(-) diff --git a/plugins/embark-assistant/survey.cpp b/plugins/embark-assistant/survey.cpp index b057ff290..b13d9513e 100644 --- a/plugins/embark-assistant/survey.cpp +++ b/plugins/embark-assistant/survey.cpp @@ -265,6 +265,9 @@ namespace embark_assist { for (uint16_t i = 0; i < world->interaction_instances.all.size(); i++) { auto interaction = world->raws.interactions[world->interaction_instances.all[i]->interaction_id]; uint16_t region_index = world->interaction_instances.all[i]->region_index; + bool blood_rain = false; + bool permanent_syndrome_rain = false; + bool temporary_syndrome_rain = false; bool thralling = false; bool reanimating = false; @@ -284,20 +287,50 @@ namespace embark_assist { if (material && DFHack::MaterialInfo(material->mat_type, material->mat_index).isInorganic()) { for (uint16_t l = 0; l < world->raws.inorganics[material->mat_index]->material.syndrome.size(); l++) { for (uint16_t m = 0; m < world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce.size(); m++) { - if (world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::FLASH_TILE) { + if (world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::FLASH_TILE) { // Using this as a proxy. There seems to be a group of 4 effects for thralls: // display symbol, flash symbol, phys att change and one more. thralling = true; } + else if (world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::PAIN || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::SWELLING || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::OOZING || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::BRUISING || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::BLISTERS || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::NUMBNESS || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::PARALYSIS || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::FEVER || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::BLEEDING || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::COUGH_BLOOD || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::VOMIT_BLOOD || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::NAUSEA || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::UNCONSCIOUSNESS || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::NECROSIS || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::IMPAIR_FUNCTION || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::DROWSINESS || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::DIZZINESS || + world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->getType() == df::creature_interaction_effect_type::ERRATIC_BEHAVIOR) { // Doubtful if possible for region. + if (world->raws.inorganics[material->mat_index]->material.syndrome[l]->ce[m]->end == -1) { + permanent_syndrome_rain = true; + } + else { + temporary_syndrome_rain = true; + } + } } } } + else { // If not inorganic it's always blood, as far as known. + blood_rain = true; + } } } } for (uint16_t k = 0; k < world_data->regions[region_index]->region_coords.size(); k++) { - survey_results->at(world_data->regions[region_index]->region_coords[k].x).at(world_data->regions[region_index]->region_coords[k].y).evil_weather[5] = true; + survey_results->at(world_data->regions[region_index]->region_coords[k].x).at(world_data->regions[region_index]->region_coords[k].y).blood_rain[5] = blood_rain; + survey_results->at(world_data->regions[region_index]->region_coords[k].x).at(world_data->regions[region_index]->region_coords[k].y).permanent_syndrome_rain[5] = permanent_syndrome_rain; + survey_results->at(world_data->regions[region_index]->region_coords[k].x).at(world_data->regions[region_index]->region_coords[k].y).temporary_syndrome_rain[5] = temporary_syndrome_rain; survey_results->at(world_data->regions[region_index]->region_coords[k].x).at(world_data->regions[region_index]->region_coords[k].y).reanimating[5] = reanimating; survey_results->at(world_data->regions[region_index]->region_coords[k].x).at(world_data->regions[region_index]->region_coords[k].y).thralling[5] = thralling; } @@ -305,25 +338,45 @@ namespace embark_assist { for (uint16_t i = 0; i < world->worldgen.worldgen_parms.dim_x; i++) { for (uint16_t k = 0; k < world->worldgen.worldgen_parms.dim_y; k++) { - survey_results->at(i).at(k).evil_weather_possible = false; + survey_results->at(i).at(k).blood_rain_possible = false; + survey_results->at(i).at(k).permanent_syndrome_rain_possible = false; + survey_results->at(i).at(k).temporary_syndrome_rain_possible = false; survey_results->at(i).at(k).reanimating_possible = false; survey_results->at(i).at(k).thralling_possible = false; - survey_results->at(i).at(k).evil_weather_full = true; + survey_results->at(i).at(k).blood_rain_full = true; + survey_results->at(i).at(k).permanent_syndrome_rain_full = true; + survey_results->at(i).at(k).temporary_syndrome_rain_full = true; survey_results->at(i).at(k).reanimating_full = true; survey_results->at(i).at(k).thralling_full = true; for (uint8_t l = 1; l < 10; l++) { if (survey_results->at(i).at(k).biome_index[l] != -1) { df::coord2d adjusted = apply_offset(i, k, l); - survey_results->at(i).at(k).evil_weather[l] = survey_results->at(adjusted.x).at(adjusted.y).evil_weather[5]; + survey_results->at(i).at(k).blood_rain[l] = survey_results->at(adjusted.x).at(adjusted.y).blood_rain[5]; + survey_results->at(i).at(k).permanent_syndrome_rain[l] = survey_results->at(adjusted.x).at(adjusted.y).permanent_syndrome_rain[5]; + survey_results->at(i).at(k).temporary_syndrome_rain[l] = survey_results->at(adjusted.x).at(adjusted.y).temporary_syndrome_rain[5]; survey_results->at(i).at(k).reanimating[l] = survey_results->at(adjusted.x).at(adjusted.y).reanimating[5]; survey_results->at(i).at(k).thralling[l] = survey_results->at(adjusted.x).at(adjusted.y).thralling[5]; - if (survey_results->at(i).at(k).evil_weather[l]) { - survey_results->at(i).at(k).evil_weather_possible = true; + if (survey_results->at(i).at(k).blood_rain[l]) { + survey_results->at(i).at(k).blood_rain_possible = true; + } + else { + survey_results->at(i).at(k).blood_rain_full = false; + } + + if (survey_results->at(i).at(k).permanent_syndrome_rain[l]) { + survey_results->at(i).at(k).permanent_syndrome_rain_possible = true; + } + else { + survey_results->at(i).at(k).permanent_syndrome_rain_full = false; + } + + if (survey_results->at(i).at(k).temporary_syndrome_rain[l]) { + survey_results->at(i).at(k).temporary_syndrome_rain_possible = true; } else { - survey_results->at(i).at(k).evil_weather_full = false; + survey_results->at(i).at(k).temporary_syndrome_rain_full = false; } if (survey_results->at(i).at(k).reanimating[l]) {