cc: give a penalty to agriculture on cliffs

This commit is contained in:
Crypto City 2021-03-27 09:52:29 +00:00
parent 534e5428fb
commit c7578ffb49
5 changed files with 20 additions and 9 deletions

View File

@ -83,7 +83,8 @@ uint32_t cc_command_handler_harvest::get_harvest_amount(const cryptonote::Blockc
const bool natural_pesticides = cc::is_discovery_enabled(db, DISCOVERY_NATURAL_PESTICIDES, fd.owner);
const bool chemical_pesticides = cc::is_discovery_enabled(db, DISCOVERY_CHEMICAL_PESTICIDES, fd.owner);
const bool bountiful_aquifers = (cd.specializations >> cc::CITY_SPECIALIZATION_BOUNTIFUL_AQUIFERS) & 1;
return cc::get_harvest_amount(fd.x0, fd.y0, fd.x1, fd.y1, fd.economic_power, crop, crop_yield, nutrients, fd.potential[POTENTIAL_AGRICULTURE], age,
return cc::get_harvest_amount(fd.x0, fd.y0, fd.x1, fd.y1, fd.economic_power, crop, crop_yield, nutrients,
fd.potential[POTENTIAL_AGRICULTURE], fd.potential[POTENTIAL_CLIFF], age,
special_event, fertile_grounds,
improved_yoke, advanced_yoke, improved_plough, advanced_plough, improved_scarecrow, irrigation, drainage, weather_expertise,
advanced_fertilizers, natural_pesticides, chemical_pesticides, bountiful_aquifers);

View File

@ -318,7 +318,7 @@ uint32_t get_harvest_labour(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1,
return labour;
}
uint32_t get_harvest_amount(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t economic_power, uint8_t crop, uint32_t crop_yield, uint8_t nutrients, uint8_t agricultural_potential, uint64_t age, cc::special_event_t special_event, bool fertile_grounds, bool improved_yoke, bool advanced_yoke, bool improved_plough, bool advanced_plough, bool improved_scarecrow, bool irrigation, bool drainage, bool weather_expertise, bool advanced_fertilizers, bool natural_pesticides, bool chemical_pesticides, bool bountiful_aquifers)
uint32_t get_harvest_amount(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t economic_power, uint8_t crop, uint32_t crop_yield, uint8_t nutrients, uint8_t agricultural_potential, uint8_t cliff_potential, uint64_t age, cc::special_event_t special_event, bool fertile_grounds, bool improved_yoke, bool advanced_yoke, bool improved_plough, bool advanced_plough, bool improved_scarecrow, bool irrigation, bool drainage, bool weather_expertise, bool advanced_fertilizers, bool natural_pesticides, bool chemical_pesticides, bool bountiful_aquifers)
{
const uint32_t w = x1 - x0 + 1;
const uint32_t h = y1 - y0 + 1;
@ -328,7 +328,8 @@ uint32_t get_harvest_amount(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1,
base = base * VEGETABLES_HARVEST_PERCENT / 100;
else if (crop == CROP_GRAIN)
base = base * GRAIN_HARVEST_PERCENT / 100;
uint64_t cooked = cc::scale_generator_output_with_economic_power_allow_0(base, economic_power, agricultural_potential, age);
const uint8_t mixed_potential = agricultural_potential - std::min(agricultural_potential, cliff_potential);
uint64_t cooked = cc::scale_generator_output_with_economic_power_allow_0(base, economic_power, mixed_potential, age);
// apply events and discoveries
switch (special_event)

View File

@ -32,7 +32,7 @@ uint32_t get_crop_yield(uint8_t crop, uint32_t start_yield, const std::vector<in
std::string print_crop_yield(uint32_t yield);
uint32_t get_sowing_labour(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t economic_power);
uint32_t get_harvest_labour(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t economic_power, uint8_t crop, bool ergonomic_scythe, bool grain_cradle);
uint32_t get_harvest_amount(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t economic_power, uint8_t crop, uint32_t crop_yield, uint8_t nutrients, uint8_t agricultural_potential, uint64_t age, cc::special_event_t special_event, bool fertile_grounds, bool improved_yoke, bool advanced_yoke, bool improved_plough, bool advanced_plough, bool improved_scarecrow, bool irrigation, bool drainage, bool weather_expertise, bool advanced_fertilizers, bool natural_pesticides, bool chemical_pesticides, bool bountiful_aquifers);
uint32_t get_harvest_amount(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1, uint32_t economic_power, uint8_t crop, uint32_t crop_yield, uint8_t nutrients, uint8_t agricultural_potential, uint8_t cliff_potential, uint64_t age, cc::special_event_t special_event, bool fertile_grounds, bool improved_yoke, bool advanced_yoke, bool improved_plough, bool advanced_plough, bool improved_scarecrow, bool irrigation, bool drainage, bool weather_expertise, bool advanced_fertilizers, bool natural_pesticides, bool chemical_pesticides, bool bountiful_aquifers);
bool check_food_calendar_sanity();
}

View File

@ -404,7 +404,15 @@ void UIBuildingSettingsDialog::SetBudget(const Map *map, const GameState *gameSt
cc::init_potential(gameState->cityState.id, gameState->cityState.seed, flag->x0, flag->y0, flag->x1, flag->y1, potential);
AddRow(rightLayout, "Stability", String((unsigned)potential[POTENTIAL_STABILITY]));
if (role == ROLE_AGRICULTURAL)
AddRow(rightLayout, "Agricultural potential", String((unsigned)potential[POTENTIAL_AGRICULTURE]));
{
const uint8_t p_agr = potential[POTENTIAL_AGRICULTURE];
const uint8_t p_cliff = potential[POTENTIAL_CLIFF];
const uint8_t p_actual = p_agr - std::min(p_agr, p_cliff);
if (p_actual < p_agr)
AddRow(rightLayout, "Agricultural potential", String((unsigned)p_actual) + " (-" + String((unsigned)(p_agr - p_actual)) + " from cliffs)");
else
AddRow(rightLayout, "Agricultural potential", String((unsigned)p_actual));
}
AddRow(rightLayout, "Geothermal potential", String((unsigned)potential[POTENTIAL_GEOTHERMAL]));
if (role == ROLE_STONECUTTER)
AddRow(rightLayout, "Gemstone potential", String((unsigned)potential[POTENTIAL_GEMSTONE]));
@ -588,9 +596,10 @@ void UIBuildingSettingsDialog::SetBudget(const Map *map, const GameState *gameSt
const cc::special_event_t special_event = (cc::special_event_t)gameState->cityState.special_event;
const bool fertile_ground = (game->cityState.specializations >> cc::CITY_SPECIALIZATION_FERTILE_GROUNDS) & 1;
const bool bountiful_aquifers = (game->cityState.specializations >> cc::CITY_SPECIALIZATION_BOUNTIFUL_AQUIFERS) & 1;
const uint8_t potential = flag->potential[POTENTIAL_AGRICULTURE];
uint32_t vegetables_harvest = cc::get_harvest_amount(flag->x0, flag->y0, flag->x1, flag->y1, economic_power, CROP_VEGETABLES, 65536, flag->vegetables_nutrients, potential, 0, special_event, fertile_ground, false, false, false, false, false, false, false, false, false, false, false, bountiful_aquifers);
uint32_t grain_harvest = cc::get_harvest_amount(flag->x0, flag->y0, flag->x1, flag->y1, economic_power, CROP_GRAIN, 65536, flag->grain_nutrients, potential, 0, special_event, fertile_ground, false, false, false, false, false, false, false, false, false, false, false, bountiful_aquifers);
const uint8_t agricultural_potential = flag->potential[POTENTIAL_AGRICULTURE];
const uint8_t cliff_potential = flag->potential[POTENTIAL_CLIFF];
uint32_t vegetables_harvest = cc::get_harvest_amount(flag->x0, flag->y0, flag->x1, flag->y1, economic_power, CROP_VEGETABLES, 65536, flag->vegetables_nutrients, agricultural_potential, cliff_potential, 0, special_event, fertile_ground, false, false, false, false, false, false, false, false, false, false, false, bountiful_aquifers);
uint32_t grain_harvest = cc::get_harvest_amount(flag->x0, flag->y0, flag->x1, flag->y1, economic_power, CROP_GRAIN, 65536, flag->grain_nutrients, agricultural_potential, cliff_potential, 0, special_event, fertile_ground, false, false, false, false, false, false, false, false, false, false, false, bountiful_aquifers);
uint32_t vegetables_food_points = 0, grain_food_points = 0;
cc::get_food_points(ITEM_FOOD_VEGETABLES, vegetables_food_points);
cc::get_food_points(ITEM_FOOD_GRAIN, grain_food_points);

View File

@ -146,7 +146,7 @@ void UIHarvestDialog::UpdateData(const std::shared_ptr<GameWallet> &w)
const uint64_t age = game->top_height + 1 - flag->sow_height;
const bool fertile_ground = (game->cityState.specializations >> cc::CITY_SPECIALIZATION_FERTILE_GROUNDS) & 1;
const bool bountiful_aquifers = (game->cityState.specializations >> cc::CITY_SPECIALIZATION_BOUNTIFUL_AQUIFERS) & 1;
uint32_t quantity = cc::get_harvest_amount(flag->x0, flag->y0, flag->x1, flag->y1, flag->economic_power, flag->crop, crop_yield, nutrients, flag->potential[POTENTIAL_AGRICULTURE], age, (cc::special_event_t)game->cityState.special_event, fertile_ground, has_improved_yoke, has_advanced_yoke, has_improved_plough, has_advanced_plough, has_improved_scarecrow, has_irrigation, has_drainage, has_weather_expertise, has_advanced_fertilizers, has_natural_pesticides, has_chemical_pesticides, bountiful_aquifers);
uint32_t quantity = cc::get_harvest_amount(flag->x0, flag->y0, flag->x1, flag->y1, flag->economic_power, flag->crop, crop_yield, nutrients, flag->potential[POTENTIAL_AGRICULTURE], flag->potential[POTENTIAL_CLIFF], age, (cc::special_event_t)game->cityState.special_event, fertile_ground, has_improved_yoke, has_advanced_yoke, has_improved_plough, has_advanced_plough, has_improved_scarecrow, has_irrigation, has_drainage, has_weather_expertise, has_advanced_fertilizers, has_natural_pesticides, has_chemical_pesticides, bountiful_aquifers);
quantityWidget->SetText(std::to_string(quantity).c_str());
const uint32_t labour = cc::get_harvest_labour(flag->x0, flag->y0, flag->x1, flag->y1, flag->economic_power, flag->crop, has_ergonomic_scythe, has_grain_cradle);