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);
363 case CLAUSE_ALLIANCE:
365 case CLAUSE_CEASEFIRE:
368 dai_diplo_notify(aplayer,
_(
"*%s (AI)* In away mode AI can't sign such a treaty."),
377 && pclause->
type != CLAUSE_CEASEFIRE) {
387 && pclause->
type != CLAUSE_CEASEFIRE) {
389 "distance from %s for some time, %s."),
397 if (pclause->
type == CLAUSE_PEACE) {
408 "ceasefire for a bit longer first, %s."),
418 }
else if (pclause->
type == CLAUSE_ALLIANCE) {
431 "alliance yet, %s."),
469 worth -= pclause->
value;
476 if (!give || ds_after == DS_ALLIANCE) {
483 worth -= 15 * city_list_size(aplayer->
cities);
496 if (!give || ds_after == DS_ALLIANCE) {
502 worth -= 40 *
MAX(city_list_size(pplayer->
cities), 1);
552 if (ds_after == DS_ALLIANCE) {
555 _(
"*%s (AI)* Sorry, sharing vision with you "
573 if (ds_after == DS_ALLIANCE) {
575 }
else if (ds_after == DS_PEACE) {
610 int total_balance = 0;
611 bool only_gifts =
TRUE;
612 enum diplstate_type ds_after =
614 int given_cities = 0;
620 if (pclause->type == CLAUSE_CITY && pclause->from == pplayer) {
632 if (pclause->type != CLAUSE_GOLD && pclause->type != CLAUSE_MAP
633 && pclause->type != CLAUSE_SEAMAP && pclause->type != CLAUSE_VISION
634 && (pclause->type != CLAUSE_ADVANCE
650 if (ds_after == DS_WAR && !only_gifts) {
656 && city_list_size(pplayer->
cities) - given_cities <= 2) {
663 if (total_balance >= 0) {
670 if (pplayer != ptreaty->
plr0) {
671 dai_diplo_notify(aplayer,
_(
"*%s (AI)* This deal was not very good for us, %s!"),
691 switch (pclause->
type) {
692 case CLAUSE_ALLIANCE:
709 case CLAUSE_CEASEFIRE:
732 int total_balance = 0;
734 enum diplstate_type ds_after =
752 total_balance += balance;
753 gift = (gift && (balance >= 0));
766 if (total_balance > 0 && gift) {
767 int i = total_balance / ((city_list_size(pplayer->
cities) * 10) + 1);
791 int want = 0, fear = 0, distance = 0, settlers = 0,
cities = 0;
797 want += pcity->surplus[
O_SHIELD] * 8;
798 want += pcity->surplus[
O_TRADE] * 6;
839 if (VUT_UTYPE == pcity->production.kind
850 want -= abs(want) /
MAX(
cities - settlers, 1);
868 if (
adv->dipl.spacerace_leader == target) {
881 if (eplayer == pplayer) {
887 if (ds == DS_ARMISTICE) {
888 want -= abs(want) / 10;
889 }
else if (ds == DS_CEASEFIRE) {
890 want -= abs(want) / 7;
891 }
else if (ds == DS_PEACE) {
892 want -= abs(want) / 5;
893 }
else if (ds == DS_ALLIANCE) {
894 want -= abs(want) / 3;
917 return (want - fear);
927 enum clause_type what,
950 bool wants_ceasefire =
FALSE;
960 wants_ceasefire =
TRUE;
964 clause.
from = pplayer;
966 clause.
type = CLAUSE_CEASEFIRE;
969 FALSE, DS_CEASEFIRE) > 0) {
970 wants_ceasefire =
TRUE;
975 if (wants_ceasefire) {
977 _(
"*%s (AI)* Greetings %s! May we suggest a ceasefire "
978 "while we get to know each other better?"),
985 _(
"*%s (AI)* I found you %s! Now make it worth my "
986 "letting you live, or be crushed."),
1006 int best_desire = 0;
1007 struct player *best_target = NULL;
1015 memset(war_desire, 0,
sizeof(war_desire));
1020 if (aplayer == pplayer
1028 best_target = aplayer;
1039 if (pplayer == aplayer) {
1049 && aplayer != best_target
1057 if (
WAR(eplayer, aplayer) &&
WAR(pplayer, eplayer)) {
1063 }
else if (
WAR(pplayer, aplayer)) {
1098 "our borders", amount);
1123 if (aplayer == best_target && best_desire > 0) {
1128 "love by %d ", reduction);
1185 if (worth[tech] <= 0) {
1191 if (worth[tech2] >= 0) {
1195 diff = worth[tech] + worth[tech2];
1197 || (diff < 0 && player2->economic.gold >= -diff)
1203 }
else if (diff < 0) {
1219 if (old_treaty != NULL) {
1225 pclause->type, pclause->value);
1228 clause_list_destroy(old_treaty->
clauses);
1229 old_treaty->
clauses = clause_list_new();
1246 if (presearch != aresearch
1268 gives_vision =
TRUE;
1295 struct player *target,
enum war_reason reason)
1308 case DAI_WR_BEHAVIOUR:
1310 _(
"*%s (AI)* I have tolerated your vicious antics "
1311 "long enough! To war!"),
1322 _(
"*%s (AI)* Finally I get around to you! Did "
1323 "you really think you could get away with your crimes?"),
1329 _(
"*%s (AI)* Your covert hostilities brought "
1330 "this war upon you!"),
1334 case DAI_WR_ALLIANCE:
1337 _(
"*%s (AI)* Your aggression against %s was "
1338 "your last mistake!"),
1345 "for their war against an ally, but can no longer find "
1346 "this ally! War declaration aborted.");
1376 "Not revolting, as there would be Senate regardless.");
1386 "Wanted to cancel treaty but was unable to.");
1418 int countdown,
enum war_reason reason)
1440 PL_(
"*%s (AI)* We will be launching an all-out war "
1441 "against %s in %d turn to stop the spaceship "
1443 "*%s (AI)* We will be launching an all-out war "
1444 "against %s in %d turns to stop the spaceship "
1451 _(
"*%s (AI)* Your aid in this matter will be expected. "
1452 "Long live our glorious alliance!"),
1455 case DAI_WR_BEHAVIOUR:
1458 PL_(
"*%s (AI)* %s has grossly violated their treaties "
1459 "with us for own gain. We will answer in force in "
1460 "%d turn and expect you to honor your alliance "
1461 "with us and do likewise!",
1462 "*%s (AI)* %s has grossly violated their treaties "
1463 "with us for own gain. We will answer in force in "
1464 "%d turns and expect you to honor your alliance "
1472 PL_(
"*%s (AI)* We intend to pillage and plunder the rich "
1473 "civilization of %s. We declare war in %d turn.",
1474 "*%s (AI)* We intend to pillage and plunder the rich "
1475 "civilization of %s. We declare war in %d turns.",
1481 _(
"*%s (AI)* If you want a piece of the loot, feel "
1482 "free to join in the action!"),
1487 PL_(
"*%s (AI)* We have had it with %s. Let us tear this "
1488 "pathetic civilization apart. We declare war in "
1490 "*%s (AI)* We have had it with %s. Let us tear this "
1491 "pathetic civilization apart. We declare war in "
1498 _(
"*%s (AI)* As our glorious allies, we expect your "
1499 "help in this war."),
1502 case DAI_WR_ALLIANCE:
1503 if (
WAR(ally, target)) {
1505 PL_(
"*%s (AI)* We will honor our alliance and declare "
1506 "war on %s in %d turn. Hold on - we are coming!",
1507 "*%s (AI)* We will honor our alliance and declare "
1508 "war on %s in %d turns. Hold on - we are coming!",
1515 PL_(
"*%s (AI)* We will honor our alliance with %s and "
1516 "declare war on %s in %d turns. We expect you to "
1518 "*%s (AI)* We will honor our alliance with %s and "
1519 "declare war on %s in %d turns. We expect you to "
1543 bool need_targets =
TRUE;
1544 struct player *target = NULL;
1583 if (aplayer == pplayer
1596 _(
"*%s (AI)* Your attempt to conquer space for "
1597 "yourself alone betrays your true intentions, and I "
1598 "will have no more of our alliance!"),
1612 _(
"*%s (AI)* Your attempt to unilaterally "
1613 "dominate outer space is highly offensive."),
1616 _(
"*%s (AI)* If you do not stop constructing your "
1617 "spaceship, I may be forced to take action!"),
1641 if (
WAR(pplayer, aplayer)) {
1642 need_targets =
FALSE;
1652 aggr_sr = sqrt(aggr);
1656 if (need_targets && target && most_hatred < war_threshold
1658 enum war_reason war_reason;
1665 war_reason = DAI_WR_EXCUSE;
1668 war_reason = DAI_WR_HATRED;
1671 war_reason = DAI_WR_NONE;
1701 if (!aplayer->is_alive) {
1708 if (!
WAR(pplayer, aplayer)) {
1729 clause.
from = pplayer;
1739 _(
"*%s (AI)* Sorry, sharing vision with you "
1740 "is no longer safe."),
1748 || aplayer == pplayer
1749 || aplayer == target
1769 if (adip->
spam <= 0) {
1788 if (
WAR(pplayer, eplayer)
1800 if (!target || !target->
is_alive) {
1805 if (adip->
spam <= 0) {
1810 _(
"*%s (AI)* Greetings our most trustworthy "
1811 "ally. We call upon you to destroy our enemy, %s."),
1818 _(
"*%s (AI)* Greetings ally, I see you have not yet "
1819 "made war with our enemy, %s. Why do I need to remind "
1820 "you of your promises?"),
1828 _(
"*%s (AI)* Dishonored one, we made a pact of "
1829 "alliance, and yet you remain at peace with our mortal "
1830 "enemy, %s! This is unacceptable; our alliance is no "
1835 "breaking useless alliance");
1851 clause.
type = CLAUSE_ALLIANCE;
1855 FALSE, DS_ALLIANCE) < 0) {
1862 _(
"*%s (AI)* Greetings friend, may we suggest "
1863 "making a common cause and join in an alliance?"),
1868 clause.
type = CLAUSE_PEACE;
1872 FALSE, DS_PEACE) < 0) {
1879 _(
"*%s (AI)* Greetings neighbor, may we suggest "
1880 "more peaceful relations?"),
1886 clause.
type = CLAUSE_CEASEFIRE;
1889 FALSE, DS_CEASEFIRE) < 0) {
1896 _(
"*%s (AI)* We grow weary of this constant "
1897 "bloodshed. May we suggest a cessation of hostilities?"),
1931 enum casus_belli_range scope,
1932 const struct action *paction,
1936 if (!
is_ai(receiver) || violator == receiver) {
1942 || scope == CBR_INTERNATIONAL_OUTRAGE);
1948 switch (paction->
result) {
1949 case ACTRES_SPY_NUKE:
1951 case ACTRES_NUKE_UNITS:
1952 if (receiver == victim) {
1955 }
else if (violator == victim) {
1961 case ACTRES_ESTABLISH_EMBASSY:
1962 case ACTRES_SPY_INVESTIGATE_CITY:
1966 case ACTRES_SPY_STEAL_GOLD:
1967 case ACTRES_SPY_STEAL_TECH:
1968 case ACTRES_SPY_TARGETED_STEAL_TECH:
1969 case ACTRES_STEAL_MAPS:
1973 case ACTRES_EXPEL_UNIT:
1977 case ACTRES_SPY_SABOTAGE_UNIT:
1981 case ACTRES_SPY_BRIBE_UNIT:
1982 case ACTRES_CAPTURE_UNITS:
1983 case ACTRES_BOMBARD:
1985 case ACTRES_SPY_ATTACK:
1989 case ACTRES_SPY_INCITE_CITY:
1990 case ACTRES_DESTROY_CITY:
1991 case ACTRES_CONQUER_CITY:
1995 case ACTRES_SPY_SABOTAGE_CITY:
1996 case ACTRES_SPY_TARGETED_SABOTAGE_CITY:
1997 case ACTRES_SPY_SABOTAGE_CITY_PRODUCTION:
1998 case ACTRES_STRIKE_BUILDING:
1999 case ACTRES_STRIKE_PRODUCTION:
2003 case ACTRES_SPY_POISON:
2004 case ACTRES_SPY_SPREAD_PLAGUE:
2008 case ACTRES_FOUND_CITY:
2012 case ACTRES_CONQUER_EXTRAS:
2013 case ACTRES_PILLAGE:
2017 case ACTRES_UNIT_MOVE:
2018 case ACTRES_TRADE_ROUTE:
2019 case ACTRES_MARKETPLACE:
2020 case ACTRES_HELP_WONDER:
2021 case ACTRES_JOIN_CITY:
2022 case ACTRES_DISBAND_UNIT_RECOVER:
2023 case ACTRES_DISBAND_UNIT:
2024 case ACTRES_HOME_CITY:
2025 case ACTRES_HOMELESS:
2026 case ACTRES_UPGRADE_UNIT:
2027 case ACTRES_PARADROP:
2028 case ACTRES_PARADROP_CONQUER:
2029 case ACTRES_AIRLIFT:
2030 case ACTRES_HEAL_UNIT:
2031 case ACTRES_TRANSFORM_TERRAIN:
2032 case ACTRES_CULTIVATE:
2034 case ACTRES_CLEAN_POLLUTION:
2035 case ACTRES_CLEAN_FALLOUT:
2036 case ACTRES_FORTIFY:
2038 case ACTRES_CONVERT:
2041 case ACTRES_IRRIGATE:
2042 case ACTRES_TRANSPORT_ALIGHT:
2043 case ACTRES_TRANSPORT_UNLOAD:
2044 case ACTRES_TRANSPORT_DISEMBARK:
2045 case ACTRES_TRANSPORT_BOARD:
2046 case ACTRES_TRANSPORT_EMBARK:
2047 case ACTRES_HUT_ENTER:
2048 case ACTRES_HUT_FRIGHTEN:
2056 if (receiver == victim) {
2071 const struct player *violator,
2072 const struct player *victim)
2076 if (violator == victim) {
2087 const struct player *violator,
2088 const struct player *victim)
2099 const struct player *violator,
2100 const struct player *victim)
2121 const struct player *violator,
2122 const struct player *victim,
2123 enum casus_belli_range scope,
2127 if (victim == receiver) {
2128 if (scope == CBR_INTERNATIONAL_OUTRAGE) {
2131 displeasure = displeasure * 2;
2134 }
else if (violator == victim) {
2152 if (!
is_ai(pplayer)) {
2156 if (pplayer != violator) {
2167 if (victim == pplayer) {
2176 _(
"*%s (AI)* We have been savagely attacked by "
2177 "%s, and we need your help! Honor our glorious "
2178 "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)