123#define SPECLIST_TAG cityimpr
124#define SPECLIST_TYPE struct cityimpr
127#define cityimpr_list_iterate(cityimprlist, pcityimpr) \
128 TYPED_LIST_ITERATE(struct cityimpr, cityimprlist, pcityimpr)
129#define cityimpr_list_iterate_end LIST_ITERATE_END
132 struct cityimpr_list *imprs);
134 struct unit_list *punitlist);
154 struct city *pcity_to);
223 if (pcity->server.needs_refresh) {
251 PL_(
"%s is selling %s (obsolete) for %d.",
252 "%s is selling %s (obsolete) for %d.",
261 if (sold && refresh) {
302 if (pwork == pcity) {
351 cmp->happy_factor = 0;
374 bool broadcast_needed;
426 _(
"The citizen governor can't fulfill the requirements "
427 "for %s. Passing back control."),
440 cmp.minimal_surplus[o] = 0;
451 cmp.minimal_surplus[o] =
MIN(
cmp.minimal_surplus[o],
475 log_error(
"%s radius changed when already arranged workers.",
482 if (broadcast_needed) {
496 const struct impr_type *pimprove = pcity->production.value.building;
498 if (VUT_IMPROVEMENT == pcity->production.kind
504 _(
"Notice: Wonder %s in %s will be finished next turn."),
515 struct conn_list *dest,
516 const struct player *cache_for_player)
520 int turns_growth, turns_granary;
535 if (5 > turns_growth && 5 > turns_granary
536 && turns_growth < turns_granary) {
539 _(
"Suggest throttling growth in %s to use %s "
540 "(being built) more effectively."),
544 if (NULL != cache_for_player) {
554 _(
"%s may soon grow to size %i."),
557 if (NULL != cache_for_player) {
566 _(
"Warning: Famine feared in %s."),
city_link(pcity));
568 if (NULL != cache_for_player) {
584 if (NULL != pplayer) {
612 n = city_list_size(pplayer->
cities);
631 if (proute->dir != RDIR_FROM &&
goods_has_flag(proute->goods, GF_DEPLETES)
684 case GOLD_UPKEEP_CITY:
686 case GOLD_UPKEEP_MIXED:
690 case GOLD_UPKEEP_NATION:
706 _(
"WARNING, we're LOW on FUNDS %s."),
712 if (pplayer->got_tech && pplayer->research->researched > 0) {
713 pplayer->research->researched = 0;
733 enum unit_loss_reason wipe_reason,
734 bool wipe_in_the_end)
750 NULL, NULL, NULL, NULL);
777 return change - want;
793 ptile, _index, _x, _y) {
800 return change - want;
809 struct player *destroyer,
const char *reason)
844 if (loss_remain > 0) {
846#ifndef FREECIV_NDEBUG
865 "city_reduce_size() has remaining"
866 "%d of %d for \"%s\"[%d]",
867 loss_remain, pop_loss,
881 if (reason != NULL) {
885 (lua_Integer)(-pop_loss), reason);
901 }
else if (change < 0) {
905#ifndef FREECIV_NDEBUG
912 "city_repair_size() has remaining %d of %d for \"%s\"[%d]",
928 return CLIP(0, savings, 100);
954 bool have_square =
FALSE;
966 _(
"%s needs %s (being built) to grow beyond size %d."),
972 _(
"%s needs an improvement to grow beyond size %d."),
999 ptile, _index, _x, _y) {
1028 struct player *nationality)
1050 _(
"%s grows to size %d."),
1062 struct player *nationality,
const char *reason)
1086 real_change = current_size - old_size;
1088 if (real_change != 0 && reason != NULL) {
1090 (lua_Integer)real_change, reason);
1096 }
else if (change < 0) {
1114 int saved_id = pcity->
id;
1122 _(
"A recent plague outbreak prevents growth in %s."),
1135 (lua_Integer)1,
"growth");
1154 _(
"Famine feared in %s, %s lost!"),
1168 _(
"Famine causes population loss in %s."),
1173 _(
"Famine destroys %s entirely."),
1192 const void *ptarget;
1193 const char *tgt_name;
1194 const struct requirement_vector *build_reqs;
1195 const char *signal_name;
1206 switch (target->
kind) {
1211 signal_name =
"unit_cant_be_built";
1213 case VUT_IMPROVEMENT:
1217 signal_name =
"building_cant_be_built";
1229 switch (preq->source.kind) {
1231 if (preq->present) {
1234 _(
"%s can't build %s from the worklist; "
1235 "tech %s not yet available. Postponing..."),
1239 (preq->source.value.advance));
1241 pcity,
"need_tech");
1248 if (preq->present) {
1251 _(
"%s can't build %s from the worklist; "
1252 "no tech with flag \"%s\" yet available. "
1256 tech_flag_id_name(preq->source.value.techflag));
1258 pcity,
"need_techflag");
1264 case VUT_IMPROVEMENT:
1265 if (preq->range == REQ_RANGE_LOCAL) {
1269 if (preq->present) {
1272 _(
"%s can't build %s from the worklist; "
1273 "need to have %s first. Postponing..."),
1277 preq->source.value.building));
1279 pcity,
"need_building");
1283 _(
"%s can't build %s from the worklist; "
1284 "need to not have %s. Postponing..."),
1288 preq->source.value.building));
1290 pcity,
"have_building");
1294 case VUT_IMPR_GENUS:
1295 if (preq->range == REQ_RANGE_LOCAL) {
1299 if (preq->present) {
1302 _(
"%s can't build %s from the worklist; "
1303 "need to have %s first. Postponing..."),
1306 impr_genus_id_translated_name(
1307 preq->source.value.impr_genus));
1309 pcity,
"need_building_genus");
1313 _(
"%s can't build %s from the worklist; "
1314 "need to not have %s. Postponing..."),
1317 impr_genus_id_translated_name(
1318 preq->source.value.impr_genus));
1320 pcity,
"have_building_genus");
1324 case VUT_GOVERNMENT:
1325 if (preq->present) {
1328 _(
"%s can't build %s from the worklist; "
1329 "it needs %s government. Postponing..."),
1334 pcity,
"need_government");
1338 _(
"%s can't build %s from the worklist; "
1339 "it cannot have %s government. Postponing..."),
1344 pcity,
"have_government");
1347 case VUT_ACHIEVEMENT:
1348 if (preq->present) {
1351 _(
"%s can't build %s from the worklist; "
1352 "it needs \"%s\" achievement. Postponing..."),
1357 pcity,
"need_achievement");
1364 if (preq->present) {
1367 Q_(
"?extra:%s can't build %s from the worklist; "
1368 "%s is required. Postponing..."),
1373 pcity,
"need_extra");
1377 Q_(
"?extra:%s can't build %s from the worklist; "
1378 "%s is prohibited. Postponing..."),
1383 pcity,
"have_extra");
1387 if (preq->present) {
1390 Q_(
"?extra:%s can't build %s from the worklist; "
1391 "%s is required. Postponing..."),
1396 pcity,
"need_good");
1400 Q_(
"?extra:%s can't build %s from the worklist; "
1401 "%s is prohibited. Postponing..."),
1406 pcity,
"have_good");
1410 if (preq->present) {
1413 Q_(
"?terrain:%s can't build %s from the worklist; "
1414 "%s terrain is required. Postponing..."),
1419 pcity,
"need_terrain");
1423 Q_(
"?terrain:%s can't build %s from the worklist; "
1424 "%s terrain is prohibited. Postponing..."),
1429 pcity,
"have_terrain");
1433 if (preq->range < REQ_RANGE_TRADE_ROUTE
1434 || preq->range == REQ_RANGE_PLAYER) {
1438 if (preq->present) {
1442 Q_(
"?nation:%s can't build %s from the worklist; "
1443 "%s nation is required. Postponing..."),
1448 pcity,
"need_nation");
1452 Q_(
"?nation:%s can't build %s from the worklist; "
1453 "%s nation is prohibited. Postponing..."),
1458 pcity,
"have_nation");
1462 case VUT_NATIONGROUP:
1463 if (preq->range < REQ_RANGE_TRADE_ROUTE
1464 || preq->range == REQ_RANGE_PLAYER) {
1468 if (preq->present) {
1472 Q_(
"?ngroup:%s can't build %s from the worklist; "
1473 "%s nation is required. Postponing..."),
1478 pcity,
"need_nationgroup");
1482 Q_(
"?ngroup:%s can't build %s from the worklist; "
1483 "%s nation is prohibited. Postponing..."),
1488 pcity,
"have_nationgroup");
1496 if (preq->present) {
1499 _(
"%s can't build %s from the worklist; "
1500 "only %s style cities may build this. Postponing..."),
1505 pcity,
"need_style");
1509 _(
"%s can't build %s from the worklist; "
1510 "%s style cities may not build this. Postponing..."),
1515 pcity,
"have_style");
1518 case VUT_NATIONALITY:
1521 if (preq->present) {
1525 _(
"%s can't build %s from the worklist; "
1526 "only city with %s may build this. Postponing..."),
1531 pcity,
"need_nationality");
1536 _(
"%s can't build %s from the worklist; "
1537 "only city without %s may build this. Postponing..."),
1542 pcity,
"have_nationality");
1546 case VUT_DIPLREL_TILE:
1547 case VUT_DIPLREL_TILE_O:
1548 if (preq->present) {
1556 _(
"%s can't build %s from the worklist; "
1557 "the relationship '%s' is required."
1562 preq->source.value.diplrel));
1564 if (preq->source.kind == VUT_DIPLREL_TILE) {
1565 reason =
"need_diplrel_tile";
1566 }
else if (preq->source.kind == VUT_DIPLREL_TILE_O) {
1567 reason =
"need_diplrel_tile_o";
1569 fc_assert(preq->source.kind == VUT_DIPLREL);
1570 reason =
"need_diplrel";
1580 _(
"%s can't build %s from the worklist; "
1581 "the relationship '%s' is prohibited."
1586 preq->source.value.diplrel));
1588 if (preq->source.kind == VUT_DIPLREL_TILE) {
1589 reason =
"have_diplrel_tile";
1590 }
else if (preq->source.kind == VUT_DIPLREL_TILE_O) {
1591 reason =
"have_diplrel_tile_o";
1593 fc_assert(preq->source.kind == VUT_DIPLREL);
1594 reason =
"have_diplrel";
1601 case VUT_DIPLREL_UNITANY:
1602 case VUT_DIPLREL_UNITANY_O:
1603 if (preq->present) {
1611 _(
"%s can't build %s from the worklist; "
1612 "unit with the relationship '%s' is required."
1617 preq->source.value.diplrel));
1619 if (preq->source.kind == VUT_DIPLREL_UNITANY) {
1620 reason =
"need_diplrel_unitany";
1622 fc_assert(preq->source.kind == VUT_DIPLREL_UNITANY_O);
1623 reason =
"need_diplrel_unitany_o";
1633 _(
"%s can't build %s from the worklist; "
1634 "unit with the relationship '%s' is prohibited."
1639 preq->source.value.diplrel));
1641 if (preq->source.kind == VUT_DIPLREL_UNITANY) {
1642 reason =
"have_diplrel_unitany";
1644 fc_assert(preq->source.kind == VUT_DIPLREL_UNITANY_O);
1645 reason =
"have_diplrel_unitany_o";
1653 if (preq->present) {
1656 _(
"%s can't build %s from the worklist; "
1657 "city must be of size %d or larger. "
1661 preq->source.value.minsize);
1663 pcity,
"need_minsize");
1667 _(
"%s can't build %s from the worklist; "
1668 "city must be of size %d or smaller."
1672 (preq->source.value.minsize - 1));
1674 pcity,
"need_minsize");
1677 case VUT_MINCULTURE:
1678 if (preq->present) {
1681 _(
"%s can't build %s from the worklist; "
1682 "city must have culture of %d. Postponing..."),
1685 preq->source.value.minculture);
1687 pcity,
"need_minculture");
1693 case VUT_MINFOREIGNPCT:
1694 if (preq->present) {
1697 _(
"%s can't build %s from the worklist; "
1698 "city must have %d%% foreign population. Postponing..."),
1701 preq->source.value.minforeignpct);
1703 pcity,
"need_minforeignpct");
1707 _(
"%s can't build %s from the worklist; "
1708 "city must have %d%% native population. Postponing..."),
1711 100 - preq->source.value.minforeignpct);
1713 pcity,
"need_minforeignpct");
1717 if (preq->present) {
1720 _(
"%s can't build %s from the worklist; "
1721 "%d techs must be known. Postponing..."),
1724 preq->source.value.min_techs);
1726 pcity,
"need_mintechs");
1731 case VUT_MAXTILEUNITS:
1732 if (preq->present) {
1735 PL_(
"%s can't build %s from the worklist; "
1736 "more than %d unit on tile."
1738 "%s can't build %s from the worklist; "
1739 "more than %d units on tile."
1741 preq->source.value.max_tile_units),
1744 preq->source.value.max_tile_units);
1746 pcity,
"need_tileunits");
1750 PL_(
"%s can't build %s from the worklist; "
1751 "fewer than %d unit on tile."
1753 "%s can't build %s from the worklist; "
1754 "fewer than %d units on tile."
1756 preq->source.value.max_tile_units + 1),
1759 preq->source.value.max_tile_units + 1);
1761 pcity,
"need_tileunits");
1768 case VUT_TERRAINCLASS:
1774 if (preq->present) {
1777 _(
"%s can't build %s from the worklist; "
1778 "terrain with \"%s\" flag is required. "
1782 terrain_flag_id_name(preq->source.value.terrainflag));
1784 pcity,
"need_terrainflag");
1788 _(
"%s can't build %s from the worklist; "
1789 "terrain with \"%s\" flag is prohibited. "
1793 terrain_flag_id_name(preq->source.value.terrainflag));
1795 pcity,
"have_terrainflag");
1799 if (preq->present) {
1802 _(
"%s can't build %s from the worklist; "
1803 "road with \"%s\" flag is required. "
1807 road_flag_id_name(preq->source.value.roadflag));
1809 pcity,
"need_roadflag");
1813 _(
"%s can't build %s from the worklist; "
1814 "road with \"%s\" flag is prohibited. "
1818 road_flag_id_name(preq->source.value.roadflag));
1820 pcity,
"have_roadflag");
1824 if (preq->present) {
1827 _(
"%s can't build %s from the worklist; "
1828 "extra with \"%s\" flag is required. "
1832 extra_flag_id_translated_name(preq->source.value.extraflag));
1834 pcity,
"need_extraflag");
1838 _(
"%s can't build %s from the worklist; "
1839 "extra with \"%s\" flag is prohibited. "
1843 extra_flag_id_translated_name(preq->source.value.extraflag));
1845 pcity,
"have_extraflag");
1852 case VUT_MINVETERAN:
1859 case VUT_SPECIALIST:
1860 case VUT_TERRAINALTER:
1863 log_error(
"worklist_change_build_target() has bogus preq");
1865 case VUT_CITYSTATUS:
1866 if (preq->source.value.citystatus == CITYS_OWNED_BY_ORIGINAL) {
1867 if (preq->range == REQ_RANGE_CITY) {
1871 if (preq->present) {
1875 _(
"%s can't build %s from the worklist; "
1876 "only available when city in range %s \"%s\". "
1879 tgt_name, req_range_name(preq->range),
1880 citystatus_type_name(preq->source.value.citystatus));
1882 pcity,
"need_citystatus");
1887 _(
"%s can't build %s from the worklist; "
1888 "not available when city in range %s is \"%s\". "
1891 tgt_name, req_range_name(preq->range),
1892 citystatus_type_name(preq->source.value.citystatus));
1894 pcity,
"have_citystatus");
1899 log_error(
"worklist_change_build_target() has bogus citystatus preq");
1903 if (preq->present) {
1907 _(
"%s can't build %s from the worklist; "
1908 "only available from %s. Postponing..."),
1911 textyear(preq->source.value.minyear));
1913 pcity,
"need_minyear");
1919 case VUT_MINCALFRAG:
1922 if (preq->present) {
1927 _(
"%s can't build %s from the worklist; "
1928 "only available from %s. Postponing..."),
1933 pcity,
"need_mincalfrag");
1940 _(
"%s can't build %s from the worklist; "
1941 "not available after %s. Postponing..."),
1946 pcity,
"have_mincalfrag");
1950 if (preq->present) {
1955 _(
"%s can't build %s from the worklist; "
1956 "only available in worlds with %s map."),
1959 _(topo_flag_name(preq->source.value.topo_property)));
1961 pcity,
"need_topo");
1965 case VUT_SERVERSETTING:
1973 _(
"%s can't build %s from the worklist; "
1974 "only available when the server setting "
1981 pcity,
"need_setting");
1986 if (preq->present) {
1989 _(
"%s can't build %s from the worklist; "
1990 "only available once %d turns old. Postponing..."),
1993 preq->source.value.age);
2004 "worklist_change_build_target() "
2005 "called with invalid preq");
2042 bool success =
FALSE;
2044 int saved_id = pcity->
id;
2045 bool city_checked =
TRUE;
2057 if (!city_checked) {
2063 city_checked =
TRUE;
2077 switch (target.
kind) {
2093 _(
"%s can't build %s from the worklist; "
2094 "tech %s not yet available. Postponing..."),
2104 city_checked =
FALSE;
2114 _(
"%s can't build %s from the worklist. Purging..."),
2123 city_checked =
TRUE;
2128 city_checked =
FALSE;
2133 _(
"Production of %s is upgraded to %s in %s."),
2141 case VUT_IMPROVEMENT:
2166 city_checked =
TRUE;
2168 }
else if (success) {
2171 _(
"Production of %s is upgraded to %s in %s."),
2182 _(
"%s can't build %s from the worklist. Purging..."),
2188 city_checked =
TRUE;
2193 city_checked =
FALSE;
2200 log_error(
"worklist_change_build_target() has unrecognized "
2201 "target kind (%d)", target.
kind);
2220 _(
"The %s worklist is now empty."),
2253 case VUT_IMPROVEMENT:
2267 log_debug(
"Trying advisor_choose_build.");
2269 log_debug(
"Advisor_choose_build didn't kill us.");
2280 const struct impr_type *check = pimprove;
2281 const struct impr_type *best_upgrade = NULL;
2288 best_upgrade = check;
2292 return best_upgrade;
2306 _(
"Production of %s is upgraded to %s in %s."),
2326 const struct unit_type *check = punittype;
2335 best_upgrade = check;
2339 return best_upgrade;
2354 _(
"Production of %s is upgraded to %s in %s."),
2372 int size_reduction = 0;
2373 struct unit *sacrifizer;
2388 _(
"%s can't upkeep %s, unit disbanded."),
2424 if (size_reduction > 0) {
2425 if (size_reduction == 1) {
2428 _(
"Citizens in %s perish for their failure to "
2434 _(
"Citizens in %s perish for their failure to "
2455 int saved_id = pcity->
id;
2477 _(
"%s is building %s, which is no longer available."),
2517 _(
"The %s have finished building %s in %s."),
2524 _(
"%s has finished building %s."),
2545 PL_(
"%s boosts research; you gain %d immediate "
2547 "%s boosts research; you gain %d immediate "
2549 mod), provider, mod);
2552 for (i = 0; i < mod; i++) {
2559 Q_(
"?frombldg:Acquired %s from %s."), adv_name,
2565 Q_(
"?frombldg:The %s have acquired %s "
2567 research_name, adv_name, provider);
2572 _(
"The %s have started building a spaceship!"),
2659 int unit_shield_cost, num_units, i;
2660 int saved_city_id = pcity->
id;
2683 _(
"%s is building %s, which is no longer available."),
2687 log_verbose(
"%s %s tried to build %s, which is not available.",
2708 _(
"%s can't build %s yet. "
2709 "(city size: %d, unit population cost: %d)"),
2728 for (i = 0; i < num_units; i++) {
2743 _(
"%s is finished building %s."),
2767 log_normal(
"City %s (%s) has built %s but has no %d shields "
2780 PL_(
"%s cost %d population. %s shrinks to size %d.",
2781 "%s cost %d population. %s shrinks to size %d.",
2821 case VUT_IMPROVEMENT:
2844 struct cityimpr_list *imprs)
2851 if (!imprs || cityimpr_list_size(imprs) == 0) {
2855 r =
fc_rand(cityimpr_list_size(imprs));
2856 pcityimpr = cityimpr_list_get(imprs, r);
2860 _(
"Can't afford to maintain %s in %s, building sold!"),
2868 cityimpr_list_remove(imprs, pcityimpr);
2931 unit_list_destroy(punitlist);
2947 struct unit_list *punitlist)
2951 struct unit_list *cargo;
2955 if (!punitlist || unit_list_size(punitlist) == 0) {
2959 r =
fc_rand(unit_list_size(punitlist));
2960 punit = unit_list_get(punitlist, r);
2962 cargo = unit_list_new();
2972 if (pcargo->server.upkeep_paid[
O_GOLD] > 0) {
2975 unit_list_append(cargo, pcargo);
2981 if (unit_list_size(cargo) > 0) {
2987 unit_list_destroy(cargo);
2989 unit_list_remove(punitlist, ret);
2994 unit_list_destroy(cargo);
3005 unit_list_remove(punitlist,
punit);
3011 _(
"Not enough gold. %s disbanded."),
3021 unit_list_remove(punitlist,
punit);
3032 struct cityimpr_list *pimprlist;
3033 bool sell_unit =
TRUE;
3039 pimprlist = cityimpr_list_new();
3049 cityimpr_list_append(pimprlist, ci);
3061 && (cityimpr_list_size(pimprlist) > 0
3063 if ((!sell_unit && cityimpr_list_size(pimprlist) > 0)
3069 sell_unit = !sell_unit;
3084 cityimpr_list_destroy(pimprlist);
3132 struct cityimpr_list *pimprlist;
3139 pimprlist = cityimpr_list_new();
3148 cityimpr_list_append(pimprlist, ci);
3163 cityimpr_list_destroy(pimprlist);
3327 int cost_per_citizen =
cost / pcity->
size;
3330 int third_party = pcity->
size - natives - tgt_cit;
3332 cost = cost_per_citizen * (natives + 0.7 * third_party + 0.5 * tgt_cit);
3361 log_debug(
"In %s, building %s. Beg of Turn shields = %d",
3393 bool is_celebrating;
3412 int revolution_turns;
3429 _(
"Celebrations in your honor in %s."),
3435 _(
"Celebrations canceled in %s."),
3459 saved_id = pcity->
id;
3503 case GOLD_UPKEEP_CITY:
3504 case GOLD_UPKEEP_MIXED:
3510 case GOLD_UPKEEP_NATION:
3515 revolution_turns =
get_city_bonus(pcity, EFT_REVOLUTION_UNHAPPINESS);
3517 const char *revomsg;
3520 if (pcity->
anarchy == revolution_turns) {
3524 revomsg =
_(
" Unrest threatens to spread beyond the city.");
3531 _(
"Civil disorder in %s.%s"),
3536 _(
"CIVIL DISORDER CONTINUES in %s.%s"),
3542 _(
"Order restored in %s."),
3551 if (revolution_turns > 0 && pcity->
anarchy > revolution_turns) {
3554 _(
"The people have overthrown your %s, "
3555 "your country is in turmoil."),
3586 struct city *rcity=NULL;
3589 int saved_id = pcity->
id;
3598 _(
"%s can't build %s yet, "
3599 "as we can't disband our only city."),
3627 _(
"%s is disbanded into %s."),
3697 int build_shield_cost = 0;
3698 bool has_wonder =
FALSE;
3726 score *= (1 + (1 - exp(- (
float)
MAX(0, build_shield_cost) / 1000)) / 5);
3760 score *= (1.0 +
get_city_bonus(pcity, EFT_MIGRATION_PCT) / 100.0);
3779 struct city *pcity_to)
3781 struct player *pplayer_from, *pplayer_to, *pplayer_citizen;
3782 struct tile *ptile_from, *ptile_to;
3784 const char *nation_from, *nation_to;
3785 struct city *rcity = NULL;
3786 int to_id = pcity_to->
id;
3789 if (!pcity_from || !pcity_to) {
3794 pplayer_citizen = pplayer_from;
3806 bool migration =
FALSE;
3813 int max_food_tile = -1;
3821 max_food_tile =
MAX(max_food_tile,
3825 if (max_food_tile >= 0
3833 if (pplayer_from == pplayer_to) {
3837 _(
"Migrants from %s can't go to %s because there is "
3838 "not enough food available!"),
3839 name_from, name_to);
3844 _(
"Migrants from %s can't go to %s (%s) because there "
3845 "is not enough food available!"),
3846 name_from, name_to, nation_to);
3849 _(
"Migrants from %s (%s) can't go to %s because there "
3850 "is not enough food available!"),
3851 name_from, nation_from, name_to);
3860 if (pplayer_from == pplayer_to) {
3864 _(
"Migrants from %s can't go to %s because it needs "
3865 "an improvement to grow!"),
3866 name_from, name_to);
3871 _(
"Migrants from %s can't go to %s (%s) because it "
3872 "needs an improvement to grow!"),
3873 name_from, name_to, nation_to);
3876 _(
"Migrants from %s (%s) can't go to %s because it "
3877 "needs an improvement to grow!"),
3878 name_from, nation_from, name_to);
3904 int id = pcity_from->
id;
3913 (lua_Integer)(-1),
"migration_from");
3917 pcity_from->
owner, NULL);
3925 _(
"%s was disbanded by its citizens."),
3940 pplayer_citizen = pplayer_to;
3959 if (pplayer_from == pplayer_to) {
3963 _(
"Migrants from %s moved to %s in search of a better "
3964 "life."), name_from, name_to);
3969 _(
"Migrants from %s moved to %s (%s) in search of a "
3971 name_from, name_to, nation_to);
3974 _(
"Migrants from %s (%s) moved to %s in search of a "
3976 name_from, nation_from, name_to);
3991 (lua_Integer)1,
"migration_to");
3996 log_debug(
"[M] T%d migration successful (%s -> %s)",
4025 bool internat =
FALSE;
4039 if (!pplayer->cities) {
4066 _(
"All stored food destroyed in %s."),
city_link(pcity));
4081 bool had_internal_effect =
FALSE;
4095 had_internal_effect =
TRUE;
4103 had_internal_effect =
TRUE;
4109 && pcity->
size > 1)) {
4113 _(
"%s destroys %s entirely."),
4119 _(
"%s causes population loss in %s."),
4123 had_internal_effect =
TRUE;
4133 imprs[total++] = pimprove;
4144 _(
"%s destroys %s in %s."),
4149 had_internal_effect =
TRUE;
4155 had_internal_effect =
TRUE;
4169 _(
"Production of %s in %s destroyed."),
4172 had_internal_effect =
TRUE;
4177 had_internal_effect);
4202 if (result < probability) {
4224 float best_city_player_score, best_city_world_score;
4225 struct city *best_city_player, *best_city_world, *acity;
4226 float score_from, score_tmp, weight;
4228 bool internat =
FALSE;
4248 best_city_player_score = 0.0;
4249 best_city_world_score = 0.0;
4250 best_city_player = NULL;
4251 best_city_world = NULL;
4257 log_debug(
"[M] T%d check city: %s score: %6.3f (%s)",
4267 if (!acity || acity == pcity) {
4282 if (dist > mgr_dist) {
4288 weight = ((float) (mgr_dist + 1 - dist) / (float) (mgr_dist + 1));
4291 log_debug(
"[M] T%d - compare city: %s (%s) dist: %d mgr_dist: %d "
4297 if (score_tmp > score_from && score_tmp > best_city_player_score) {
4299 best_city_player_score = score_tmp;
4300 best_city_player = acity;
4302 log_debug(
"[M] T%d - best city (player): %s (%s) score: "
4305 best_city_player_score, score_from);
4318 if (score_tmp > score_from && score_tmp > best_city_world_score) {
4320 best_city_world_score = score_tmp;
4321 best_city_world = acity;
4323 log_debug(
"[M] T%d - best city (world): %s (%s) score: "
4327 best_city_world_score, score_from);
4332 if (best_city_player != NULL) {
4339 _(
"Citizens of %s are thinking about migrating to %s "
4340 "for a better life."),
4341 city_link_text,
city_link(best_city_player));
4350 if (best_city_world != NULL) {
4361 _(
"Citizens of %s are thinking about migrating to %s "
4362 "(%s) for a better life."),
4363 city_link_text,
city_link(best_city_world), nname);
4393 bool changed =
FALSE;
4397 if (ptile->worked == pcity
const char * achievement_name_translation(struct achievement *pach)
void advisor_choose_build(struct player *pplayer, struct city *pcity)
int tile_border_source_radius_sq(struct tile *ptile)
const char * textcalfrag(int frag)
const char * textyear(int year)
struct player_slot * citizens_random(const struct city *pcity)
void citizens_nation_add(struct city *pcity, const struct player_slot *pslot, int add)
citizens citizens_nation_get(const struct city *pcity, const struct player_slot *pslot)
struct player * citizens_unit_nationality(const struct city *pcity, int pop_cost, struct citizens_reduction *pchange)
void citizens_reduction_apply(struct city *pcity, const struct citizens_reduction *pchange)
void citizens_convert(struct city *pcity)
void citizens_update(struct city *pcity, struct player *plr)
const char * city_improvement_name_translation(const struct city *pcity, const struct impr_type *pimprove)
int city_granary_size(int city_size)
struct tile * city_map_to_tile(const struct civ_map *nmap, const struct tile *city_center, int city_radius_sq, int city_map_x, int city_map_y)
bool city_has_building(const struct city *pcity, const struct impr_type *pimprove)
bool is_capital(const struct city *pcity)
const char * city_name_get(const struct city *pcity)
void city_remove_improvement(struct city *pcity, const struct impr_type *pimprove)
int city_improvement_upkeep(const struct city *pcity, const struct impr_type *b)
int city_airlift_max(const struct city *pcity)
struct output_type * get_output_type(Output_type_id output)
bool is_city_option_set(const struct city *pcity, enum city_options option)
void city_size_add(struct city *pcity, int add)
bool city_production_has_flag(const struct city *pcity, enum impr_flag_id flag)
int city_production_unit_veteran_level(struct city *pcity, const struct unit_type *punittype)
bool can_city_build_improvement_now(const struct city *pcity, const struct impr_type *pimprove)
bool city_tile_index_to_xy(int *city_map_x, int *city_map_y, int city_tile_index, int city_radius_sq)
bool city_rapture_grow(const struct city *pcity)
int city_production_turns_to_build(const struct city *pcity, bool include_shield_stock)
bool city_unhappy(const struct city *pcity)
Specialist_type_id best_specialist(Output_type_id otype, const struct city *pcity)
struct city * city_list_find_number(struct city_list *This, int id)
bool city_celebrating(const struct city *pcity)
bool can_city_build_improvement_direct(const struct city *pcity, const struct impr_type *pimprove)
int city_illness_calc(const struct city *pcity, int *ill_base, int *ill_size, int *ill_trade, int *ill_pollution)
bool city_can_grow_to(const struct city *pcity, int pop_size)
void city_refresh_from_main_map(const struct civ_map *nmap, struct city *pcity, bool *workers_map)
bool city_happy(const struct city *pcity)
void city_add_improvement(struct city *pcity, const struct impr_type *pimprove)
int city_map_radius_sq_get(const struct city *pcity)
static int cmp(int v1, int v2)
int city_tile_output(const struct city *pcity, const struct tile *ptile, bool is_celebrating, Output_type_id otype)
bool can_city_build_unit_direct(const struct civ_map *nmap, const struct city *pcity, const struct unit_type *punittype)
bool can_city_build_now(const struct civ_map *nmap, const struct city *pcity, const struct universal *target)
bool can_city_build_unit_now(const struct civ_map *nmap, const struct city *pcity, const struct unit_type *punittype)
int city_map_tiles(int city_radius_sq)
bool city_can_work_tile(const struct city *pcity, const struct tile *ptile)
bool city_production_build_units(const struct city *pcity, bool add_production, int *num_units)
void city_rally_point_clear(struct city *pcity)
bool can_city_build_improvement_later(const struct city *pcity, const struct impr_type *pimprove)
bool city_had_recent_plague(const struct city *pcity)
bool city_can_change_build(const struct city *pcity)
bool can_city_build_unit_later(const struct civ_map *nmap, const struct city *pcity, const struct unit_type *punittype)
int city_total_unit_gold_upkeep(const struct city *pcity)
int city_total_impr_gold_upkeep(const struct city *pcity)
#define cities_iterate_end
#define city_list_iterate_safe(citylist, _city)
#define city_list_iterate(citylist, pcity)
#define city_tile(_pcity_)
#define cities_iterate(pcity)
static citizens city_size_get(const struct city *pcity)
#define city_tile_iterate_skip_free_worked(_nmap, _radius_sq, _city_tile, _tile, _index, _x, _y)
#define output_type_iterate(output)
#define INCITE_IMPOSSIBLE_COST
#define city_owner(_pcity_)
#define city_tile_iterate_skip_free_worked_end
#define city_list_iterate_end
#define city_tile_iterate(_nmap, _radius_sq, _city_tile, _tile)
#define city_list_iterate_safe_end
#define city_tile_iterate_end
#define CITY_MAP_MAX_RADIUS
#define city_built_iterate(_pcity, _p)
#define city_built_iterate_end
#define output_type_iterate_end
static bool city_illness_check(const struct city *pcity)
static void uk_rem_gold_append(struct unit *punit)
static bool worklist_change_build_target(struct player *pplayer, struct city *pcity)
void remove_obsolete_buildings(struct player *pplayer)
static bool city_build_stuff(struct player *pplayer, struct city *pcity)
static void city_reset_foodbox(struct city *pcity, int new_size)
static void apply_disaster(struct city *pcity, struct disaster_type *pdis)
static bool city_distribute_surplus_shields(struct player *pplayer, struct city *pcity)
int city_granary_savings(const struct city *pcity)
static void unit_list_referred_destroy(struct unit_list *punitlist)
static bool place_pollution(struct city *pcity, enum extra_cause cause)
void choose_build_target(struct player *pplayer, struct city *pcity)
static void uk_rem_gold_callback(struct unit *punit)
void auto_arrange_workers(struct city *pcity)
void city_refresh_queue_add(struct city *pcity)
static struct unit_list * uk_rem_gold
static bool city_balance_treasury_buildings(struct city *pcity)
static void update_city_activity(struct city *pcity)
static void upgrade_unit_prod(struct city *pcity)
static float city_migration_score(struct city *pcity)
void nullify_prechange_production(struct city *pcity)
bool city_empty_food_stock(struct city *pcity)
bool check_city_migrations(void)
static void upgrade_building_prod(struct city *pcity)
bool city_change_size(struct city *pcity, citizens size, struct player *nationality, const char *reason)
static citizens city_reduce_specialists(struct city *pcity, citizens change)
static void city_global_turn_notify(struct conn_list *dest)
static void city_populate(struct city *pcity, struct player *nationality)
static void city_refresh_after_city_size_increase(struct city *pcity, struct player *nationality)
static void define_orig_production_values(struct city *pcity)
void city_repair_size(struct city *pcity, int change)
#define cityimpr_list_iterate(cityimprlist, pcityimpr)
static bool upkeep_kill_unit(struct unit *punit, Output_type_id outp, enum unit_loss_reason wipe_reason, bool wipe_in_the_end)
static bool city_build_building(struct player *pplayer, struct city *pcity)
static struct unit static const struct impr_type * building_upgrades_to(struct city *pcity, const struct impr_type *pimprove)
void send_city_turn_notifications(struct connection *pconn)
static struct unit * sell_random_unit(struct player *pplayer, struct unit_list *punitlist)
int city_incite_cost(struct player *pplayer, struct city *pcity)
static void nullify_caravan_and_disband_plus(struct city *pcity)
static bool sell_random_building(struct player *pplayer, struct cityimpr_list *imprs)
static bool disband_city(struct city *pcity)
void update_city_activities(struct player *pplayer)
bool city_reduce_size(struct city *pcity, citizens pop_loss, struct player *destroyer, const char *reason)
#define cityimpr_list_iterate_end
bool city_refresh(struct city *pcity)
static void city_turn_notify(const struct city *pcity, struct conn_list *dest, const struct player *cache_for_player)
static bool city_increase_size(struct city *pcity)
void apply_cmresult_to_city(struct city *pcity, const struct cm_result *cmr)
void city_style_refresh(struct city *pcity)
static bool city_balance_treasury_units(struct city *pcity)
static const struct unit_type * unit_upgrades_to(struct city *pcity, const struct unit_type *id)
static bool do_city_migration(struct city *pcity_from, struct city *pcity_to)
static struct city_list * city_refresh_queue
void city_refresh_for_player(struct player *pplayer)
void city_tc_effect_refresh(struct player *pplayer)
static void check_pollution(struct city *pcity)
void check_disasters(void)
static void set_default_city_manager(struct cm_parameter *cmp, struct city *pcity)
static citizens city_reduce_workers(struct city *pcity, citizens change)
static bool worklist_item_postpone_req_vec(struct universal *target, struct city *pcity, struct player *pplayer, int saved_id)
static struct unit * city_create_unit(struct city *pcity, const struct unit_type *utype, struct citizens_reduction *red) fc__attribute((nonnull(1
static bool player_balance_treasury_units_and_buildings(struct player *pplayer)
void city_refresh_queue_processing(void)
void remove_obsolete_buildings_city(struct city *pcity, bool refresh)
static bool check_city_migrations_player(const struct player *pplayer)
static bool city_build_unit(struct player *pplayer, struct city *pcity)
static bool player_balance_treasury_units(struct player *pplayer)
void cm_clear_cache(struct city *pcity)
void cm_init_parameter(struct cm_parameter *dest)
struct cm_result * cm_result_new(struct city *pcity)
void cm_result_destroy(struct cm_result *result)
void cm_print_result(const struct cm_result *result)
void cm_query_result(struct city *pcity, const struct cm_parameter *param, struct cm_result *result, bool negative_ok)
void cm_init_emergency_parameter(struct cm_parameter *dest)
void cm_print_city(const struct city *pcity)
struct player * conn_get_player(const struct connection *pconn)
void conn_list_do_unbuffer(struct conn_list *dest)
void conn_list_do_buffer(struct conn_list *dest)
int city_culture(const struct city *pcity)
int city_history_gain(const struct city *pcity)
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit struct unit * punit
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit struct unit int cost
const char * disaster_rule_name(struct disaster_type *pdis)
bool can_disaster_happen(const struct disaster_type *pdis, const struct city *pcity)
const char * disaster_name_translation(struct disaster_type *pdis)
bool disaster_has_effect(const struct disaster_type *pdis, enum disaster_effect_id effect)
#define disaster_type_iterate(_p)
#define DISASTER_BASE_RARITY
#define disaster_type_iterate_end
int get_city_bonus(const struct city *pcity, enum effect_type effect_type)
int get_current_construction_bonus(const struct city *pcity, enum effect_type effect_type, const enum req_problem_type prob_type)
int get_city_tile_output_bonus(const struct city *pcity, const struct tile *ptile, const struct output_type *poutput, enum effect_type effect_type)
#define MAX_CITY_NATIONALITIES
enum output_type_id Output_type_id
#define PL_(String1, String2, n)
const char * city_tile_link(const struct city *pcity)
const struct ft_color ftc_server
const char * city_link(const struct city *pcity)
const char * unit_link(const struct unit *punit)
const char * unit_tile_link(const struct unit *punit)
struct city * game_city_by_number(int id)
#define GAME_MAX_MGR_DISTANCE
const char * government_name_translation(const struct government *pgovern)
const char * ruler_title_for_player(const struct player *pplayer, char *buf, size_t buf_len)
struct government * government_of_city(const struct city *pcity)
Government_type_id government_number(const struct government *pgovern)
void handle_player_change_government(struct player *pplayer, Government_type_id government)
const struct impr_type * valid_improvement(const struct impr_type *pimprove)
int impr_sell_gold(const struct impr_type *pimprove)
bool can_city_sell_building(const struct city *pcity, const struct impr_type *pimprove)
bool is_improvement(const struct impr_type *pimprove)
const char * improvement_rule_name(const struct impr_type *pimprove)
int impr_build_shield_cost(const struct city *pcity, const struct impr_type *pimprove)
bool is_wonder(const struct impr_type *pimprove)
bool is_great_wonder(const struct impr_type *pimprove)
bool improvement_obsolete(const struct player *pplayer, const struct impr_type *pimprove, const struct city *pcity)
bool improvement_has_flag(const struct impr_type *pimprove, enum impr_flag_id flag)
const char * improvement_name_translation(const struct impr_type *pimprove)
bool is_small_wonder(const struct impr_type *pimprove)
const struct impr_type * improvement_replacement(const struct impr_type *pimprove)
#define fc_assert_msg(condition, message,...)
#define fc_assert_ret(condition)
#define log_verbose(message,...)
#define fc_assert(condition)
#define fc_assert_ret_msg(condition, message,...)
#define fc_assert_ret_val(condition, val)
#define fc_assert_action(condition, action)
#define log_debug(message,...)
#define log_normal(message,...)
#define log_base(level, message,...)
#define log_error(message,...)
#define fc_assert_ret_val_msg(condition, val, message,...)
int real_map_distance(const struct tile *tile0, const struct tile *tile1)
int map_distance(const struct tile *tile0, const struct tile *tile1)
#define iterate_outward(nmap, start_tile, max_dist, itr_tile)
#define iterate_outward_end
void map_update_border(struct tile *ptile, struct player *owner, int old_radius_sq, int new_radius_sq)
void map_claim_border(struct tile *ptile, struct player *owner, int radius_sq)
void update_tile_knowledge(struct tile *ptile)
const char * nation_rule_name(const struct nation_type *pnation)
const char * nation_adjective_for_player(const struct player *pplayer)
const char * nation_adjective_translation(const struct nation_type *pnation)
struct nation_type * nation_of_city(const struct city *pcity)
const char * nation_group_name_translation(const struct nation_group *pgroup)
const char * nation_plural_translation(const struct nation_type *pnation)
const char * nation_plural_for_player(const struct player *pplayer)
void notify_research(const struct research *presearch, const struct player *exclude, enum event_type event, const struct ft_color color, const char *format,...)
void notify_player(const struct player *pplayer, const struct tile *ptile, enum event_type event, const struct ft_color color, const char *format,...)
void notify_research_embassies(const struct research *presearch, const struct player *exclude, enum event_type event, const struct ft_color color, const char *format,...)
void notify_conn(struct conn_list *dest, const struct tile *ptile, enum event_type event, const struct ft_color color, const char *format,...)
void package_event(struct packet_chat_msg *packet, const struct tile *ptile, enum event_type event, const struct ft_color color, const char *format,...)
void event_cache_add_for_player(const struct packet_chat_msg *packet, const struct player *pplayer)
void lsend_packet_chat_msg(struct conn_list *dest, const struct packet_chat_msg *packet)
struct city_list * cities
int player_number(const struct player *pplayer)
const char * player_name(const struct player *pplayer)
struct city * player_city_by_number(const struct player *pplayer, int city_id)
const char * diplrel_name_translation(int value)
struct player * player_slot_get_player(const struct player_slot *pslot)
#define players_iterate_end
#define players_iterate(_pplayer)
static bool is_barbarian(const struct player *pplayer)
void send_player_info_c(struct player *src, struct conn_list *dest)
bool is_req_active(const struct req_context *context, const struct player *other_player, const struct requirement *req, const enum req_problem_type prob_type)
const char * universal_rule_name(const struct universal *psource)
const char * universal_name_translation(const struct universal *psource, char *buf, size_t bufsz)
#define requirement_vector_iterate_end
#define requirement_vector_iterate(req_vec, preq)
const char * research_advance_name_translation(const struct research *presearch, Tech_type_id tech)
struct research * research_get(const struct player *pplayer)
enum tech_state research_invention_state(const struct research *presearch, Tech_type_id tech)
int research_pretty_name(const struct research *presearch, char *buf, size_t buf_len)
#define sanity_check_city(x)
void script_server_signal_emit(const char *signal_name,...)
const char * ssetv_human_readable(ssetv val, bool present)
static struct setting settings[]
#define CLIP(lower, current, upper)
void send_spaceship_info(struct player *src, struct conn_list *dest)
#define specialist_type_iterate_end
#define specialist_type_iterate(sp)
#define DEFAULT_SPECIALIST
#define CITY_LOG(loglevel, pcity, msg,...)
#define TIMING_LOG(timer, activity)
int last_turns_shield_surplus
enum city_needs_arrange needs_arrange
struct universal production
struct unit_order * orders
struct city::@16 rally_point
int before_change_shields
citizens feel[CITIZEN_LAST][FEELING_LAST]
citizens specialists[SP_MAX]
struct city::@17::@19 server
struct cm_parameter * cm_parameter
struct universal changed_from
struct unit_list * units_supported
struct impr_type * pimprove
struct civ_game::@30::@34 server
struct conn_list * est_connections
struct packet_game_info info
int incite_improvement_factor
citizens specialists[SP_MAX]
struct requirement_vector reqs
enum gold_upkeep_style gold_upkeep_style
int culture_migration_pml
enum spaceship_state state
struct city_list * cities
struct conn_list * connections
struct player_economic economic
struct player_spaceship spaceship
struct player_score score
struct player_slot * slot
struct player::@69::@71 server
const struct player * player
struct requirement_vector build_reqs
const struct unit_type * obsoleted_by
struct advance * require_advance
struct unit::@80::@83 server
const struct unit_type * utype
int city_style(struct city *pcity)
const char * style_name_translation(const struct nation_style *pstyle)
#define sz_strlcpy(dest, src)
const char * advance_name_translation(const struct advance *padvance)
Tech_type_id advance_number(const struct advance *padvance)
const char * terrain_name_translation(const struct terrain *pterrain)
void tile_add_extra(struct tile *ptile, const struct extra_type *pextra)
struct city * tile_city(const struct tile *ptile)
#define tile_worked(_tile)
#define tile_has_extra(ptile, pextra)
bool can_cities_trade(const struct city *pc1, const struct city *pc2)
enum trade_route_type cities_trade_route_type(const struct city *pcity1, const struct city *pcity2)
bool goods_has_flag(const struct goods_type *pgood, enum goods_flag_id flag)
struct trade_route_settings * trade_route_settings_by_type(enum trade_route_type type)
const char * goods_name_translation(struct goods_type *pgood)
bool goods_can_be_provided(struct city *pcity, struct goods_type *pgood, struct unit *punit)
#define trade_routes_iterate_safe_end
#define trade_routes_iterate_safe(c, proute)
#define trade_partners_iterate_end
#define trade_partners_iterate(c, p)
const struct unit_type * utype
const struct impr_type * building
bool unit_is_alive(int id)
#define unit_cargo_iterate_end
#define unit_cargo_iterate(_ptrans, _pcargo)
#define unit_list_iterate(unitlist, punit)
#define unit_list_iterate_safe(unitlist, _unit)
#define unit_list_iterate_end
#define unit_list_iterate_safe_end
const struct unit_type * unit_type_get(const struct unit *punit)
int unit_build_shield_cost(const struct city *pcity, const struct unit *punit)
int utype_upkeep_cost(const struct unit_type *ut, struct player *pplayer, Output_type_id otype)
const char * unit_rule_name(const struct unit *punit)
const char * utype_rule_name(const struct unit_type *punittype)
int utype_pop_value(const struct unit_type *punittype, const struct city *pcity)
int utype_build_shield_cost(const struct city *pcity, const struct player *pplayer, const struct unit_type *punittype)
const char * utype_name_translation(const struct unit_type *punittype)
static bool utype_has_flag(const struct unit_type *punittype, int flag)
bool worklist_peek_ith(const struct worklist *pwl, struct universal *prod, int idx)
bool worklist_is_empty(const struct worklist *pwl)
void worklist_remove(struct worklist *pwl, int idx)
int worklist_length(const struct worklist *pwl)