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;
322 switch (pclause->
type) {
331 pclause->
value) != TECH_KNOWN) {
348 limit =
MAX(1, upk_per_tech);
367 case CLAUSE_ALLIANCE:
369 case CLAUSE_CEASEFIRE:
372 dai_diplo_notify(aplayer,
_(
"*%s (AI)* In away mode AI can't sign such a treaty."),
381 && pclause->
type != CLAUSE_CEASEFIRE) {
391 && pclause->
type != CLAUSE_CEASEFIRE) {
393 "distance from %s for some time, %s."),
401 if (pclause->
type == CLAUSE_PEACE) {
412 "ceasefire for a bit longer first, %s."),
422 }
else if (pclause->
type == CLAUSE_ALLIANCE) {
435 "alliance yet, %s."),
473 worth -= pclause->
value;
480 if (!give || ds_after == DS_ALLIANCE) {
487 worth -= 15 * city_list_size(aplayer->
cities);
500 if (!give || ds_after == DS_ALLIANCE) {
506 worth -= 40 *
MAX(city_list_size(pplayer->
cities), 1);
556 if (ds_after == DS_ALLIANCE) {
559 _(
"*%s (AI)* Sorry, sharing vision with you "
577 if (ds_after == DS_ALLIANCE) {
579 }
else if (ds_after == DS_PEACE) {
614 int total_balance = 0;
615 bool only_gifts =
TRUE;
616 enum diplstate_type ds_after =
618 int given_cities = 0;
624 if (pclause->type == CLAUSE_CITY && pclause->from == pplayer) {
636 if (pclause->type != CLAUSE_GOLD && pclause->type != CLAUSE_MAP
637 && pclause->type != CLAUSE_SEAMAP && pclause->type != CLAUSE_VISION
638 && (pclause->type != CLAUSE_ADVANCE
654 if (ds_after == DS_WAR && !only_gifts) {
660 && city_list_size(pplayer->
cities) - given_cities <= 2) {
667 if (total_balance >= 0) {
674 if (pplayer != ptreaty->
plr0) {
675 dai_diplo_notify(aplayer,
_(
"*%s (AI)* This deal was not very good for us, %s!"),
695 switch (pclause->
type) {
696 case CLAUSE_ALLIANCE:
713 case CLAUSE_CEASEFIRE:
736 int total_balance = 0;
738 enum diplstate_type ds_after =
756 total_balance += balance;
757 gift = (gift && (balance >= 0));
770 if (total_balance > 0 && gift) {
771 int i = total_balance / ((city_list_size(pplayer->
cities) * 10) + 1);
795 int want = 0, fear = 0, distance = 0, settlers = 0,
cities = 0;
801 want += pcity->surplus[
O_SHIELD] * 8;
802 want += pcity->surplus[
O_TRADE] * 6;
843 if (VUT_UTYPE == pcity->production.kind
854 want -= abs(want) /
MAX(
cities - settlers, 1);
872 if (
adv->dipl.spacerace_leader == target) {
885 if (eplayer == pplayer) {
891 if (ds == DS_ARMISTICE) {
892 want -= abs(want) / 10;
893 }
else if (ds == DS_CEASEFIRE) {
894 want -= abs(want) / 7;
895 }
else if (ds == DS_PEACE) {
896 want -= abs(want) / 5;
897 }
else if (ds == DS_ALLIANCE) {
898 want -= abs(want) / 3;
921 return (want - fear);
931 enum clause_type what,
954 bool wants_ceasefire =
FALSE;
964 wants_ceasefire =
TRUE;
968 clause.
from = pplayer;
970 clause.
type = CLAUSE_CEASEFIRE;
973 FALSE, DS_CEASEFIRE) > 0) {
974 wants_ceasefire =
TRUE;
979 if (wants_ceasefire) {
981 _(
"*%s (AI)* Greetings %s! May we suggest a ceasefire "
982 "while we get to know each other better?"),
989 _(
"*%s (AI)* I found you %s! Now make it worth my "
990 "letting you live, or be crushed."),
1010 int best_desire = 0;
1011 struct player *best_target = NULL;
1019 memset(war_desire, 0,
sizeof(war_desire));
1024 if (aplayer == pplayer
1032 best_target = aplayer;
1043 if (pplayer == aplayer) {
1053 && aplayer != best_target
1061 if (
WAR(eplayer, aplayer) &&
WAR(pplayer, eplayer)) {
1067 }
else if (
WAR(pplayer, aplayer)) {
1102 "our borders", amount);
1127 if (aplayer == best_target && best_desire > 0) {
1132 "love by %d ", reduction);
1189 if (worth[tech] <= 0) {
1195 if (worth[tech2] >= 0) {
1199 diff = worth[tech] + worth[tech2];
1201 || (diff < 0 && player2->economic.gold >= -diff)
1207 }
else if (diff < 0) {
1223 if (old_treaty != NULL) {
1229 pclause->type, pclause->value);
1232 clause_list_destroy(old_treaty->
clauses);
1233 old_treaty->
clauses = clause_list_new();
1250 if (presearch != aresearch
1272 gives_vision =
TRUE;
1299 struct player *target,
enum war_reason reason)
1312 case DAI_WR_BEHAVIOUR:
1314 _(
"*%s (AI)* I have tolerated your vicious antics "
1315 "long enough! To war!"),
1326 _(
"*%s (AI)* Finally I get around to you! Did "
1327 "you really think you could get away with your crimes?"),
1333 _(
"*%s (AI)* Your covert hostilities brought "
1334 "this war upon you!"),
1338 case DAI_WR_ALLIANCE:
1341 _(
"*%s (AI)* Your aggression against %s was "
1342 "your last mistake!"),
1349 "for their war against an ally, but can no longer find "
1350 "this ally! War declaration aborted.");
1380 "Not revolting, as there would be Senate regardless.");
1390 "Wanted to cancel treaty but was unable to.");
1422 int countdown,
enum war_reason reason)
1444 PL_(
"*%s (AI)* We will be launching an all-out war "
1445 "against %s in %d turn to stop the spaceship "
1447 "*%s (AI)* We will be launching an all-out war "
1448 "against %s in %d turns to stop the spaceship "
1455 _(
"*%s (AI)* Your aid in this matter will be expected. "
1456 "Long live our glorious alliance!"),
1459 case DAI_WR_BEHAVIOUR:
1462 PL_(
"*%s (AI)* %s has grossly violated their treaties "
1463 "with us for own gain. We will answer in force in "
1464 "%d turn and expect you to honor your alliance "
1465 "with us and do likewise!",
1466 "*%s (AI)* %s has grossly violated their treaties "
1467 "with us for own gain. We will answer in force in "
1468 "%d turns and expect you to honor your alliance "
1476 PL_(
"*%s (AI)* We intend to pillage and plunder the rich "
1477 "civilization of %s. We declare war in %d turn.",
1478 "*%s (AI)* We intend to pillage and plunder the rich "
1479 "civilization of %s. We declare war in %d turns.",
1485 _(
"*%s (AI)* If you want a piece of the loot, feel "
1486 "free to join in the action!"),
1491 PL_(
"*%s (AI)* We have had it with %s. Let us tear this "
1492 "pathetic civilization apart. We declare war in "
1494 "*%s (AI)* We have had it with %s. Let us tear this "
1495 "pathetic civilization apart. We declare war in "
1502 _(
"*%s (AI)* As our glorious allies, we expect your "
1503 "help in this war."),
1506 case DAI_WR_ALLIANCE:
1507 if (
WAR(ally, target)) {
1509 PL_(
"*%s (AI)* We will honor our alliance and declare "
1510 "war on %s in %d turn. Hold on - we are coming!",
1511 "*%s (AI)* We will honor our alliance and declare "
1512 "war on %s in %d turns. Hold on - we are coming!",
1519 PL_(
"*%s (AI)* We will honor our alliance with %s and "
1520 "declare war on %s in %d turns. We expect you to "
1522 "*%s (AI)* We will honor our alliance with %s and "
1523 "declare war on %s in %d turns. We expect you to "
1547 bool need_targets =
TRUE;
1548 struct player *target = NULL;
1587 if (aplayer == pplayer
1600 _(
"*%s (AI)* Your attempt to conquer space for "
1601 "yourself alone betrays your true intentions, and I "
1602 "will have no more of our alliance!"),
1616 _(
"*%s (AI)* Your attempt to unilaterally "
1617 "dominate outer space is highly offensive."),
1620 _(
"*%s (AI)* If you do not stop constructing your "
1621 "spaceship, I may be forced to take action!"),
1645 if (
WAR(pplayer, aplayer)) {
1646 need_targets =
FALSE;
1656 aggr_sr = sqrt(aggr);
1660 if (need_targets && target && most_hatred < war_threshold
1662 enum war_reason war_reason;
1669 war_reason = DAI_WR_EXCUSE;
1672 war_reason = DAI_WR_HATRED;
1675 war_reason = DAI_WR_NONE;
1705 if (!aplayer->is_alive) {
1712 if (!
WAR(pplayer, aplayer)) {
1733 clause.
from = pplayer;
1743 _(
"*%s (AI)* Sorry, sharing vision with you "
1744 "is no longer safe."),
1752 || aplayer == pplayer
1753 || aplayer == target
1773 if (adip->
spam <= 0) {
1792 if (
WAR(pplayer, eplayer)
1804 if (!target || !target->
is_alive) {
1809 if (adip->
spam <= 0) {
1814 _(
"*%s (AI)* Greetings our most trustworthy "
1815 "ally. We call upon you to destroy our enemy, %s."),
1822 _(
"*%s (AI)* Greetings ally, I see you have not yet "
1823 "made war with our enemy, %s. Why do I need to remind "
1824 "you of your promises?"),
1832 _(
"*%s (AI)* Dishonored one, we made a pact of "
1833 "alliance, and yet you remain at peace with our mortal "
1834 "enemy, %s! This is unacceptable; our alliance is no "
1839 "breaking useless alliance");
1855 clause.
type = CLAUSE_ALLIANCE;
1859 FALSE, DS_ALLIANCE) < 0) {
1866 _(
"*%s (AI)* Greetings friend, may we suggest "
1867 "making a common cause and join in an alliance?"),
1872 clause.
type = CLAUSE_PEACE;
1876 FALSE, DS_PEACE) < 0) {
1883 _(
"*%s (AI)* Greetings neighbor, may we suggest "
1884 "more peaceful relations?"),
1890 clause.
type = CLAUSE_CEASEFIRE;
1893 FALSE, DS_CEASEFIRE) < 0) {
1900 _(
"*%s (AI)* We grow weary of this constant "
1901 "bloodshed. May we suggest a cessation of hostilities?"),
1935 enum casus_belli_range scope,
1936 const struct action *paction,
1940 if (!
is_ai(receiver) || violator == receiver) {
1946 || scope == CBR_INTERNATIONAL_OUTRAGE);
1952 switch (paction->
result) {
1953 case ACTRES_SPY_NUKE:
1955 case ACTRES_NUKE_UNITS:
1956 if (receiver == victim) {
1959 }
else if (violator == victim) {
1965 case ACTRES_ESTABLISH_EMBASSY:
1966 case ACTRES_SPY_INVESTIGATE_CITY:
1970 case ACTRES_SPY_STEAL_GOLD:
1971 case ACTRES_SPY_STEAL_TECH:
1972 case ACTRES_SPY_TARGETED_STEAL_TECH:
1973 case ACTRES_STEAL_MAPS:
1977 case ACTRES_EXPEL_UNIT:
1981 case ACTRES_SPY_SABOTAGE_UNIT:
1985 case ACTRES_SPY_BRIBE_UNIT:
1986 case ACTRES_CAPTURE_UNITS:
1987 case ACTRES_BOMBARD:
1989 case ACTRES_SPY_ATTACK:
1993 case ACTRES_SPY_INCITE_CITY:
1994 case ACTRES_DESTROY_CITY:
1995 case ACTRES_CONQUER_CITY:
1999 case ACTRES_SPY_SABOTAGE_CITY:
2000 case ACTRES_SPY_TARGETED_SABOTAGE_CITY:
2001 case ACTRES_SPY_SABOTAGE_CITY_PRODUCTION:
2002 case ACTRES_STRIKE_BUILDING:
2003 case ACTRES_STRIKE_PRODUCTION:
2007 case ACTRES_SPY_POISON:
2008 case ACTRES_SPY_SPREAD_PLAGUE:
2012 case ACTRES_FOUND_CITY:
2016 case ACTRES_CONQUER_EXTRAS:
2017 case ACTRES_PILLAGE:
2021 case ACTRES_UNIT_MOVE:
2022 case ACTRES_TRADE_ROUTE:
2023 case ACTRES_MARKETPLACE:
2024 case ACTRES_HELP_WONDER:
2025 case ACTRES_JOIN_CITY:
2026 case ACTRES_DISBAND_UNIT_RECOVER:
2027 case ACTRES_DISBAND_UNIT:
2028 case ACTRES_HOME_CITY:
2029 case ACTRES_HOMELESS:
2030 case ACTRES_UPGRADE_UNIT:
2031 case ACTRES_PARADROP:
2032 case ACTRES_PARADROP_CONQUER:
2033 case ACTRES_AIRLIFT:
2034 case ACTRES_HEAL_UNIT:
2035 case ACTRES_TRANSFORM_TERRAIN:
2036 case ACTRES_CULTIVATE:
2038 case ACTRES_CLEAN_POLLUTION:
2039 case ACTRES_CLEAN_FALLOUT:
2040 case ACTRES_FORTIFY:
2042 case ACTRES_CONVERT:
2045 case ACTRES_IRRIGATE:
2046 case ACTRES_TRANSPORT_ALIGHT:
2047 case ACTRES_TRANSPORT_UNLOAD:
2048 case ACTRES_TRANSPORT_DISEMBARK:
2049 case ACTRES_TRANSPORT_BOARD:
2050 case ACTRES_TRANSPORT_EMBARK:
2051 case ACTRES_HUT_ENTER:
2052 case ACTRES_HUT_FRIGHTEN:
2060 if (receiver == victim) {
2075 const struct player *violator,
2076 const struct player *victim)
2080 if (violator == victim) {
2091 const struct player *violator,
2092 const struct player *victim)
2103 const struct player *violator,
2104 const struct player *victim)
2125 const struct player *violator,
2126 const struct player *victim,
2127 enum casus_belli_range scope,
2131 if (victim == receiver) {
2132 if (scope == CBR_INTERNATIONAL_OUTRAGE) {
2135 displeasure = displeasure * 2;
2138 }
else if (violator == victim) {
2156 if (!
is_ai(pplayer)) {
2160 if (pplayer != violator) {
2171 if (victim == pplayer) {
2180 _(
"*%s (AI)* We have been savagely attacked by "
2181 "%s, and we need your help! Honor our glorious "
2182 "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(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)