Freeciv21
Develop your civilization from humble roots to a global empire
player.h
Go to the documentation of this file.
1 /*__ ___ ***************************************
2 / \ / \ Copyright (c) 1996-2020 Freeciv21 and Freeciv
3 \_ \ / __/ contributors. This file is part of Freeciv21.
4  _\ \ / /__ Freeciv21 is free software: you can redistribute it
5  \___ \____/ __/ and/or modify it under the terms of the GNU General
6  \_ _/ Public License as published by the Free Software
7  | @ @ \_ Foundation, either version 3 of the License,
8  | or (at your option) any later version.
9  _/ /\ You should have received a copy of the GNU
10  /o) (o/\ \_ General Public License along with Freeciv21.
11  \_____/ / If not, see https://www.gnu.org/licenses/.
12  \____/ ********************************************************/
13 #pragma once
14 
15 // common
16 #include "city.h"
17 #include "effects.h"
18 #include "spaceship.h"
19 #include "tech.h"
20 #include "traits.h"
21 
22 #define PLAYER_DEFAULT_TAX_RATE 0
23 #define PLAYER_DEFAULT_SCIENCE_RATE 100
24 #define PLAYER_DEFAULT_LUXURY_RATE 0
25 
26 #define ANON_PLAYER_NAME "noname"
27 
28 /* If changing this, be sure to adjust loading of pre-2.6 savegames
29  * which depend on saved username to tell if user (or ranked_user) is
30  * anonymous. */
31 #define ANON_USER_NAME N_("Unassigned")
32 
39 };
40 
41 #define SPECENUM_NAME plr_flag_id
42 #define SPECENUM_VALUE0 PLRF_AI
43 #define SPECENUM_VALUE0NAME "ai"
44 #define SPECENUM_VALUE1 PLRF_SCENARIO_RESERVED
45 #define SPECENUM_VALUE1NAME "ScenarioReserved"
46 #define SPECENUM_COUNT PLRF_COUNT
47 #define SPECENUM_BITVECTOR bv_plr_flags
48 #include "specenum_gen.h"
49 
50 struct player_slot;
51 
53  int gold;
54  int tax;
55  int science;
56  int luxury;
58 };
59 
60 #define SPECENUM_NAME player_status
61 // 'normal' status
62 #define SPECENUM_VALUE0 PSTATUS_NORMAL
63 // set once the player is in the process of dying
64 #define SPECENUM_VALUE1 PSTATUS_DYING
65 // this player is winner in scenario game
66 #define SPECENUM_VALUE2 PSTATUS_WINNER
67 // has indicated willingness to surrender
68 #define SPECENUM_VALUE3 PSTATUS_SURRENDER
69 // keep this last
70 #define SPECENUM_COUNT PSTATUS_COUNT
71 #include "specenum_gen.h"
72 
73 BV_DEFINE(bv_pstatus, PSTATUS_COUNT);
74 
75 struct player_score {
76  int happy;
77  int content;
78  int unhappy;
79  int angry;
81  int wonders;
82  int techs;
83  int techout;
84  int goldout;
85  int landarea;
87  int population; // in thousand of citizen
88  int cities;
91  int units;
92  int pollution;
93  int literacy;
94  int bnp;
95  int mfg;
96  int food;
97  int spaceship;
98  int units_built; // Number of units this player produced.
99  int units_killed; // Number of enemy units killed.
100  int units_lost; /* Number of own units that died,
101  * by combat or otherwise. */
102  int culture;
103  int game; // Total score you get in player dialog.
104 };
105 
106 struct player_ai {
108  QBitArray *handicaps;
109  enum ai_level skill_level; /* 0-10 value for save/load/display */
110  int fuzzy; // chance in 1000 to mis-decide
111  int expand; // percentage factor to value new cities
112  int science_cost; /* Cost in bulbs to get new tech, relative
113  to non-AI players (100: Equal cost) */
114  int warmth, frost; /* threat of global warming / nuclear winter */
116 
118 
119  std::vector<ai_trait> traits;
120 };
121 
122 /* Diplomatic states (how one player views another).
123  * (Some diplomatic states are "pacts" (mutual agreements), others aren't.)
124  *
125  * Adding to or reordering this array will break many things.
126  *
127  * Used in the network protocol.
128  */
129 #define SPECENUM_NAME diplstate_type
130 #define SPECENUM_VALUE0 DS_ARMISTICE
131 #define SPECENUM_VALUE0NAME N_("?diplomatic_state:Armistice")
132 #define SPECENUM_VALUE1 DS_WAR
133 #define SPECENUM_VALUE1NAME N_("?diplomatic_state:War")
134 #define SPECENUM_VALUE2 DS_CEASEFIRE
135 #define SPECENUM_VALUE2NAME N_("?diplomatic_state:Cease-fire")
136 #define SPECENUM_VALUE3 DS_PEACE
137 #define SPECENUM_VALUE3NAME N_("?diplomatic_state:Peace")
138 #define SPECENUM_VALUE4 DS_ALLIANCE
139 #define SPECENUM_VALUE4NAME N_("?diplomatic_state:Alliance")
140 #define SPECENUM_VALUE5 DS_NO_CONTACT
141 #define SPECENUM_VALUE5NAME N_("?diplomatic_state:Never met")
142 #define SPECENUM_VALUE6 DS_TEAM
143 #define SPECENUM_VALUE6NAME N_("?diplomatic_state:Team")
144 /* When adding or removing entries, note that first value
145  * of diplrel_other should be next to last diplstate_type */
146 #define SPECENUM_COUNT DS_LAST // leave this last
147 #include "specenum_gen.h"
148 
149 /* Other diplomatic relation properties.
150  *
151  * The first element here is numbered DS_LAST
152  *
153  * Used in the network protocol.
154  */
155 #define SPECENUM_NAME diplrel_other
156 #define SPECENUM_VALUE7 DRO_GIVES_SHARED_VISION
157 #define SPECENUM_VALUE7NAME N_("Gives shared vision")
158 #define SPECENUM_VALUE8 DRO_RECEIVES_SHARED_VISION
159 #define SPECENUM_VALUE8NAME N_("Receives shared vision")
160 #define SPECENUM_VALUE9 DRO_HOSTS_EMBASSY
161 #define SPECENUM_VALUE9NAME N_("Hosts embassy")
162 #define SPECENUM_VALUE10 DRO_HAS_EMBASSY
163 #define SPECENUM_VALUE10NAME N_("Has embassy")
164 #define SPECENUM_VALUE11 DRO_HOSTS_REAL_EMBASSY
165 #define SPECENUM_VALUE11NAME N_("Hosts real embassy")
166 #define SPECENUM_VALUE12 DRO_HAS_REAL_EMBASSY
167 #define SPECENUM_VALUE12NAME N_("Has real embassy")
168 #define SPECENUM_VALUE13 DRO_HAS_CASUS_BELLI
169 #define SPECENUM_VALUE13NAME N_("Has Casus Belli")
170 #define SPECENUM_VALUE14 DRO_PROVIDED_CASUS_BELLI
171 #define SPECENUM_VALUE14NAME N_("Provided Casus Belli")
172 #define SPECENUM_VALUE15 DRO_FOREIGN
173 #define SPECENUM_VALUE15NAME N_("Foreign")
174 #define SPECENUM_VALUE16 DRO_HAS_CONTACT
175 #define SPECENUM_VALUE16NAME N_("Has Contact")
176 #define SPECENUM_COUNT DRO_LAST
177 #include "specenum_gen.h"
178 
179 BV_DEFINE(bv_diplrel_all_reqs,
180  // Reserve a location for each possible DiplRel requirement.
181  ((DRO_LAST - 1) * 2) * REQ_RANGE_COUNT + 2);
182 
189 };
190 
191 // the following are for "pacts"
193  enum diplstate_type type; // this player's disposition towards other
194  enum diplstate_type max_state; // maximum treaty level ever had
195  int first_contact_turn; // turn we had first contact with this player
196  int turns_left; // until pact (e.g., cease-fire) ends
197  int has_reason_to_cancel; // 0: no, 1: this turn, 2: this or next turn
198  int contact_turns_left; // until contact ends
199 
200  int auto_cancel_turn; // used to avoid asymmetric turns_left
201 };
202 
203 /***************************************************************************
204  On the distinction between nations(formerly races), players, and users,
205  see doc/HACKING
206 ***************************************************************************/
207 
212 };
213 
215 
217  char *data;
218  int length;
219 #define MAX_ATTRIBUTE_BLOCK (256 * 1024) // largest attribute block
220 };
221 
222 struct ai_type;
223 
224 bool player_has_flag(const struct player *pplayer, enum plr_flag_id flag);
225 
226 #define is_human(plr) !player_has_flag((plr), PLRF_AI)
227 #define is_ai(plr) player_has_flag((plr), PLRF_AI)
228 #define set_as_human(plr) BV_CLR((plr)->flags, PLRF_AI)
229 #define set_as_ai(plr) BV_SET((plr)->flags, PLRF_AI)
230 
231 struct player {
232  struct player_slot *slot;
236  char ranked_username[MAX_LEN_NAME]; // the user who will be ranked
238  int user_turns; // number of turns this user has played
239  bool is_male;
240  struct government *government; // may be nullptr in pregame
241  struct government *target_government; // may be nullptr
243  struct team *team;
244  bool is_ready; // Did the player click "start" yet?
245  bool phase_done; // Has human player finished
246  bool ai_phase_done; // Has AI type finished
248  int turns_alive; /* Number of turns this player has spent alive;
249  * 0 when created, increment at the end of each turn */
250  bool is_alive;
251  bool is_winner;
253 
254  // Turn in which the player's revolution is over; see update_revolution.
256 
258 
259  bv_player real_embassy;
260  const struct player_diplstate **diplstates;
263  struct city_list *cities;
264  struct unit_list *units;
265  struct player_score score;
266  struct player_economic economic;
267 
269 
270  struct player_ai ai_common;
271  const struct ai_type *ai;
273 
274  bv_plr_flags flags;
275 
276  bool was_created; /* if the player was /created */
279  struct connection *current_conn; // non-null while handling packet
280  struct conn_list *connections; // will replace conn
281  bv_player gives_shared_vision; /* bitvector those that give you
282  * shared vision */
283  int wonders[B_LAST]; /* contains city id's, WONDER_NOT_BUILT,
284  * or WONDER_LOST */
285 
286  int wonder_build_turn[B_LAST]; /* turn numbers when wonders were built */
287 
288  QByteArray attribute_block;
290 
291  QBitArray *tile_known;
292 
293  struct rgbcolor *rgb;
294 
295  // Values currently in force.
297  // Values to be used next turn.
299 
300  int history; /* National level culture - does not include culture of
301  * individual cities. */
302 
303  union {
304  struct {
305  /* Only used in the server (./ai/ and ./server/). */
306  bv_pstatus status;
307 
308  bool got_first_city; /* used to give player init_buildings in first
309  * city. Once set, never becomes unset.
310  * (Previously 'capital'.) */
311 
313 
314  // Player can see inside his borders.
316 
317  bv_player really_gives_vision; /* takes into account that p3 may see
318  * what p1 has via p2 */
319 
320  bv_debug debug;
321 
322  struct adv_data *adv;
323 
324  void *ais[FREECIV_AI_MOD_LAST];
325 
326  // This user is allowed to take over the player.
328  /* This is set when a player is 'involved' in a delegation.
329  * There are two cases:
330  * - if delegate_to[] is set, it records the original owner, with
331  * 'username' temporarily holding the delegate's name;
332  * - otherwise, it's set when a delegate's original player is 'put
333  * aside' while the delegate user controls a delegated player.
334  * (In this case orig_username == username.) */
336 
337  int huts; // How many huts this player has found
338 
339  int bulbs_last_turn; // Number of bulbs researched last turn only.
341 
342  struct {
343  /* Only used at the client (the server is omniscient; ./client/). */
344 
345  /* Corresponds to the result of
346  (player:server:private_map[tile_index]:seen_count[vlayer] != 0). */
347  QBitArray *tile_vision[V_COUNT];
348  enum mood_type mood;
349 
351 
353 
354  int culture;
355 
358  bv_intel_visible visible;
360  };
361 };
362 
363 // Initialization and iteration
364 void player_slots_init();
366 void player_slots_free();
367 
369 struct player_slot *player_slot_next(struct player_slot *pslot);
370 
371 int player_slot_index(const struct player_slot *pslot);
372 struct player *player_slot_get_player(const struct player_slot *pslot);
373 bool player_slot_is_used(const struct player_slot *pslot);
374 struct player_slot *player_slot_by_number(int player_id);
376 
377 // General player accessor functions.
378 struct player *player_new(struct player_slot *pslot);
379 void player_set_color(struct player *pplayer,
380  const struct rgbcolor *prgbcolor);
381 void player_clear(struct player *pplayer, bool full);
382 void player_ruleset_close(struct player *pplayer);
383 void player_destroy(struct player *pplayer);
384 
385 int player_count();
386 int player_index(const struct player *pplayer);
387 int player_number(const struct player *pplayer);
388 struct player *player_by_number(const int player_id);
389 
390 const char *player_name(const struct player *pplayer);
391 struct player *player_by_name(const char *name);
392 struct player *player_by_name_prefix(const char *name,
393  enum m_pre_result *result);
394 struct player *player_by_user(const char *name);
395 
396 bool player_set_nation(struct player *pplayer, struct nation_type *pnation);
397 
398 bool player_has_embassy(const struct player *pplayer,
399  const struct player *pplayer2);
400 bool player_has_real_embassy(const struct player *pplayer,
401  const struct player *pplayer2);
402 bool player_has_embassy_from_effect(const struct player *pplayer,
403  const struct player *pplayer2);
404 
405 int player_age(const struct player *pplayer);
406 
407 bool player_can_trust_tile_has_no_units(const struct player *pplayer,
408  const struct tile *ptile);
409 bool can_player_see_hypotetic_units_at(const struct player *pplayer,
410  const struct tile *ptile);
411 bool can_player_see_unit(const struct player *pplayer,
412  const struct unit *punit);
413 bool can_player_see_unit_at(const struct player *pplayer,
414  const struct unit *punit,
415  const struct tile *ptile, bool is_transported);
416 
417 bool can_player_see_units_in_city(const struct player *pplayer,
418  const struct city *pcity);
419 bool can_player_see_city_internals(const struct player *pplayer,
420  const struct city *pcity);
421 bool player_can_see_city_externals(const struct player *pow_player,
422  const struct city *target_city);
423 
424 bool player_owns_city(const struct player *pplayer,
425  const struct city *pcity);
426 bool player_can_invade_tile(const struct player *pplayer,
427  const struct tile *ptile);
428 
429 struct city *player_city_by_number(const struct player *pplayer,
430  int city_id);
431 struct unit *player_unit_by_number(const struct player *pplayer,
432  int unit_id);
433 
434 bool player_in_city_map(const struct player *pplayer,
435  const struct tile *ptile);
436 bool player_knows_techs_with_flag(const struct player *pplayer,
437  enum tech_flag_id flag);
438 int num_known_tech_with_flag(const struct player *pplayer,
439  enum tech_flag_id flag);
440 int player_get_expected_income(const struct player *pplayer);
441 
442 struct city *player_primary_capital(const struct player *pplayer);
443 std::vector<city *> player_gov_centers(const struct player *pplayer);
444 
445 const char *love_text(const int love);
446 
447 enum diplstate_type cancel_pact_result(enum diplstate_type oldstate);
448 
449 struct player_diplstate *player_diplstate_get(const struct player *plr1,
450  const struct player *plr2);
451 enum dipl_reason pplayer_can_make_treaty(const struct player *p1,
452  const struct player *p2,
453  enum diplstate_type treaty);
454 enum dipl_reason pplayer_can_cancel_treaty(const struct player *p1,
455  const struct player *p2);
456 bool pplayers_at_war(const struct player *pplayer,
457  const struct player *pplayer2);
458 bool pplayers_allied(const struct player *pplayer,
459  const struct player *pplayer2);
460 bool pplayers_in_peace(const struct player *pplayer,
461  const struct player *pplayer2);
462 bool players_non_invade(const struct player *pplayer1,
463  const struct player *pplayer2);
464 bool pplayers_non_attack(const struct player *pplayer,
465  const struct player *pplayer2);
466 bool players_on_same_team(const struct player *pplayer1,
467  const struct player *pplayer2);
468 int player_in_territory(const struct player *pplayer,
469  const struct player *pplayer2);
470 
471 /**************************************************************************
472  Return TRUE iff player is any kind of barbarian
473 **************************************************************************/
474 static inline bool is_barbarian(const struct player *pplayer)
475 {
476  return pplayer->ai_common.barbarian_type != NOT_A_BARBARIAN;
477 }
478 
479 bool gives_shared_vision(const struct player *me, const struct player *them);
480 
481 void diplrel_mess_close();
482 bool is_diplrel_between(const struct player *player1,
483  const struct player *player2, int diplrel);
484 bool is_diplrel_to_other(const struct player *pplayer, int diplrel);
485 int diplrel_by_rule_name(const char *value);
486 const char *diplrel_rule_name(int value);
487 const char *diplrel_name_translation(int value);
488 
489 enum casus_belli_range casus_belli_range_for(const struct player *offender,
490  const struct player *tgt_plr,
491  const enum effect_type outcome,
492  const struct action *paction,
493  const struct tile *tgt_tile);
494 
495 bv_diplrel_all_reqs diplrel_req_contradicts(const struct requirement *req);
496 
497 int player_multiplier_value(const struct player *pplayer,
498  const struct multiplier *pmul);
499 int player_multiplier_effect_value(const struct player *pplayer,
500  const struct multiplier *pmul);
501 int player_multiplier_target_value(const struct player *pplayer,
502  const struct multiplier *pmul);
503 
504 // iterate over all player slots
505 #define player_slots_iterate(_pslot) \
506  if (player_slots_initialised()) { \
507  struct player_slot *_pslot = player_slot_first(); \
508  for (; nullptr != _pslot; _pslot = player_slot_next(_pslot)) {
509 #define player_slots_iterate_end \
510  } \
511  }
512 
513 // iterate over all players, which are used at the moment
514 #define players_iterate(_pplayer) \
515  player_slots_iterate(_pslot##_pplayer) \
516  { \
517  struct player *_pplayer = player_slot_get_player(_pslot##_pplayer); \
518  if (_pplayer != nullptr) {
519 
520 #define players_iterate_end \
521  } \
522  } \
523  player_slots_iterate_end;
524 
525 // iterate over all players, which are used at the moment and are alive
526 #define players_iterate_alive(_pplayer) \
527  players_iterate(_pplayer) \
528  { \
529  if (!_pplayer->is_alive) { \
530  continue; \
531  }
532 #define players_iterate_alive_end \
533  } \
534  players_iterate_end;
535 
536 // get 'struct player_list' and related functions:
537 #define SPECLIST_TAG player
538 #define SPECLIST_TYPE struct player
539 #include "speclist.h"
540 
541 #define player_list_iterate(playerlist, pplayer) \
542  TYPED_LIST_ITERATE(struct player, playerlist, pplayer)
543 #define player_list_iterate_end LIST_ITERATE_END
544 
545 // ai love values should be in range [-MAX_AI_LOVE..MAX_AI_LOVE]
546 #define MAX_AI_LOVE 1000
547 
548 // User functions.
549 bool is_valid_username(const char *name);
550 
551 #define ai_level_cmd(_level_) ai_level_name(_level_)
552 bool is_settable_ai_level(enum ai_level level);
553 
554 void *player_ai_data(const struct player *pplayer, const struct ai_type *ai);
555 void player_set_ai_data(struct player *pplayer, const struct ai_type *ai,
556  void *data);
557 
558 static inline bool player_is_cpuhog(const struct player *pplayer)
559 {
560  Q_UNUSED(pplayer)
561  /* You have to make code change here to enable cpuhog AI. There is no even
562  * configure option to change this. That's intentional.
563  * Enabling them causes game to proceed differently, and for reproducing
564  * reported bugs we want to know if this has been changed. People are more
565  * likely to report that they have made code changes than remembering some
566  * specific configure option they happened to pass to build this time - or
567  * even knowing what configure options somebody else used when building
568  * freeciv for them. */
569  return false;
570 }
#define SP_MAX
Definition: fc_types.h:324
#define MAX_NUM_PLAYER_SLOTS
Definition: fc_types.h:24
#define MAX_NUM_MULTIPLIERS
Definition: fc_types.h:49
#define MAX_LEN_NAME
Definition: fc_types.h:61
#define B_LAST
Definition: improvement.h:33
const char * name
Definition: inputfile.cpp:118
bool is_settable_ai_level(enum ai_level level)
Return is AI can be set to given level.
Definition: player.cpp:1825
bool player_can_invade_tile(const struct player *pplayer, const struct tile *ptile)
Return TRUE iff the player can invade a particular tile (linked with borders and diplomatic states).
Definition: player.cpp:236
bool player_knows_techs_with_flag(const struct player *pplayer, enum tech_flag_id flag)
Returns TRUE iff the player knows at least one tech which has the given flag.
Definition: player.cpp:1238
int player_multiplier_effect_value(const struct player *pplayer, const struct multiplier *pmul)
Return the multiplier value currently in effect for pplayer, scaled from display units to the units u...
Definition: player.cpp:1867
struct unit * player_unit_by_number(const struct player *pplayer, int unit_id)
If the specified player owns the unit with the specified id, return pointer to the unit struct.
Definition: player.cpp:1139
struct player_slot * player_slot_by_number(int player_id)
Return the possibly unused and uninitialized player slot.
Definition: player.cpp:410
dipl_reason
Definition: player.h:183
@ DIPL_SENATE_BLOCKING
Definition: player.h:186
@ DIPL_ALLIANCE_PROBLEM_THEM
Definition: player.h:188
@ DIPL_ALLIANCE_PROBLEM_US
Definition: player.h:187
@ DIPL_OK
Definition: player.h:184
@ DIPL_ERROR
Definition: player.h:185
bool player_slot_is_used(const struct player_slot *pslot)
Returns TRUE is this slot is "used" i.e.
Definition: player.cpp:395
bv_diplrel_all_reqs diplrel_req_contradicts(const struct requirement *req)
Get the DiplRel requirements that are known to contradict the specified DiplRel requirement.
Definition: player.cpp:1714
struct player * player_by_name(const char *name)
Find player by given name.
Definition: player.cpp:800
int num_known_tech_with_flag(const struct player *pplayer, enum tech_flag_id flag)
Returns the number of techs the player has researched which has this flag.
Definition: player.cpp:1181
bool is_valid_username(const char *name)
Returns whether this is a valid username.
Definition: player.cpp:1793
int player_multiplier_target_value(const struct player *pplayer, const struct multiplier *pmul)
Return the player's target value for a multiplier (which may be different from the value currently in...
Definition: player.cpp:1879
enum casus_belli_range casus_belli_range_for(const struct player *offender, const struct player *tgt_plr, const enum effect_type outcome, const struct action *paction, const struct tile *tgt_tile)
Return the Casus Belli range when offender performs paction to tgt_plr at tgt_tile and the outcome is...
Definition: player.cpp:1551
int diplrel_by_rule_name(const char *value)
Return the diplomatic relation that has the given (untranslated) rule name.
Definition: player.cpp:1492
bool player_in_city_map(const struct player *pplayer, const struct tile *ptile)
Return true iff x,y is inside any of the player's city map.
Definition: player.cpp:1159
bool players_on_same_team(const struct player *pplayer1, const struct player *pplayer2)
Return TRUE if players are in the same team.
Definition: player.cpp:1405
bool player_slots_initialised()
Return whether player slots are already initialized.
Definition: player.cpp:341
bool can_player_see_unit_at(const struct player *pplayer, const struct unit *punit, const struct tile *ptile, bool is_transported)
Checks if a unit can be seen by pplayer at (x,y).
Definition: player.cpp:959
enum diplstate_type cancel_pact_result(enum diplstate_type oldstate)
Return the diplomatic state that cancelling a pact will end up in.
Definition: player.cpp:65
int player_multiplier_value(const struct player *pplayer, const struct multiplier *pmul)
Return the multiplier value currently in effect for pplayer (in display units).
Definition: player.cpp:1856
void * player_ai_data(const struct player *pplayer, const struct ai_type *ai)
Return pointer to ai data of given player and ai type.
Definition: player.cpp:1838
struct player * player_by_number(const int player_id)
Return struct player pointer for the given player index.
Definition: player.cpp:768
const char * diplrel_name_translation(int value)
Return the translated name of the given diplomatic relation.
Definition: player.cpp:1538
int player_get_expected_income(const struct player *pplayer)
Return the expected net income of the player this turn.
Definition: player.cpp:1194
int player_number(const struct player *pplayer)
Return the player index/number/id.
Definition: player.cpp:756
enum dipl_reason pplayer_can_make_treaty(const struct player *p1, const struct player *p2, enum diplstate_type treaty)
Returns true iff p1 can make given treaty with p2.
Definition: player.cpp:150
struct player * player_by_name_prefix(const char *name, enum m_pre_result *result)
Find player by its name prefix.
Definition: player.cpp:841
bool is_diplrel_to_other(const struct player *pplayer, int diplrel)
Return TRUE iff pplayer has the diplomatic relation to any living player.
Definition: player.cpp:1471
static bool is_barbarian(const struct player *pplayer)
Definition: player.h:474
bool can_player_see_unit(const struct player *pplayer, const struct unit *punit)
Checks if a unit can be seen by pplayer at its current location.
Definition: player.cpp:1016
int player_count()
Return the number of players.
Definition: player.cpp:739
bool pplayers_at_war(const struct player *pplayer, const struct player *pplayer2)
Returns true iff players can attack each other.
Definition: player.cpp:1317
std::vector< city * > player_gov_centers(const struct player *pplayer)
Locate the player's government centers.
Definition: player.cpp:1264
BV_DEFINE(bv_pstatus, PSTATUS_COUNT)
void player_set_ai_data(struct player *pplayer, const struct ai_type *ai, void *data)
Attach ai data to player.
Definition: player.cpp:1846
const char * love_text(const int love)
Return a text describing an AI's love for you.
Definition: player.cpp:1283
void player_ruleset_close(struct player *pplayer)
Clear the ruleset dependent pointers of the player structure.
Definition: player.cpp:673
void player_clear(struct player *pplayer, bool full)
Clear all player data.
Definition: player.cpp:615
int player_slot_index(const struct player_slot *pslot)
Returns the index of the player slot.
Definition: player.cpp:373
struct player_slot * player_slot_first()
Returns the first player slot.
Definition: player.cpp:358
bool player_has_flag(const struct player *pplayer, enum plr_flag_id flag)
Check if player has given flag.
Definition: player.cpp:1888
bool player_has_real_embassy(const struct player *pplayer, const struct player *pplayer2)
Returns whether pplayer has a real embassy with pplayer2, established from a diplomat,...
Definition: player.cpp:206
void player_set_color(struct player *pplayer, const struct rgbcolor *prgbcolor)
Set the player's color.
Definition: player.cpp:598
int player_slot_max_used_number()
Return the highest used player slot index.
Definition: player.cpp:423
void player_slots_free()
Remove all player slots.
Definition: player.cpp:346
int player_index(const struct player *pplayer)
Return the player index.
Definition: player.cpp:748
void diplrel_mess_close()
Free diplrel_mess.
Definition: player.cpp:1701
struct city * player_primary_capital(const struct player *pplayer)
Locate the player's primary capital city, (nullptr Otherwise)
Definition: player.cpp:1247
int player_in_territory(const struct player *pplayer, const struct player *pplayer2)
Return the number of pplayer2's visible units in pplayer's territory, from the point of view of pplay...
Definition: player.cpp:1761
struct city * player_city_by_number(const struct player *pplayer, int city_id)
If the specified player owns the city with the specified id, return pointer to the city struct.
Definition: player.cpp:1113
bool is_diplrel_between(const struct player *player1, const struct player *player2, int diplrel)
Return TRUE iff player1 has the diplomatic relation to player2.
Definition: player.cpp:1422
plrcolor_mode
Definition: player.h:33
@ PLRCOL_PLR_RANDOM
Definition: player.h:35
@ PLRCOL_PLR_SET
Definition: player.h:36
@ PLRCOL_NATION_ORDER
Definition: player.h:38
@ PLRCOL_TEAM_ORDER
Definition: player.h:37
@ PLRCOL_PLR_ORDER
Definition: player.h:34
static bool player_is_cpuhog(const struct player *pplayer)
Definition: player.h:558
struct player * player_slot_get_player(const struct player_slot *pslot)
Returns the team corresponding to the slot.
Definition: player.cpp:384
bool player_set_nation(struct player *pplayer, struct nation_type *pnation)
Set the player's nation to the given nation (may be nullptr).
Definition: player.cpp:780
void player_slots_init()
Initialise all player slots (= pointer to player pointers).
Definition: player.cpp:324
bool player_can_see_city_externals(const struct player *pow_player, const struct city *target_city)
Returns TRUE iff pow_player can see externally visible features of target_city.
Definition: player.cpp:1074
const char * player_name(const struct player *pplayer)
Return the leader name of the player.
Definition: player.cpp:816
int player_age(const struct player *pplayer)
"Age" of the player: number of turns spent alive since created.
Definition: player.cpp:876
enum dipl_reason pplayer_can_cancel_treaty(const struct player *p1, const struct player *p2)
The senate may not allow you to break the treaty.
Definition: player.cpp:90
bool pplayers_allied(const struct player *pplayer, const struct player *pplayer2)
Returns true iff players are allied.
Definition: player.cpp:1334
bool can_player_see_hypotetic_units_at(const struct player *pplayer, const struct tile *ptile)
Check if pplayer could see all units on ptile if it had units.
Definition: player.cpp:917
bool player_has_embassy_from_effect(const struct player *pplayer, const struct player *pplayer2)
Returns whether pplayer has got embassy with pplayer2 thanks to an effect (e.g.
Definition: player.cpp:216
bool players_non_invade(const struct player *pplayer1, const struct player *pplayer2)
Returns TRUE if players can't enter each others' territory.
Definition: player.cpp:1371
bool pplayers_non_attack(const struct player *pplayer, const struct player *pplayer2)
Returns true iff players have peace, cease-fire, or armistice.
Definition: player.cpp:1388
bool can_player_see_units_in_city(const struct player *pplayer, const struct city *pcity)
Return TRUE iff the player can see units in the city.
Definition: player.cpp:1045
struct player_slot * player_slot_next(struct player_slot *pslot)
Returns the next slot.
Definition: player.cpp:363
bool can_player_see_city_internals(const struct player *pplayer, const struct city *pcity)
Return TRUE iff the player can see the city's internals.
Definition: player.cpp:1060
bool player_can_trust_tile_has_no_units(const struct player *pplayer, const struct tile *ptile)
Returns TRUE iff pplayer can trust that ptile really has no units when it looks empty.
Definition: player.cpp:889
struct player * player_new(struct player_slot *pslot)
Creates a new player for the slot.
Definition: player.cpp:442
player_debug_types
Definition: player.h:208
@ PLAYER_DEBUG_LAST
Definition: player.h:211
@ PLAYER_DEBUG_DIPLOMACY
Definition: player.h:209
@ PLAYER_DEBUG_TECH
Definition: player.h:210
bool player_has_embassy(const struct player *pplayer, const struct player *pplayer2)
Check if pplayer has an embassy with pplayer2.
Definition: player.cpp:195
bool gives_shared_vision(const struct player *me, const struct player *them)
Return TRUE iff the player me gives shared vision to player them.
Definition: player.cpp:1414
bool player_owns_city(const struct player *pplayer, const struct city *pcity)
Return TRUE iff the given player owns the city.
Definition: player.cpp:227
void player_destroy(struct player *pplayer)
Destroys and remove a player from the game.
Definition: player.cpp:684
const char * diplrel_rule_name(int value)
Return the (untranslated) rule name of the given diplomatic relation.
Definition: player.cpp:1526
struct player * player_by_user(const char *name)
Find player by its user name (not player/leader name)
Definition: player.cpp:860
bool pplayers_in_peace(const struct player *pplayer, const struct player *pplayer2)
Returns true iff players are allied or at peace.
Definition: player.cpp:1355
struct player_diplstate * player_diplstate_get(const struct player *plr1, const struct player *plr2)
Returns diplomatic state type between two players.
Definition: player.cpp:288
struct setting_list * level[OLEVELS_NUM]
Definition: settings.cpp:167
m_pre_result
Definition: shared.h:152
Definition: ai.h:42
Definition: city.h:291
enum ai_level skill_level
Definition: player.h:109
std::vector< ai_trait > traits
Definition: player.h:119
enum barbarian_type barbarian_type
Definition: player.h:115
int warmth
Definition: player.h:114
int science_cost
Definition: player.h:112
int love[MAX_NUM_PLAYER_SLOTS]
Definition: player.h:117
int expand
Definition: player.h:111
int fuzzy
Definition: player.h:110
int maxbuycost
Definition: player.h:107
int frost
Definition: player.h:114
QBitArray * handicaps
Definition: player.h:108
int has_reason_to_cancel
Definition: player.h:197
int contact_turns_left
Definition: player.h:198
int auto_cancel_turn
Definition: player.h:200
int first_contact_turn
Definition: player.h:195
enum diplstate_type max_state
Definition: player.h:194
enum diplstate_type type
Definition: player.h:193
int infra_points
Definition: player.h:57
int units_killed
Definition: player.h:99
int landarea
Definition: player.h:85
int food
Definition: player.h:96
int mfg
Definition: player.h:95
int all_wonders
Definition: player.h:90
int population
Definition: player.h:87
int improvements
Definition: player.h:89
int goldout
Definition: player.h:84
int pollution
Definition: player.h:92
int wonders
Definition: player.h:81
int settledarea
Definition: player.h:86
int specialists[SP_MAX]
Definition: player.h:80
int units_lost
Definition: player.h:100
int angry
Definition: player.h:79
int techout
Definition: player.h:83
int game
Definition: player.h:103
int units
Definition: player.h:91
int units_built
Definition: player.h:98
int content
Definition: player.h:77
int happy
Definition: player.h:76
int spaceship
Definition: player.h:97
int culture
Definition: player.h:102
int unhappy
Definition: player.h:78
int cities
Definition: player.h:88
int bnp
Definition: player.h:94
int literacy
Definition: player.h:93
int techs
Definition: player.h:82
Definition: player.h:231
struct city_list * cities
Definition: player.h:263
bv_intel_visible visible
Which information is actually visible to the client (and can thus be trusted)
Definition: player.h:358
int bulbs_last_turn
Definition: player.h:339
bool random_name
Definition: player.h:277
QByteArray attribute_block
Definition: player.h:288
struct player_ai ai_common
Definition: player.h:270
bv_plr_flags flags
Definition: player.h:274
bv_pstatus status
Definition: player.h:306
struct player::@65::@68 client
int primary_capital_id
Definition: player.h:257
bool is_male
Definition: player.h:239
bool got_first_city
Definition: player.h:308
int wonders[B_LAST]
Definition: player.h:283
const struct player_diplstate ** diplstates
Definition: player.h:260
bool unassigned_ranked
Definition: player.h:237
struct government * target_government
Definition: player.h:241
char username[MAX_LEN_NAME]
Definition: player.h:234
bool is_winner
Definition: player.h:251
bool is_connected
Definition: player.h:278
int revolution_finishes
Definition: player.h:255
void * ais[FREECIV_AI_MOD_LAST]
Definition: player.h:324
struct player::@65::@67 server
int nturns_idle
Definition: player.h:247
struct government * government
Definition: player.h:240
struct connection * current_conn
Definition: player.h:279
struct team * team
Definition: player.h:243
char * savegame_ai_type_name
Definition: player.h:272
int turns_alive
Definition: player.h:248
bool was_created
Definition: player.h:276
int tech_upkeep
Definition: player.h:350
QByteArray attribute_block_buffer
Definition: player.h:289
const struct ai_type * ai
Definition: player.h:271
struct unit_list * units
Definition: player.h:264
QBitArray * tile_vision[V_COUNT]
Definition: player.h:347
int wonder_build_turn[B_LAST]
Definition: player.h:286
char ranked_username[MAX_LEN_NAME]
Definition: player.h:236
struct conn_list * connections
Definition: player.h:280
int huts
Definition: player.h:337
bool is_alive
Definition: player.h:250
bv_player real_embassy
Definition: player.h:259
struct player_economic economic
Definition: player.h:266
int culture
Definition: player.h:354
char delegate_to[MAX_LEN_NAME]
Definition: player.h:327
struct player_spaceship spaceship
Definition: player.h:268
char name[MAX_LEN_NAME]
Definition: player.h:233
bv_player gives_shared_vision
Definition: player.h:281
enum mood_type mood
Definition: player.h:348
struct player_score score
Definition: player.h:265
int multipliers[MAX_NUM_MULTIPLIERS]
Definition: player.h:296
struct player_tile * private_map
Definition: player.h:312
bv_player really_gives_vision
Definition: player.h:317
struct nation_type * nation
Definition: player.h:242
QBitArray * tile_known
Definition: player.h:291
bool color_changeable
Definition: player.h:352
int music_style
Definition: player.h:262
struct nation_style * style
Definition: player.h:261
int multipliers_target[MAX_NUM_MULTIPLIERS]
Definition: player.h:298
bool border_vision
Definition: player.h:315
bool phase_done
Definition: player.h:245
struct adv_data * adv
Definition: player.h:322
struct player_slot * slot
Definition: player.h:232
bool is_ready
Definition: player.h:244
int history
Definition: player.h:300
int user_turns
Definition: player.h:238
bv_debug debug
Definition: player.h:320
char orig_username[MAX_LEN_NAME]
Definition: player.h:335
int last_war_action
Definition: player.h:252
struct rgbcolor * rgb
Definition: player.h:293
bool unassigned_user
Definition: player.h:235
bool ai_phase_done
Definition: player.h:246
Definition: team.cpp:35
Definition: tile.h:42
Definition: unit.h:134