69#define LOG_DIPL LOG_DEBUG
70#define LOG_DIPL2 LOG_DEBUG
74#define BIG_NUMBER 100000
80#define TURNS_BEFORE_TARGET 15
84 const struct player *violator,
85 const struct player *victim,
86 enum casus_belli_range scope,
89 const struct player *violator,
90 const struct player *victim);
92 const struct player *violator,
93 const struct player *victim);
95 const struct player *violator,
96 const struct player *victim);
127 if (missing_love > 0) {
143 case CLAUSE_ALLIANCE:
147 case CLAUSE_CEASEFIRE:
161 int bulbs, tech_want, worth;
166 if (TECH_KNOWN == state
174 if (TECH_PREREQS_KNOWN == state) {
191 if (eplayer == pplayer || eplayer == aplayer) {
197 if (ds != DS_NO_CONTACT && ds != DS_ALLIANCE) {
226 int tech_id,
bool *is_dangerous)
232 *is_dangerous =
FALSE;
253 tech_id) == TECH_KNOWN) {
260 *is_dangerous =
TRUE;
276static const struct player *
278 const struct player *them)
303 enum diplstate_type ds_after)
308 bool give = (pplayer == pclause->
from);
310 const struct player *penemy;
323 switch (pclause->
type) {
332 pclause->
value) != TECH_KNOWN) {
349 limit =
MAX(1, upk_per_tech);
368 case CLAUSE_ALLIANCE:
370 case CLAUSE_CEASEFIRE:
373 dai_diplo_notify(aplayer,
_(
"*%s (AI)* In away mode AI can't sign such a treaty."),
382 && pclause->
type != CLAUSE_CEASEFIRE) {
392 && pclause->
type != CLAUSE_CEASEFIRE) {
394 "distance from %s for some time, %s."),
402 if (pclause->
type == CLAUSE_PEACE) {
413 "ceasefire for a bit longer first, %s."),
423 }
else if (pclause->
type == CLAUSE_ALLIANCE) {
436 "alliance yet, %s."),
474 worth -= pclause->
value;
481 if (!give || ds_after == DS_ALLIANCE) {
488 worth -= 15 * city_list_size(aplayer->
cities);
501 if (!give || ds_after == DS_ALLIANCE) {
507 worth -= 40 *
MAX(city_list_size(pplayer->
cities), 1);
557 if (ds_after == DS_ALLIANCE) {
560 _(
"*%s (AI)* Sorry, sharing vision with you "
578 if (ds_after == DS_ALLIANCE) {
580 }
else if (ds_after == DS_PEACE) {
615 int total_balance = 0;
616 bool only_gifts =
TRUE;
617 enum diplstate_type ds_after =
619 int given_cities = 0;
625 if (pclause->type == CLAUSE_CITY && pclause->from == pplayer) {
637 if (pclause->type != CLAUSE_GOLD && pclause->type != CLAUSE_MAP
638 && pclause->type != CLAUSE_SEAMAP && pclause->type != CLAUSE_VISION
639 && (pclause->type != CLAUSE_ADVANCE
655 if (ds_after == DS_WAR && !only_gifts) {
661 && city_list_size(pplayer->
cities) - given_cities <= 2) {
668 if (total_balance >= 0) {
675 if (pplayer != ptreaty->
plr0) {
676 dai_diplo_notify(aplayer,
_(
"*%s (AI)* This deal was not very good for us, %s!"),
696 switch (pclause->
type) {
697 case CLAUSE_ALLIANCE:
714 case CLAUSE_CEASEFIRE:
737 int total_balance = 0;
739 enum diplstate_type ds_after =
757 total_balance += balance;
758 gift = (gift && (balance >= 0));
771 if (total_balance > 0 && gift) {
772 int i = total_balance / ((city_list_size(pplayer->
cities) * 10) + 1);
796 int want = 0, fear = 0, distance = 0, settlers = 0,
cities = 0;
802 want += pcity->surplus[
O_SHIELD] * 8;
803 want += pcity->surplus[
O_TRADE] * 6;
844 if (VUT_UTYPE == pcity->production.kind
855 want -= abs(want) /
MAX(
cities - settlers, 1);
873 if (
adv->dipl.spacerace_leader == target) {
886 if (eplayer == pplayer) {
892 if (ds == DS_ARMISTICE) {
893 want -= abs(want) / 10;
894 }
else if (ds == DS_CEASEFIRE) {
895 want -= abs(want) / 7;
896 }
else if (ds == DS_PEACE) {
897 want -= abs(want) / 5;
898 }
else if (ds == DS_ALLIANCE) {
899 want -= abs(want) / 3;
922 return (want - fear);
932 enum clause_type what,
955 bool wants_ceasefire =
FALSE;
965 wants_ceasefire =
TRUE;
969 clause.
from = pplayer;
971 clause.
type = CLAUSE_CEASEFIRE;
974 FALSE, DS_CEASEFIRE) > 0) {
975 wants_ceasefire =
TRUE;
980 if (wants_ceasefire) {
982 _(
"*%s (AI)* Greetings %s! May we suggest a ceasefire "
983 "while we get to know each other better?"),
990 _(
"*%s (AI)* I found you %s! Now make it worth my "
991 "letting you live, or be crushed."),
1011 int best_desire = 0;
1012 struct player *best_target = NULL;
1020 memset(war_desire, 0,
sizeof(war_desire));
1025 if (aplayer == pplayer
1033 best_target = aplayer;
1044 if (pplayer == aplayer) {
1054 && aplayer != best_target
1062 if (
WAR(eplayer, aplayer) &&
WAR(pplayer, eplayer)) {
1068 }
else if (
WAR(pplayer, aplayer)) {
1103 "our borders", amount);
1128 if (aplayer == best_target && best_desire > 0) {
1133 "love by %d ", reduction);
1190 if (worth[tech] <= 0) {
1196 if (worth[tech2] >= 0) {
1200 diff = worth[tech] + worth[tech2];
1202 || (diff < 0 && player2->economic.gold >= -diff)
1208 }
else if (diff < 0) {
1224 if (old_treaty != NULL) {
1230 pclause->type, pclause->value);
1233 clause_list_destroy(old_treaty->
clauses);
1234 old_treaty->
clauses = clause_list_new();
1251 if (presearch != aresearch
1273 gives_vision =
TRUE;
1300 struct player *target,
enum war_reason reason)
1313 case DAI_WR_BEHAVIOUR:
1315 _(
"*%s (AI)* I have tolerated your vicious antics "
1316 "long enough! To war!"),
1327 _(
"*%s (AI)* Finally I get around to you! Did "
1328 "you really think you could get away with your crimes?"),
1334 _(
"*%s (AI)* Your covert hostilities brought "
1335 "this war upon you!"),
1339 case DAI_WR_ALLIANCE:
1342 _(
"*%s (AI)* Your aggression against %s was "
1343 "your last mistake!"),
1350 "for their war against an ally, but can no longer find "
1351 "this ally! War declaration aborted.");
1381 "Not revolting, as there would be Senate regardless.");
1391 "Wanted to cancel treaty but was unable to.");
1423 int countdown,
enum war_reason reason)
1445 PL_(
"*%s (AI)* We will be launching an all-out war "
1446 "against %s in %d turn to stop the spaceship "
1448 "*%s (AI)* We will be launching an all-out war "
1449 "against %s in %d turns to stop the spaceship "
1456 _(
"*%s (AI)* Your aid in this matter will be expected. "
1457 "Long live our glorious alliance!"),
1460 case DAI_WR_BEHAVIOUR:
1463 PL_(
"*%s (AI)* %s has grossly violated their treaties "
1464 "with us for own gain. We will answer in force in "
1465 "%d turn and expect you to honor your alliance "
1466 "with us and do likewise!",
1467 "*%s (AI)* %s has grossly violated their treaties "
1468 "with us for own gain. We will answer in force in "
1469 "%d turns and expect you to honor your alliance "
1477 PL_(
"*%s (AI)* We intend to pillage and plunder the rich "
1478 "civilization of %s. We declare war in %d turn.",
1479 "*%s (AI)* We intend to pillage and plunder the rich "
1480 "civilization of %s. We declare war in %d turns.",
1486 _(
"*%s (AI)* If you want a piece of the loot, feel "
1487 "free to join in the action!"),
1492 PL_(
"*%s (AI)* We have had it with %s. Let us tear this "
1493 "pathetic civilization apart. We declare war in "
1495 "*%s (AI)* We have had it with %s. Let us tear this "
1496 "pathetic civilization apart. We declare war in "
1503 _(
"*%s (AI)* As our glorious allies, we expect your "
1504 "help in this war."),
1507 case DAI_WR_ALLIANCE:
1508 if (
WAR(ally, target)) {
1510 PL_(
"*%s (AI)* We will honor our alliance and declare "
1511 "war on %s in %d turn. Hold on - we are coming!",
1512 "*%s (AI)* We will honor our alliance and declare "
1513 "war on %s in %d turns. Hold on - we are coming!",
1520 PL_(
"*%s (AI)* We will honor our alliance with %s and "
1521 "declare war on %s in %d turns. We expect you to "
1523 "*%s (AI)* We will honor our alliance with %s and "
1524 "declare war on %s in %d turns. We expect you to "
1548 bool need_targets =
TRUE;
1549 struct player *target = NULL;
1588 if (aplayer == pplayer
1601 _(
"*%s (AI)* Your attempt to conquer space for "
1602 "yourself alone betrays your true intentions, and I "
1603 "will have no more of our alliance!"),
1617 _(
"*%s (AI)* Your attempt to unilaterally "
1618 "dominate outer space is highly offensive."),
1621 _(
"*%s (AI)* If you do not stop constructing your "
1622 "spaceship, I may be forced to take action!"),
1646 if (
WAR(pplayer, aplayer)) {
1647 need_targets =
FALSE;
1657 aggr_sr = sqrt(aggr);
1661 if (need_targets && target && most_hatred < war_threshold
1663 enum war_reason war_reason;
1670 war_reason = DAI_WR_EXCUSE;
1673 war_reason = DAI_WR_HATRED;
1676 war_reason = DAI_WR_NONE;
1706 if (!aplayer->is_alive) {
1713 if (!
WAR(pplayer, aplayer)) {
1734 clause.
from = pplayer;
1744 _(
"*%s (AI)* Sorry, sharing vision with you "
1745 "is no longer safe."),
1753 || aplayer == pplayer
1754 || aplayer == target
1774 if (adip->
spam <= 0) {
1793 if (
WAR(pplayer, eplayer)
1805 if (!target || !target->
is_alive) {
1810 if (adip->
spam <= 0) {
1815 _(
"*%s (AI)* Greetings our most trustworthy "
1816 "ally. We call upon you to destroy our enemy, %s."),
1823 _(
"*%s (AI)* Greetings ally, I see you have not yet "
1824 "made war with our enemy, %s. Why do I need to remind "
1825 "you of your promises?"),
1833 _(
"*%s (AI)* Dishonored one, we made a pact of "
1834 "alliance, and yet you remain at peace with our mortal "
1835 "enemy, %s! This is unacceptable; our alliance is no "
1840 "breaking useless alliance");
1856 clause.
type = CLAUSE_ALLIANCE;
1860 FALSE, DS_ALLIANCE) < 0) {
1867 _(
"*%s (AI)* Greetings friend, may we suggest "
1868 "making a common cause and join in an alliance?"),
1873 clause.
type = CLAUSE_PEACE;
1877 FALSE, DS_PEACE) < 0) {
1884 _(
"*%s (AI)* Greetings neighbor, may we suggest "
1885 "more peaceful relations?"),
1891 clause.
type = CLAUSE_CEASEFIRE;
1894 FALSE, DS_CEASEFIRE) < 0) {
1901 _(
"*%s (AI)* We grow weary of this constant "
1902 "bloodshed. May we suggest a cessation of hostilities?"),
1936 enum casus_belli_range scope,
1937 const struct action *paction,
1941 if (!
is_ai(receiver) || violator == receiver) {
1947 || scope == CBR_INTERNATIONAL_OUTRAGE);
1953 switch (paction->
result) {
1954 case ACTRES_SPY_NUKE:
1956 case ACTRES_NUKE_UNITS:
1957 if (receiver == victim) {
1960 }
else if (violator == victim) {
1966 case ACTRES_ESTABLISH_EMBASSY:
1967 case ACTRES_SPY_INVESTIGATE_CITY:
1971 case ACTRES_SPY_STEAL_GOLD:
1972 case ACTRES_SPY_STEAL_TECH:
1973 case ACTRES_SPY_TARGETED_STEAL_TECH:
1974 case ACTRES_STEAL_MAPS:
1978 case ACTRES_EXPEL_UNIT:
1982 case ACTRES_SPY_SABOTAGE_UNIT:
1986 case ACTRES_SPY_BRIBE_UNIT:
1987 case ACTRES_CAPTURE_UNITS:
1988 case ACTRES_BOMBARD:
1990 case ACTRES_SPY_ATTACK:
1994 case ACTRES_SPY_INCITE_CITY:
1995 case ACTRES_DESTROY_CITY:
1996 case ACTRES_CONQUER_CITY:
2000 case ACTRES_SPY_SABOTAGE_CITY:
2001 case ACTRES_SPY_TARGETED_SABOTAGE_CITY:
2002 case ACTRES_SPY_SABOTAGE_CITY_PRODUCTION:
2003 case ACTRES_STRIKE_BUILDING:
2004 case ACTRES_STRIKE_PRODUCTION:
2008 case ACTRES_SPY_POISON:
2009 case ACTRES_SPY_SPREAD_PLAGUE:
2013 case ACTRES_FOUND_CITY:
2017 case ACTRES_CONQUER_EXTRAS:
2018 case ACTRES_PILLAGE:
2022 case ACTRES_UNIT_MOVE:
2023 case ACTRES_TRADE_ROUTE:
2024 case ACTRES_MARKETPLACE:
2025 case ACTRES_HELP_WONDER:
2026 case ACTRES_JOIN_CITY:
2027 case ACTRES_DISBAND_UNIT_RECOVER:
2028 case ACTRES_DISBAND_UNIT:
2029 case ACTRES_HOME_CITY:
2030 case ACTRES_HOMELESS:
2031 case ACTRES_UPGRADE_UNIT:
2032 case ACTRES_PARADROP:
2033 case ACTRES_PARADROP_CONQUER:
2034 case ACTRES_AIRLIFT:
2035 case ACTRES_HEAL_UNIT:
2036 case ACTRES_TRANSFORM_TERRAIN:
2037 case ACTRES_CULTIVATE:
2039 case ACTRES_CLEAN_POLLUTION:
2040 case ACTRES_CLEAN_FALLOUT:
2041 case ACTRES_FORTIFY:
2043 case ACTRES_CONVERT:
2046 case ACTRES_IRRIGATE:
2047 case ACTRES_TRANSPORT_ALIGHT:
2048 case ACTRES_TRANSPORT_UNLOAD:
2049 case ACTRES_TRANSPORT_DISEMBARK:
2050 case ACTRES_TRANSPORT_BOARD:
2051 case ACTRES_TRANSPORT_EMBARK:
2052 case ACTRES_HUT_ENTER:
2053 case ACTRES_HUT_FRIGHTEN:
2061 if (receiver == victim) {
2076 const struct player *violator,
2077 const struct player *victim)
2081 if (violator == victim) {
2092 const struct player *violator,
2093 const struct player *victim)
2104 const struct player *violator,
2105 const struct player *victim)
2126 const struct player *violator,
2127 const struct player *victim,
2128 enum casus_belli_range scope,
2132 if (victim == receiver) {
2133 if (scope == CBR_INTERNATIONAL_OUTRAGE) {
2136 displeasure = displeasure * 2;
2139 }
else if (violator == victim) {
2157 if (!
is_ai(pplayer)) {
2161 if (pplayer != violator) {
2172 if (victim == pplayer) {
2181 _(
"*%s (AI)* We have been savagely attacked by "
2182 "%s, and we need your help! Honor our glorious "
2183 "alliance and your name will never be forgotten!"),
struct adv_data * adv_data_get(struct player *pplayer, bool *caller_closes)
bool adv_is_player_dangerous(struct player *pplayer, struct player *aplayer)
struct ai_plr * dai_plr_data_get(struct ai_type *ait, struct player *pplayer, bool *caller_closes)
struct ai_dip_intel * dai_diplomacy_get(struct ai_type *ait, const struct player *plr1, const struct player *plr2)
void dai_data_phase_finished(struct ai_type *ait, struct player *pplayer)
#define DIPLO_LOG(ait, loglevel, pplayer, aplayer, msg,...)
static struct ai_plr * def_ai_player_data(const struct player *pplayer, struct ai_type *deftype)
int player_distance_to_player(struct player *pplayer, struct player *target)
int city_gold_worth(const struct civ_map *nmap, struct city *pcity)
int ai_trait_get_value(enum trait tr, struct player *pplayer)
#define NEVER_MET(plr1, plr2)
#define ATTACK_POWER(ptype)
bool is_capital(const struct city *pcity)
const char * city_name_get(const struct city *pcity)
struct city * city_list_find_number(struct city_list *This, int id)
#define city_list_iterate(citylist, pcity)
static citizens city_size_get(const struct city *pcity)
#define city_owner(_pcity_)
#define city_list_iterate_end
#define city_built_iterate(_pcity, _p)
#define city_built_iterate_end
void dai_treaty_accepted(struct ai_type *ait, struct player *pplayer, struct player *aplayer, struct Treaty *ptreaty)
static void dai_incident_nuclear_not_target(struct player *receiver, const struct player *violator, const struct player *victim)
void dai_incident(struct ai_type *ait, enum incident_type type, enum casus_belli_range scope, const struct action *paction, struct player *receiver, struct player *violator, struct player *victim)
bool dai_on_war_footing(struct ai_type *ait, struct player *pplayer)
void dai_diplomacy_actions(struct ai_type *ait, struct player *pplayer)
static int dai_goldequiv_clause(struct ai_type *ait, struct player *pplayer, struct player *aplayer, struct Clause *pclause, bool verbose, enum diplstate_type ds_after)
static const struct player * get_allied_with_enemy_player(const struct player *us, const struct player *them)
static void dai_incident_simple(struct player *receiver, const struct player *violator, const struct player *victim, enum casus_belli_range scope, int how_bad)
static void dai_incident_nuclear_self(struct player *receiver, const struct player *violator, const struct player *victim)
void dai_diplomacy_begin_new_phase(struct ai_type *ait, struct player *pplayer)
static void suggest_tech_exchange(struct ai_type *ait, struct player *player1, struct player *player2)
void dai_treaty_evaluate(struct ai_type *ait, struct player *pplayer, struct player *aplayer, struct Treaty *ptreaty)
static int greed(int missing_love)
static bool dai_players_can_agree_on_ceasefire(struct ai_type *ait, struct player *player1, struct player *player2)
static void dai_go_to_war(struct ai_type *ait, struct player *pplayer, struct player *target, enum war_reason reason)
static int dai_goldequiv_tech(struct ai_type *ait, struct player *pplayer, Tech_type_id tech)
static enum diplstate_type pact_clause_to_diplstate_type(enum clause_type type)
static void dai_diplomacy_suggest(struct player *pplayer, struct player *aplayer, enum clause_type what, bool to_pplayer, int value)
static void dai_treaty_react(struct ai_type *ait, struct player *pplayer, struct player *aplayer, struct Clause *pclause)
static int compute_tech_sell_price(struct ai_type *ait, struct player *giver, struct player *taker, int tech_id, bool *is_dangerous)
static void clear_old_treaty(struct player *pplayer, struct player *aplayer)
static void dai_diplo_notify(struct player *pplayer, const char *text,...)
static void dai_incident_nuclear(struct player *receiver, const struct player *violator, const struct player *victim)
static void dai_incident_war(struct player *violator, struct player *victim)
static void war_countdown(struct ai_type *ait, struct player *pplayer, struct player *target, int countdown, enum war_reason reason)
static void dai_share(struct ai_type *ait, struct player *pplayer, struct player *aplayer)
static bool shared_vision_is_safe(struct player *pplayer, struct player *aplayer)
static int dai_war_desire(struct ai_type *ait, struct player *pplayer, struct player *target)
#define TURNS_BEFORE_TARGET
static bool diplomacy_verbose
void dai_diplomacy_first_contact(struct ai_type *ait, struct player *pplayer, struct player *aplayer)
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
void handle_diplomacy_create_clause_req(struct player *pplayer, int counterpart, int giver, enum clause_type type, int value)
void handle_diplomacy_init_meeting_req(struct player *pplayer, int counterpart)
struct Treaty * find_treaty(struct player *plr0, struct player *plr1)
void handle_diplomacy_accept_treaty_req(struct player *pplayer, int counterpart)
int int initiated_from int int giver
bool diplomacy_possible(const struct player *pplayer1, const struct player *pplayer2)
bool could_meet_with_player(const struct player *pplayer, const struct player *aplayer)
#define clause_list_iterate_end
#define clause_list_iterate(clauselist, pclause)
#define is_pact_clause(x)
int get_city_bonus(const struct city *pcity, enum effect_type effect_type)
int get_player_bonus(const struct player *pplayer, enum effect_type effect_type)
#define PL_(String1, String2, n)
const struct ft_color ftc_chat_private
void handle_player_change_government(struct player *pplayer, Government_type_id government)
void handle_diplomacy_cancel_pact(struct player *pplayer, int other_player_id, enum clause_type clause)
bool has_handicap(const struct player *pplayer, enum handicap_type htype)
int impr_build_shield_cost(const struct city *pcity, 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 is_small_wonder(const struct impr_type *pimprove)
#define fc_assert_msg(condition, message,...)
#define fc_assert_ret(condition)
#define fc_assert(condition)
#define fc_assert_ret_val(condition, val)
#define log_base(level, message,...)
#define log_error(message,...)
#define map_size_checked()
void remove_shared_vision(struct player *pfrom, struct player *pto)
void vpackage_event(struct packet_chat_msg *packet, const struct tile *ptile, enum event_type event, const struct ft_color color, const char *format, va_list vargs)
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)
void dlsend_packet_diplomacy_remove_clause(struct conn_list *dest, int counterpart, int giver, enum clause_type type, int value)
struct city_list * cities
bool players_on_same_team(const struct player *pplayer1, const struct player *pplayer2)
int player_slot_count(void)
int player_number(const struct player *pplayer)
const char * player_name(const struct player *pplayer)
bool pplayers_at_war(const struct player *pplayer, const struct player *pplayer2)
int player_index(const struct player *pplayer)
int player_in_territory(const struct player *pplayer, const struct player *pplayer2)
enum dipl_reason pplayer_can_cancel_treaty(const struct player *p1, const struct player *p2)
struct player_diplstate * player_diplstate_get(const struct player *plr1, const struct player *plr2)
bool pplayers_allied(const struct player *pplayer, const struct player *pplayer2)
bool pplayers_non_attack(const struct player *pplayer, const struct player *pplayer2)
bool player_has_embassy(const struct player *pplayer, const struct player *pplayer2)
bool gives_shared_vision(const struct player *me, const struct player *them)
bool pplayers_in_peace(const struct player *pplayer, const struct player *pplayer2)
#define players_iterate_end
#define players_iterate(_pplayer)
static bool is_barbarian(const struct player *pplayer)
#define players_iterate_alive_end
#define players_iterate_alive(_pplayer)
bool research_goal_tech_req(const struct research *presearch, Tech_type_id goal, Tech_type_id tech)
int player_tech_upkeep(const struct player *pplayer)
int research_goal_bulbs_required(const struct research *presearch, Tech_type_id goal)
struct research * research_get(const struct player *pplayer)
enum tech_state research_invention_state(const struct research *presearch, Tech_type_id tech)
bool research_invention_gettable(const struct research *presearch, const Tech_type_id tech, bool allow_holes)
struct clause_list * clauses
enum action_result result
struct adv_data::@93 dipl
struct player * spacerace_leader
struct player * at_war_with_ally
signed char asked_about_alliance
enum war_reason war_reason
signed char asked_about_peace
struct player * is_allied_with_ally
signed char warned_about_space
signed char ally_patience
struct player * is_allied_with_enemy
signed char asked_about_ceasefire
struct ai_plr::@268 diplomacy
adv_want tech_want[A_LAST+1]
int req_love_for_alliance
enum winning_strategy strategy
struct civ_game::@30::@34 server
struct packet_game_info info
struct government * government_during_revolution
Government_type_id government_during_revolution_id
enum tech_upkeep_style tech_upkeep_style
enum tech_leakage_style tech_leakage
bool tech_trade_allow_holes
enum tech_cost_style tech_cost_style
int love[MAX_NUM_PLAYER_SLOTS]
char has_reason_to_cancel
enum spaceship_state state
struct city_list * cities
struct player_ai ai_common
struct government * government
const struct ai_type * ai
struct conn_list * connections
struct player_economic economic
struct player_spaceship spaceship
struct player::@69::@71 server
struct unit_type::@87 adv
struct advance * advance_by_number(const Tech_type_id atype)
const char * advance_rule_name(const struct advance *padvance)
#define advance_index_iterate_max(_start, _index, _max)
#define advance_index_iterate_end
#define advance_index_iterate_max_end
static Tech_type_id advance_count(void)
#define advance_index_iterate(_start, _index)
#define TRAIT_MAX_VALUE_SR
bool unit_is_cityfounder(const struct unit *punit)
#define unit_list_iterate(unitlist, punit)
#define unit_list_iterate_end
const struct unit_type * unit_type_get(const struct unit *punit)
bool utype_is_cityfounder(const struct unit_type *utype)