Freeciv21
Develop your civilization from humble roots to a global empire
cityturn.cpp File Reference
#include <cmath>
#include <cstring>
#include "fcintl.h"
#include "log.h"
#include "rand.h"
#include "shared.h"
#include "support.h"
#include "cm.h"
#include "achievements.h"
#include "actiontools.h"
#include "borders.h"
#include "calendar.h"
#include "citizens.h"
#include "city.h"
#include "culture.h"
#include "disaster.h"
#include "events.h"
#include "game.h"
#include "government.h"
#include "map.h"
#include "player.h"
#include "research.h"
#include "server_settings.h"
#include "specialist.h"
#include "style.h"
#include "tech.h"
#include "traderoutes.h"
#include "unit.h"
#include "unitlist.h"
#include "luascript_types.h"
#include "citizenshand.h"
#include "citytools.h"
#include "cityturn.h"
#include "maphand.h"
#include "notify.h"
#include "plrhand.h"
#include "sanitycheck.h"
#include "spacerace.h"
#include "srv_log.h"
#include "techtools.h"
#include "unittools.h"
#include "advbuilding.h"
#include "advdata.h"
#include "script_server.h"
#include "speclist.h"
+ Include dependency graph for cityturn.cpp:

Go to the source code of this file.

Classes

struct  cityimpr
 

Macros

#define SPECLIST_TAG   cityimpr
 
#define SPECLIST_TYPE   struct cityimpr
 
#define cityimpr_list_iterate(cityimprlist, pcityimpr)    TYPED_LIST_ITERATE(struct cityimpr, cityimprlist, pcityimpr)
 
#define cityimpr_list_iterate_end   LIST_ITERATE_END
 

Functions

static void check_pollution (struct city *pcity)
 Add some Pollution if we have waste. More...
 
static void city_populate (struct city *pcity, struct player *nationality)
 Check whether the population can be increased or if the city is unable to support a 'settler'... More...
 
static bool worklist_change_build_target (struct player *pplayer, struct city *pcity)
 Examine the worklist and change the build target. More...
 
static bool city_distribute_surplus_shields (struct player *pplayer, struct city *pcity)
 Disband units if we don't have enough shields to support them. More...
 
static void wonder_set_build_turn (struct player *pplayer, const struct impr_type *pimprove)
 Record the build turn of a wonder. More...
 
static bool city_build_building (struct player *pplayer, struct city *pcity)
 Returns FALSE when the city is removed, TRUE otherwise. More...
 
static bool city_build_unit (struct player *pplayer, struct city *pcity)
 Build city units. More...
 
static bool city_build_stuff (struct player *pplayer, struct city *pcity)
 Returns FALSE when the city is removed, TRUE otherwise. More...
 
static const struct impr_typebuilding_upgrades_to (struct city *pcity, const struct impr_type *pimprove)
 Follow the list of replacement buildings until we hit something that we can build. More...
 
static void upgrade_building_prod (struct city *pcity)
 Try to upgrade production in pcity. More...
 
static const struct unit_typeunit_upgrades_to (struct city *pcity, const struct unit_type *punittype)
 Follow the list of obsoleted_by units until we hit something that we can build. More...
 
static void upgrade_unit_prod (struct city *pcity)
 Try to upgrade production in pcity. More...
 
static bool sell_random_building (struct player *pplayer, struct cityimpr_list *imprs)
 Randomly sell a building from the given list. More...
 
static struct unitsell_random_unit (struct player *pplayer, struct unit_list *punitlist)
 Randomly "sell" a unit from the given list. More...
 
static citizens city_reduce_specialists (struct city *pcity, citizens change)
 Reduce the city specialists by some (positive) value. More...
 
static citizens city_reduce_workers (struct city *pcity, citizens change)
 Reduce the city workers by some (positive) value. More...
 
static bool city_balance_treasury_buildings (struct city *pcity)
 Balance the gold of one city by randomly selling some buildings. More...
 
static bool city_balance_treasury_units (struct city *pcity)
 Balance the gold of one city by randomly selling some units which need gold upkeep. More...
 
static bool player_balance_treasury_units_and_buildings (struct player *pplayer)
 Balance the gold of a nation by selling some random units and buildings. More...
 
static bool player_balance_treasury_units (struct player *pplayer)
 Balance the gold of a nation by selling some units which need gold upkeep. More...
 
static bool disband_city (struct city *pcity)
 Disband a city into the built unit, supported by the closest city. More...
 
static void define_orig_production_values (struct city *pcity)
 Called every turn, at beginning of turn, for every city. More...
 
static void update_city_activity (struct city *pcity)
 Called every turn, at end of turn, for every city. More...
 
static void nullify_caravan_and_disband_plus (struct city *pcity)
 Let the advisor set up city building target. More...
 
static bool city_illness_check (const struct city *pcity)
 Check if city suffers from a plague. More...
 
static float city_migration_score (struct city *pcity)
 Helper function to calculate a "score" of a city. More...
 
static bool do_city_migration (struct city *pcity_from, struct city *pcity_to)
 Do the migrations between the cities that overlap, if the growth of the target city is not blocked due to a missing improvement or missing food. More...
 
static bool check_city_migrations_player (const struct player *pplayer)
 Check for migration for each city of one player. More...
 
static bool city_handle_disorder (struct city *pcity)
 
static bool city_handle_plague_risk (struct city *pcity)
 
bool city_refresh (struct city *pcity)
 Updates unit upkeeps and city internal cached data. More...
 
void city_refresh_for_player (struct player *pplayer)
 Called on government change or wonder completion or stuff like that – Syela. More...
 
void city_refresh_queue_add (struct city *pcity)
 Queue pending city_refresh() for later. More...
 
void city_refresh_queue_processing ()
 Refresh the listed cities. More...
 
void remove_obsolete_buildings_city (struct city *pcity, bool refresh)
 Automatically sells obsolete buildings from city. More...
 
void remove_obsolete_buildings (struct player *pplayer)
 Sell obsolete buildings from all cities of the player. More...
 
void apply_cmresult_to_city (struct city *pcity, const std::unique_ptr< cm_result > &cmr)
 Rearrange workers according to a cm_result struct. More...
 
static void set_default_city_manager (struct cm_parameter *cmp, struct city *pcity)
 Set default city manager parameter for the city. More...
 
void auto_arrange_workers (struct city *pcity)
 Call sync_cities() to send the affected cities to the clients. More...
 
static void city_global_turn_notify (struct conn_list *dest)
 Notices about cities that should be sent to all players. More...
 
static void city_turn_notify (const struct city *pcity, struct conn_list *dest, const struct player *cache_for_player)
 Send turn notifications for specified city to specified connections. More...
 
void send_city_turn_notifications (struct connection *pconn)
 Send global and player specific city turn notifications. More...
 
void city_save_surpluses (struct city *pcity)
 Save city surplus values for use during city processing. More...
 
void update_city_activities (struct player *pplayer)
 Update all cities of one nation (costs for buildings, unit upkeep, ...). More...
 
static bool upkeep_kill_unit (struct unit *punit, Output_type_id outp, enum unit_loss_reason wipe_reason, bool wipe_in_the_end)
 Try to get rid of a unit because of missing upkeep. More...
 
bool city_reduce_size (struct city *pcity, citizens pop_loss, struct player *destroyer, const char *reason)
 Reduce the city size. More...
 
void city_repair_size (struct city *pcity, int change)
 Repair the city population without affecting city size. More...
 
static int granary_savings (const struct city *pcity)
 Return the percentage of food that is lost in this city. More...
 
static int surplus_savings (const struct city *pcity)
 Return the percentage of the food surplus that is saved in this city. More...
 
static void city_reset_foodbox (struct city *pcity, int new_size)
 Reset the foodbox, usually when a city grows or shrinks. More...
 
static bool city_increase_size (struct city *pcity, struct player *nationality)
 Increase city size by one. More...
 
bool city_change_size (struct city *pcity, citizens size, struct player *nationality, const char *reason)
 Change the city size. More...
 
static bool worklist_item_postpone_req_vec (struct universal *target, struct city *pcity, struct player *pplayer, int saved_id)
 Examine an unbuildable build target from a city's worklist to see if it can be postponed. More...
 
void choose_build_target (struct player *pplayer, struct city *pcity)
 Assuming we just finished building something, find something new to build. More...
 
static struct unitcity_create_unit (struct city *pcity, const struct unit_type *utype)
 Helper function to create one unit in a city. More...
 
static void uk_rem_gold_callback (struct unit *punit)
 Call back for when a unit in uk_rem_gold dies. More...
 
static void uk_rem_gold_append (struct unit *punit)
 Add a unit to uk_rem_gold and make the unit remove it self from it if it dies before it is processed. More...
 
static void unit_list_referred_destroy (struct unit_list *punitlist)
 Destroy a unit list and make the units it contains aware that it no longer refers to them. More...
 
static bool place_pollution (struct city *pcity, enum extra_cause cause)
 Add some Pollution if we have waste. More...
 
int city_incite_cost (struct player *pplayer, struct city *pcity)
 Returns the cost to incite a city. More...
 
void nullify_prechange_production (struct city *pcity)
 Initialize all variables containing information about production before it was changed. More...
 
bool check_city_migrations ()
 Check for citizens who want to migrate between the cities that overlap. More...
 
bool city_empty_food_stock (struct city *pcity)
 Returns TRUE iff the city's food stock was emptied. More...
 
static void apply_disaster (struct city *pcity, struct disaster_type *pdis)
 Disaster has hit a city. More...
 
void check_disasters ()
 Check for any disasters hitting any city, and apply those disasters. More...
 
void city_style_refresh (struct city *pcity)
 Recheck and store style of the city. More...
 

Variables

static struct city_list * city_refresh_queue = nullptr
 
static struct unit_list * uk_rem_gold = nullptr
 

Macro Definition Documentation

◆ cityimpr_list_iterate

#define cityimpr_list_iterate (   cityimprlist,
  pcityimpr 
)     TYPED_LIST_ITERATE(struct cityimpr, cityimprlist, pcityimpr)

Definition at line 112 of file cityturn.cpp.

◆ cityimpr_list_iterate_end

#define cityimpr_list_iterate_end   LIST_ITERATE_END

Definition at line 114 of file cityturn.cpp.

◆ SPECLIST_TAG

#define SPECLIST_TAG   cityimpr

Definition at line 108 of file cityturn.cpp.

◆ SPECLIST_TYPE

#define SPECLIST_TYPE   struct cityimpr

Definition at line 109 of file cityturn.cpp.

Function Documentation

◆ apply_cmresult_to_city()

void apply_cmresult_to_city ( struct city pcity,
const std::unique_ptr< cm_result > &  cmr 
)

Rearrange workers according to a cm_result struct.

The caller must make sure that the result is valid.

Definition at line 276 of file cityturn.cpp.

Referenced by auto_arrange_workers(), and dai_manage_taxes().

◆ apply_disaster()

static void apply_disaster ( struct city pcity,
struct disaster_type pdis 
)
static

Disaster has hit a city.

Apply its effects.

Definition at line 4011 of file cityturn.cpp.

Referenced by check_disasters().

◆ auto_arrange_workers()

◆ building_upgrades_to()

static const struct impr_type * building_upgrades_to ( struct city pcity,
const struct impr_type pimprove 
)
static

Follow the list of replacement buildings until we hit something that we can build.

Returns nullptr if we can't upgrade at all (including if the original building is unbuildable).

Definition at line 2137 of file cityturn.cpp.

Referenced by upgrade_building_prod(), and worklist_change_build_target().

◆ check_city_migrations()

bool check_city_migrations ( )

Check for citizens who want to migrate between the cities that overlap.

Migrants go to the city with higher score, if the growth of the target city is not blocked due to a missing improvement.

The following setting are used:

'game.server.mgr_turninterval' controls the number of turns between migration checks for one city (counted from the founding). If this setting is zero, or it is the first turn (T1), migration does no occur.

'game.server.mgr_distance' is the maximal distance for migration.

'game.server.mgr_nationchance' gives the chance for migration within one nation.

'game.server.mgr_worldchance' gives the chance for migration between all nations.

Returns TRUE iff there has been INTERNATIONAL migration.

Definition at line 3954 of file cityturn.cpp.

Referenced by end_turn().

◆ check_city_migrations_player()

static bool check_city_migrations_player ( const struct player pplayer)
static

Check for migration for each city of one player.

For each city of the player do: check each tile within GAME_MAX_MGR_DISTANCE for a city if a city is found check the distance compare the migration score

Definition at line 4160 of file cityturn.cpp.

Referenced by check_city_migrations().

◆ check_disasters()

void check_disasters ( )

Check for any disasters hitting any city, and apply those disasters.

Definition at line 4117 of file cityturn.cpp.

Referenced by end_turn().

◆ check_pollution()

static void check_pollution ( struct city pcity)
static

Add some Pollution if we have waste.

Definition at line 3118 of file cityturn.cpp.

Referenced by update_city_activity().

◆ choose_build_target()

void choose_build_target ( struct player pplayer,
struct city pcity 
)

Assuming we just finished building something, find something new to build.

The policy is: use the worklist if we can; if not, try not changing; if we must change, get desparate and use the AI advisor.

Definition at line 2089 of file cityturn.cpp.

Referenced by city_build_building(), city_build_unit(), and research_tech_lost().

◆ city_balance_treasury_buildings()

static bool city_balance_treasury_buildings ( struct city pcity)
static

Balance the gold of one city by randomly selling some buildings.

Definition at line 2990 of file cityturn.cpp.

Referenced by update_city_activity().

◆ city_balance_treasury_units()

static bool city_balance_treasury_units ( struct city pcity)
static

Balance the gold of one city by randomly selling some units which need gold upkeep.

NB: This function adds the gold upkeep of disbanded units back to the player's gold. Hence it assumes that this gold was previously taken from the player (i.e. in update_city_activity()).

Definition at line 3042 of file cityturn.cpp.

Referenced by update_city_activity().

◆ city_build_building()

static bool city_build_building ( struct player pplayer,
struct city pcity 
)
static

Returns FALSE when the city is removed, TRUE otherwise.

Definition at line 2316 of file cityturn.cpp.

Referenced by city_build_stuff().

◆ city_build_stuff()

static bool city_build_stuff ( struct player pplayer,
struct city pcity 
)
static

Returns FALSE when the city is removed, TRUE otherwise.

Definition at line 2659 of file cityturn.cpp.

Referenced by update_city_activity().

◆ city_build_unit()

static bool city_build_unit ( struct player pplayer,
struct city pcity 
)
static

Build city units.

Several units can be built in one turn if the effect City_Build_Slots is used. Returns FALSE when the city is removed, TRUE otherwise.

Definition at line 2515 of file cityturn.cpp.

Referenced by city_build_stuff().

◆ city_change_size()

bool city_change_size ( struct city pcity,
citizens  size,
struct player nationality,
const char *  reason 
)

Change the city size.

Return TRUE iff the city is still alive afterwards.

Definition at line 1067 of file cityturn.cpp.

Referenced by api_edit_resize_city(), city_build(), handle_edit_city(), and handle_edit_city_create().

◆ city_create_unit()

static struct unit* city_create_unit ( struct city pcity,
const struct unit_type utype 
)
static

Helper function to create one unit in a city.

Doesn't make any announcements. This might destroy the city due to scripts (but not otherwise; in particular, pop_cost is the caller's problem). Returns the new unit (if it survived scripts).

Definition at line 2470 of file cityturn.cpp.

Referenced by city_build_unit(), and disband_city().

◆ city_distribute_surplus_shields()

static bool city_distribute_surplus_shields ( struct player pplayer,
struct city pcity 
)
static

Disband units if we don't have enough shields to support them.

Returns FALSE if the city is disbanded as a result.

Definition at line 2219 of file cityturn.cpp.

Referenced by city_build_stuff().

◆ city_empty_food_stock()

bool city_empty_food_stock ( struct city pcity)

Returns TRUE iff the city's food stock was emptied.

Should empty the food stock unless it already is empty.

Definition at line 3988 of file cityturn.cpp.

Referenced by apply_disaster(), and spy_poison().

◆ city_global_turn_notify()

static void city_global_turn_notify ( struct conn_list *  dest)
static

Notices about cities that should be sent to all players.

Definition at line 461 of file cityturn.cpp.

Referenced by send_city_turn_notifications().

◆ city_handle_disorder()

static bool city_handle_disorder ( struct city pcity)
static

Definition at line 3282 of file cityturn.cpp.

Referenced by update_city_activity().

◆ city_handle_plague_risk()

static bool city_handle_plague_risk ( struct city pcity)
static

Definition at line 3263 of file cityturn.cpp.

Referenced by update_city_activity().

◆ city_illness_check()

static bool city_illness_check ( const struct city pcity)
static

Check if city suffers from a plague.

Return TRUE if it does, FALSE if not.

Definition at line 3484 of file cityturn.cpp.

Referenced by city_handle_plague_risk().

◆ city_incite_cost()

int city_incite_cost ( struct player pplayer,
struct city pcity 
)

Returns the cost to incite a city.

This depends on the size of the city, the number of happy, unhappy and angry citizens, whether it is celebrating, how close it is to a capital, how many units it has and upkeeps, presence of courthouse, its buildings and wonders, and who originally built it.

Definition at line 3135 of file cityturn.cpp.

Referenced by dai_action_value_unit_vs_city(), dai_choose_diplomat_offensive(), diplomat_incite(), find_city_to_diplomat(), and handle_unit_action_query().

◆ city_increase_size()

static bool city_increase_size ( struct city pcity,
struct player nationality 
)
static

Increase city size by one.

We do not refresh borders or send info about the city to the clients as part of this function. There might be several calls to this function at once, and those actions are needed only once.

Definition at line 965 of file cityturn.cpp.

Referenced by city_change_size(), city_populate(), and do_city_migration().

◆ city_migration_score()

static float city_migration_score ( struct city pcity)
static

Helper function to calculate a "score" of a city.

The score is used to get an estimate of the "migration desirability" of the city. The higher the score the more likely citizens will migrate to it.

The score depends on the city size, the feeling of its citizens, the cost of all buildings in the city, and the surplus of trade, luxury and science.

formula: score = ([city size] + feeling) * factors

feeling of the citizens feeling = 1.00 * happy citizens

  • 0.00 * content citizens
  • 0.25 * unhappy citizens
  • 0.50 * angry citizens

factors the build costs of all buildings f = (1 + (1 - exp(-[build shield cost]/1000))/5) the trade of the city f = (1 + (1 - exp(-[city surplus trade]/100))/5) the luxury within the city f = (1 + (1 - exp(-[city surplus luxury]/100))/5) the science within the city f = (1 + (1 - exp(-[city surplus science]/100))/5)

all factors f have values between 1 and 1.2; the overall factor will be between 1.0 (smaller cities) and 2.0 (bigger cities)

[build shield cost], [city surplus trade], [city surplus luxury] and [city surplus science] must be >= 0!

The food furplus is considered by an additional factor

the food surplus of the city
f = (1 + [city surplus food; interval -10..20]/10)

The health factor is defined as:

the health of the city
f = (100 - [city illness; tenth of %]/25)

if the city has at least one wonder a factor of 1.25 is added for the capital an additional factor of 1.25 is used the score is also modified by the effect EFT_MIGRATION_PCT

Definition at line 3602 of file cityturn.cpp.

Referenced by check_city_migrations_player().

◆ city_populate()

static void city_populate ( struct city pcity,
struct player nationality 
)
static

Check whether the population can be increased or if the city is unable to support a 'settler'...

Definition at line 1110 of file cityturn.cpp.

Referenced by update_city_activity().

◆ city_reduce_size()

bool city_reduce_size ( struct city pcity,
citizens  pop_loss,
struct player destroyer,
const char *  reason 
)

◆ city_reduce_specialists()

static citizens city_reduce_specialists ( struct city pcity,
citizens  change 
)
static

Reduce the city specialists by some (positive) value.

Return the amount of reduction.

Definition at line 769 of file cityturn.cpp.

Referenced by city_reduce_size(), and city_repair_size().

◆ city_reduce_workers()

static citizens city_reduce_workers ( struct city pcity,
citizens  change 
)
static

Reduce the city workers by some (positive) value.

Return the amount of reduction.

Definition at line 791 of file cityturn.cpp.

Referenced by city_reduce_size(), and city_repair_size().

◆ city_refresh()

◆ city_refresh_for_player()

void city_refresh_for_player ( struct player pplayer)

Called on government change or wonder completion or stuff like that – Syela.

Definition at line 171 of file cityturn.cpp.

Referenced by create_city(), government_change(), handle_city_refresh(), handle_player_change_government(), handle_player_rates(), remove_city(), and transfer_city().

◆ city_refresh_queue_add()

void city_refresh_queue_add ( struct city pcity)

◆ city_refresh_queue_processing()

void city_refresh_queue_processing ( )

Refresh the listed cities.

Called after significant changes to borders, and arranging workers.

Definition at line 204 of file cityturn.cpp.

Referenced by create_city(), handle_edit_city(), map_calculate_borders(), map_claim_base(), player_limit_to_max_rates(), remove_city(), transfer_city(), and update_city_activities().

◆ city_repair_size()

void city_repair_size ( struct city pcity,
int  change 
)

Repair the city population without affecting city size.

Used by savegame.c and sanitycheck.c

Definition at line 895 of file cityturn.cpp.

Referenced by sg_load_player_city().

◆ city_reset_foodbox()

static void city_reset_foodbox ( struct city pcity,
int  new_size 
)
static

Reset the foodbox, usually when a city grows or shrinks.

By default it is reset to zero, but this can be increased by Growth_Food effects. Usually this should be called before the city changes size.

Definition at line 946 of file cityturn.cpp.

Referenced by city_increase_size(), and city_populate().

◆ city_save_surpluses()

void city_save_surpluses ( struct city pcity)

Save city surplus values for use during city processing.

Definition at line 580 of file cityturn.cpp.

Referenced by update_city_activities().

◆ city_style_refresh()

void city_style_refresh ( struct city pcity)

Recheck and store style of the city.

Definition at line 4328 of file cityturn.cpp.

Referenced by city_refresh().

◆ city_turn_notify()

static void city_turn_notify ( const struct city pcity,
struct conn_list *  dest,
const struct player cache_for_player 
)
static

Send turn notifications for specified city to specified connections.

If 'pplayer' is not nullptr, the message will be cached for this player.

Definition at line 483 of file cityturn.cpp.

Referenced by send_city_turn_notifications().

◆ define_orig_production_values()

static void define_orig_production_values ( struct city pcity)
static

Called every turn, at beginning of turn, for every city.

Definition at line 3223 of file cityturn.cpp.

Referenced by city_build_stuff().

◆ disband_city()

static bool disband_city ( struct city pcity)
static

Disband a city into the built unit, supported by the closest city.

Returns TRUE if the city was disbanded.

Definition at line 3493 of file cityturn.cpp.

Referenced by city_build_unit().

◆ do_city_migration()

static bool do_city_migration ( struct city pcity_from,
struct city pcity_to 
)
static

Do the migrations between the cities that overlap, if the growth of the target city is not blocked due to a missing improvement or missing food.

Returns TRUE if migration occurred.

Definition at line 3701 of file cityturn.cpp.

Referenced by check_city_migrations_player().

◆ granary_savings()

static int granary_savings ( const struct city pcity)
static

Return the percentage of food that is lost in this city.

Normally this value is 0% but this can be increased by EFT_GROWTH_FOOD effects.

Definition at line 918 of file cityturn.cpp.

Referenced by city_increase_size(), and city_reset_foodbox().

◆ nullify_caravan_and_disband_plus()

static void nullify_caravan_and_disband_plus ( struct city pcity)
static

Let the advisor set up city building target.

Definition at line 3244 of file cityturn.cpp.

Referenced by city_build_stuff(), and nullify_prechange_production().

◆ nullify_prechange_production()

void nullify_prechange_production ( struct city pcity)

Initialize all variables containing information about production before it was changed.

Definition at line 3254 of file cityturn.cpp.

Referenced by apply_disaster(), diplomat_incite(), diplomat_sabotage(), do_unit_strike_city_production(), and raze_city().

◆ place_pollution()

static bool place_pollution ( struct city pcity,
enum extra_cause  cause 
)
static

Add some Pollution if we have waste.

Definition at line 3079 of file cityturn.cpp.

Referenced by apply_disaster(), and check_pollution().

◆ player_balance_treasury_units()

static bool player_balance_treasury_units ( struct player pplayer)
static

Balance the gold of a nation by selling some units which need gold upkeep.

Definition at line 2950 of file cityturn.cpp.

Referenced by update_city_activities().

◆ player_balance_treasury_units_and_buildings()

static bool player_balance_treasury_units_and_buildings ( struct player pplayer)
static

Balance the gold of a nation by selling some random units and buildings.

Definition at line 2878 of file cityturn.cpp.

Referenced by update_city_activities().

◆ remove_obsolete_buildings()

void remove_obsolete_buildings ( struct player pplayer)

Sell obsolete buildings from all cities of the player.

Definition at line 263 of file cityturn.cpp.

Referenced by found_new_tech().

◆ remove_obsolete_buildings_city()

void remove_obsolete_buildings_city ( struct city pcity,
bool  refresh 
)

Automatically sells obsolete buildings from city.

Definition at line 228 of file cityturn.cpp.

Referenced by remove_obsolete_buildings(), and transfer_city().

◆ sell_random_building()

static bool sell_random_building ( struct player pplayer,
struct cityimpr_list *  imprs 
)
static

Randomly sell a building from the given list.

Returns TRUE if a building was sold.

NB: It is assumed that gold upkeep for the buildings has already been paid this turn, hence when a building is sold its upkeep is given back to the player. NB: The contents of 'imprs' are usually mangled by this function. NB: It is assumed that all buildings in 'imprs' can be sold.

Definition at line 2691 of file cityturn.cpp.

Referenced by city_balance_treasury_buildings(), and player_balance_treasury_units_and_buildings().

◆ sell_random_unit()

static struct unit * sell_random_unit ( struct player pplayer,
struct unit_list *  punitlist 
)
static

Randomly "sell" a unit from the given list.

Returns pointer to sold unit. This pointer is not valid any more, but can be removed from the lists.

NB: It is assumed that gold upkeep for the units has already been paid this turn, hence when a unit is "sold" its upkeep is given back to the player. NB: The contents of 'units' are usually mangled by this function. NB: It is assumed that all units in 'units' have positive gold upkeep.

Definition at line 2796 of file cityturn.cpp.

Referenced by city_balance_treasury_units(), player_balance_treasury_units(), and player_balance_treasury_units_and_buildings().

◆ send_city_turn_notifications()

void send_city_turn_notifications ( struct connection pconn)

Send global and player specific city turn notifications.

If 'pconn' is nullptr, it will send to all connections and cache the events.

Definition at line 548 of file cityturn.cpp.

Referenced by end_turn().

◆ set_default_city_manager()

static void set_default_city_manager ( struct cm_parameter cmp,
struct city pcity 
)
static

Set default city manager parameter for the city.

Definition at line 311 of file cityturn.cpp.

Referenced by auto_arrange_workers().

◆ surplus_savings()

static int surplus_savings ( const struct city pcity)
static

Return the percentage of the food surplus that is saved in this city.

Normally this value is 0% but this can be increased by EFT_GROWTH_SURPLUS_PCT effects.

Definition at line 934 of file cityturn.cpp.

Referenced by city_reset_foodbox().

◆ uk_rem_gold_append()

static void uk_rem_gold_append ( struct unit punit)
static

Add a unit to uk_rem_gold and make the unit remove it self from it if it dies before it is processed.

Definition at line 2760 of file cityturn.cpp.

Referenced by city_balance_treasury_units(), player_balance_treasury_units(), and player_balance_treasury_units_and_buildings().

◆ uk_rem_gold_callback()

static void uk_rem_gold_callback ( struct unit punit)
static

Call back for when a unit in uk_rem_gold dies.

A unit can die as a side effect of an action another unit in the list is forced to perform. This isn't limited to "Explode Nuclear". A Lua call back for another action could cause more collateral damage than "Explode Nuclear".

Definition at line 2739 of file cityturn.cpp.

Referenced by uk_rem_gold_append().

◆ unit_list_referred_destroy()

static void unit_list_referred_destroy ( struct unit_list *  punitlist)
static

Destroy a unit list and make the units it contains aware that it no longer refers to them.

Definition at line 2773 of file cityturn.cpp.

Referenced by city_balance_treasury_units(), player_balance_treasury_units(), and player_balance_treasury_units_and_buildings().

◆ unit_upgrades_to()

static const struct unit_type * unit_upgrades_to ( struct city pcity,
const struct unit_type punittype 
)
static

Follow the list of obsoleted_by units until we hit something that we can build.

Return nullptr when we can't upgrade at all. NB: returning something doesn't guarantee that pcity really can build it; just that pcity can't build whatever obsoletes it.

FIXME: this function is a duplicate of can_upgrade_unittype.

Definition at line 2181 of file cityturn.cpp.

Referenced by upgrade_unit_prod(), and worklist_change_build_target().

◆ update_city_activities()

void update_city_activities ( struct player pplayer)

Update all cities of one nation (costs for buildings, unit upkeep, ...).

Definition at line 589 of file cityturn.cpp.

Referenced by end_phase().

◆ update_city_activity()

static void update_city_activity ( struct city pcity)
static

Called every turn, at end of turn, for every city.

Definition at line 3334 of file cityturn.cpp.

Referenced by update_city_activities().

◆ upgrade_building_prod()

static void upgrade_building_prod ( struct city pcity)
static

Try to upgrade production in pcity.

Definition at line 2157 of file cityturn.cpp.

Referenced by city_build_building().

◆ upgrade_unit_prod()

static void upgrade_unit_prod ( struct city pcity)
static

Try to upgrade production in pcity.

Definition at line 2201 of file cityturn.cpp.

Referenced by city_build_unit().

◆ upkeep_kill_unit()

static bool upkeep_kill_unit ( struct unit punit,
Output_type_id  outp,
enum unit_loss_reason  wipe_reason,
bool  wipe_in_the_end 
)
static

Try to get rid of a unit because of missing upkeep.

Won't try to get rid of a unit without any action auto performers for AAPC_UNIT_UPKEEP. Those are seen as protected from being destroyed because of missing upkeep.

Can optionally wipe the unit in the end if it survived the actions in the selected action auto performer.

Returns TRUE if the unit went away.

Definition at line 737 of file cityturn.cpp.

Referenced by city_distribute_surplus_shields(), city_populate(), and sell_random_unit().

◆ wonder_set_build_turn()

static void wonder_set_build_turn ( struct player pplayer,
const struct impr_type pimprove 
)
static

Record the build turn of a wonder.

Used in city processing to figure out which wonders are built on the same turn and not yet effective.

Definition at line 2301 of file cityturn.cpp.

Referenced by city_build_building().

◆ worklist_change_build_target()

static bool worklist_change_build_target ( struct player pplayer,
struct city pcity 
)
static

Examine the worklist and change the build target.

Return 0 if no targets are available to change to. Otherwise return non-zero. Has the side-effect of removing from the worklist any no-longer-available targets as well as the target actually selected, if any.

Definition at line 1898 of file cityturn.cpp.

Referenced by choose_build_target().

◆ worklist_item_postpone_req_vec()

static bool worklist_item_postpone_req_vec ( struct universal target,
struct city pcity,
struct player pplayer,
int  saved_id 
)
static

Examine an unbuildable build target from a city's worklist to see if it can be postponed.

Returns FALSE if it never can't be build and should be cancelled or if the city is gone. Handles the postponing and returns TRUE if the item can be posponed.

Definition at line 1186 of file cityturn.cpp.

Referenced by worklist_change_build_target().

Variable Documentation

◆ city_refresh_queue

struct city_list* city_refresh_queue = nullptr
static

Definition at line 74 of file cityturn.cpp.

Referenced by city_refresh_queue_add(), and city_refresh_queue_processing().

◆ uk_rem_gold