1 /**********************************************************************
2  Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
3    This program is free software; you can redistribute it and/or modify
4    it under the terms of the GNU General Public License as published by
5    the Free Software Foundation; either version 2, or (at your option)
6    any later version.
7 
8    This program is distributed in the hope that it will be useful,
9    but WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11    GNU General Public License for more details.
12 ***********************************************************************/
13 #ifndef FC__GAME_H
14 #define FC__GAME_H
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif /* __cplusplus */
19 
20 #include <time.h>	/* time_t */
21 
22 #ifdef FREECIV_HAVE_SYS_TIME_H
23 #include <sys/time.h>
24 #endif
25 
26 /* utility */
27 #include "fcthread.h"
28 #include "randseed.h"
29 #include "shared.h"
30 #include "timing.h"
31 
32 /* common */
33 #include "connection.h"		/* struct conn_list */
34 #include "fc_types.h"
35 #include "map_types.h"
36 #include "player.h"
37 #include "packets.h"
38 
39 enum debug_globals {
40   DEBUG_FERRIES,
41   DEBUG_LAST
42 };
43 
44 enum city_names_mode {
45   CNM_NO_RESTRICTIONS = 0,
46   CNM_PLAYER_UNIQUE,
47   CNM_GLOBAL_UNIQUE,
48   CNM_NO_STEALING
49 };
50 
51 enum barbarians_rate {
52   BARBS_DISABLED = 0,
53   BARBS_HUTS_ONLY,
54   BARBS_NORMAL,
55   BARBS_FREQUENT,
56   BARBS_HORDES
57 };
58 
59 enum autosave_type {
60   AS_TURN = 0,
61   AS_GAME_OVER,
62   AS_QUITIDLE,
63   AS_INTERRUPT,
64   AS_TIMER
65 };
66 
67 enum scorelog_level {
68   SL_ALL = 0,
69   SL_HUMANS
70 };
71 
72 struct user_flag
73 {
74   char *name;
75   char *helptxt;
76 };
77 
78 /* The number of turns that the first user needs to be attached to a
79  * player for that user to be ranked as that player */
80 #define TURNS_NEEDED_TO_RANK 10
81 
82 struct civ_game {
83   struct packet_ruleset_control control;
84   char *ruleset_summary;
85   char *ruleset_description;
86   struct packet_scenario_info scenario;
87   struct packet_scenario_description scenario_desc;
88   struct packet_game_info info;
89   struct packet_timeout_info tinfo;
90 
91   struct government *default_government; /* may be overridden by nation */
92   struct government *government_during_revolution;
93 
94   struct conn_list *all_connections;   /* including not yet established */
95   struct conn_list *est_connections;   /* all established client conns */
96   struct conn_list *glob_observers;    /* global observers */
97 
98   struct veteran_system *veteran; /* veteran system */
99 
100   struct rgbcolor *plr_bg_color;
101 
102   struct {
103     /* Items given to all players at game start.
104      * Client gets this info for help purposes only. */
105     int global_init_techs[MAX_NUM_TECH_LIST];
106     int global_init_buildings[MAX_NUM_BUILDING_LIST];
107   } rgame;
108 
109   struct civ_map map;
110 
111   union {
112     struct {
113       /* Only used at the client (./client/). */
114 
115       bool ruleset_init;
116       bool ruleset_ready;
117     } client;
118 
119     struct {
120       /* Only used in the server (./ai/ and ./server/). */
121 
122       /* Defined in the ruleset. */
123 
124       /* Game settings & other data. */
125 
126       enum city_names_mode allowed_city_names;
127       enum plrcolor_mode plrcolormode;
128       int aqueductloss;
129       bool auto_ai_toggle;
130       bool autoattack;
131       int autoupgrade_veteran_loss;
132       enum barbarians_rate barbarianrate;
133       int base_incite_cost;
134       int civilwarsize;
135       int conquercost;
136       int contactturns;
137       int diplchance;
138       int diplbulbcost;
139       int diplgoldcost;
140       int dispersion;
141       int end_turn;
142       bool endspaceship;
143       bool fixedlength;
144       bool foggedborders;
145       int freecost;
146       int incite_improvement_factor;
147       int incite_total_factor;
148       int incite_unit_factor;
149       int init_vis_radius_sq;
150       int kick_time;
151       int killunhomed;    /* slowly killing unhomed units */
152       int maxconnectionsperhost;
153       int max_players;
154       char nationset[MAX_LEN_NAME];
155       int mgr_distance;
156       bool mgr_foodneeded;
157       int mgr_nationchance;
158       int mgr_turninterval;
159       int mgr_worldchance;
160       bool migration;
161       enum trait_dist_mode trait_dist;
162       int min_players;
163       bool natural_city_names;
164       int netwait;
165       int num_phases;
166       int occupychance;
167       int onsetbarbarian;
168       int pingtime;
169       int pingtimeout;
170       int ransom_gold;
171       int razechance;
172       unsigned revealmap;
173       int revolution_length;
174       int save_compress_level;
175       enum fz_method save_compress_type;
176       int save_nturns;
177       int save_frequency;
178       unsigned autosaves; /* FIXME: char would be enough, but current settings.c code wants to
179                              write sizeof(unsigned) bytes */
180       bool savepalace;
181       bool homecaughtunits;
182       char start_units[MAX_LEN_STARTUNIT];
183       bool start_city;
184       int start_year;
185       int techloss_restore;
186       int techlost_donor;
187       int techlost_recv;
188       int tcptimeout;
189       int techpenalty;
190       bool turnblock;
191       int unitwaittime;   /* minimal time between two movements of a unit */
192       int upgrade_veteran_loss;
193       bool vision_reveal_tiles;
194 
195       bool debug[DEBUG_LAST];
196       int timeoutint;     /* increase timeout every N turns... */
197       int timeoutinc;     /* ... by this amount ... */
198       int timeoutincmult; /* ... and multiply timeoutinc by this amount ... */
199       int timeoutintinc;  /* ... and increase timeoutint by this amount */
200       int timeoutcounter; /* timeoutcounter - timeoutint = turns to next inc. */
201       int timeoutaddenemymove; /* minimum timeout after an enemy move is seen */
202 
203       time_t last_ping;
204       struct timer *phase_timer; /* Time since seconds_to_phase_done was set. */
205       /* The game.info.phase_mode value indicates the phase mode currently in
206        * use. The "stored" value is a value the player can change; it won't
207        * take effect until the next turn. */
208       int phase_mode_stored;
209       struct timer *save_timer;
210       float turn_change_time;
211       char connectmsg[MAX_LEN_MSG];
212       char save_name[MAX_LEN_NAME];
213       bool scorelog;
214       enum scorelog_level scoreloglevel;
215       char scorefile[MAX_LEN_NAME];
216       int scoreturn;    /* next make_history_report() */
217       randseed seed_setting;
218       randseed seed;
219 
220       bool global_warming;
221       bool nuclear_winter;
222 
223       bool fogofwar_old; /* as the fog_of_war bit get changed by setting
224                           * the server we need to remember the old setting */
225       bool last_updated_year; /* last_updated is still counted as year in this
226                                * game. */
227       char rulesetdir[MAX_LEN_NAME];
228       char demography[MAX_LEN_DEMOGRAPHY];
229       char allow_take[MAX_LEN_ALLOW_TAKE];
230 
231       bool settings_gamestart_valid; /* Valid settings from the game start. */
232 
233       struct rgbcolor_list *plr_colors;
234 
235       struct {
236         int turns;
237         int max_size;
238         bool chat;
239         bool info;
240       } event_cache;
241 
242       /* used by the map editor to control game_save. */
243       struct {
244         bool save_known; /* loading will just reveal the squares around
245                           * cities and units */
246         bool save_starts; /* start positions will be auto generated */
247         bool save_private_map; /* FoW map; will be created if not saved */
248       } save_options;
249 
250       struct {
251         bool user_message_set;
252         char user_message[256];
253         char type[20];
254       } meta_info;
255 
256       struct {
257         fc_mutex city_list;
258       } mutexes;
259 
260       struct trait_limits default_traits[TRAIT_COUNT];
261 
262       struct {
263         char *description_file;
264         char *nationlist;
265         char **embedded_nations;
266         size_t embedded_nations_count;
267         const char **allowed_govs;
268         char **nc_agovs;
269         size_t ag_count;
270         const char **allowed_terrains;
271         char **nc_aterrs;
272         size_t at_count;
273         const char **allowed_styles;
274         char **nc_astyles;
275         size_t as_count;
276         int named_teams;
277       } ruledit;
278     } server;
279   };
280 
281   struct {
282     /* Function to be called in game_remove_unit when a unit is deleted. */
283     void (*unit_deallocate)(int unit_id);
284   } callbacks;
285 };
286 
287 extern bool am_i_server;
288 
289 /**************************************************************************
290   Is the program type server?
291 **************************************************************************/
is_server(void)292 static inline bool is_server(void)
293 {
294   return am_i_server;
295 }
296 
297 void i_am_server(void);
298 void i_am_client(void);
299 
300 void game_init(void);
301 void game_map_init(void);
302 void game_free(void);
303 void game_reset(void);
304 
305 void game_ruleset_init(void);
306 void game_ruleset_free(void);
307 
308 int civ_population(const struct player *pplayer);
309 struct city *game_city_by_name(const char *name);
310 struct city *game_city_by_number(int id);
311 
312 struct unit *game_unit_by_number(int id);
313 
314 void game_remove_unit(struct unit *punit);
315 void game_remove_city(struct city *pcity);
316 void initialize_globals(void);
317 
318 bool is_player_phase(const struct player *pplayer, int phase);
319 
320 const char *population_to_text(int thousand_citizen);
321 
322 int generate_save_name(const char *format, char *buf, int buflen,
323                        const char *reason);
324 
325 void user_flag_init(struct user_flag *flag);
326 void user_flag_free(struct user_flag *flag);
327 
328 int current_turn_timeout(void);
329 
330 extern struct civ_game game;
331 
332 #define GAME_DEFAULT_SEED        0
333 #define GAME_MIN_SEED            0
334 #define GAME_MAX_SEED            (MAX_UINT32 >> 1)
335 
336 #define GAME_DEFAULT_GOLD        50
337 #define GAME_MIN_GOLD            0
338 #define GAME_MAX_GOLD            50000
339 
340 #define GAME_DEFAULT_START_UNITS  "ccwwx"
341 #define GAME_DEFAULT_START_CITY  FALSE
342 
343 #define GAME_DEFAULT_DISPERSION  0
344 #define GAME_MIN_DISPERSION      0
345 #define GAME_MAX_DISPERSION      10
346 
347 #define GAME_DEFAULT_TECHLEVEL   0
348 #define GAME_MIN_TECHLEVEL       0
349 #define GAME_MAX_TECHLEVEL       100
350 
351 #define GAME_DEFAULT_ANGRYCITIZEN TRUE
352 
353 #define GAME_DEFAULT_END_TURN    5000
354 #define GAME_MIN_END_TURN        0
355 #define GAME_MAX_END_TURN        32767
356 
357 #define GAME_DEFAULT_MIN_PLAYERS     1
358 #define GAME_MIN_MIN_PLAYERS         0
359 #define GAME_MAX_MIN_PLAYERS         MAX_NUM_PLAYERS
360 
361 #define GAME_DEFAULT_MAX_PLAYERS     MAX_NUM_PLAYERS
362 #define GAME_MIN_MAX_PLAYERS         1
363 #define GAME_MAX_MAX_PLAYERS         MAX_NUM_PLAYERS
364 
365 #define GAME_DEFAULT_AIFILL          5
366 #define GAME_MIN_AIFILL              0
367 #define GAME_MAX_AIFILL              GAME_MAX_MAX_PLAYERS
368 
369 #define GAME_DEFAULT_NATIONSET       ""
370 
371 #define GAME_DEFAULT_FOODBOX         100
372 #define GAME_MIN_FOODBOX             1
373 #define GAME_MAX_FOODBOX             10000
374 
375 #define GAME_DEFAULT_SHIELDBOX 100
376 #define GAME_MIN_SHIELDBOX 1
377 #define GAME_MAX_SHIELDBOX 10000
378 
379 #define GAME_DEFAULT_SCIENCEBOX 100
380 #define GAME_MIN_SCIENCEBOX 1
381 #define GAME_MAX_SCIENCEBOX 10000
382 
383 #define GAME_DEFAULT_DIPLBULBCOST    0
384 #define GAME_MIN_DIPLBULBCOST        0
385 #define GAME_MAX_DIPLBULBCOST        100
386 
387 #define GAME_DEFAULT_DIPLGOLDCOST    0
388 #define GAME_MIN_DIPLGOLDCOST        0
389 #define GAME_MAX_DIPLGOLDCOST        100
390 
391 #define GAME_DEFAULT_FOGOFWAR        TRUE
392 
393 #define GAME_DEFAULT_FOGGEDBORDERS   FALSE
394 
395 #define GAME_DEFAULT_GLOBAL_WARMING  TRUE
396 #define GAME_DEFAULT_NUCLEAR_WINTER  TRUE
397 
398 #define GAME_DEFAULT_BORDERS         BORDERS_ENABLED
399 
400 #define GAME_DEFAULT_HAPPYBORDERS    HB_NATIONAL
401 
402 #define GAME_DEFAULT_DIPLOMACY       DIPLO_FOR_ALL
403 
404 #define GAME_DEFAULT_DIPLCHANCE      80
405 #define GAME_MIN_DIPLCHANCE          40
406 #define GAME_MAX_DIPLCHANCE          100
407 
408 #define GAME_DEFAULT_FREECOST        0
409 #define GAME_MIN_FREECOST            0
410 #define GAME_MAX_FREECOST            100
411 
412 #define GAME_DEFAULT_CONQUERCOST     0
413 #define GAME_MIN_CONQUERCOST         0
414 #define GAME_MAX_CONQUERCOST         100
415 
416 #define GAME_DEFAULT_TECHLOSSFG      -1
417 #define GAME_MIN_TECHLOSSFG          -1
418 #define GAME_MAX_TECHLOSSFG          200
419 
420 #define GAME_DEFAULT_TECHLOSSREST    50
421 #define GAME_MIN_TECHLOSSREST        -1
422 #define GAME_MAX_TECHLOSSREST        100
423 
424 #define GAME_DEFAULT_CITYMINDIST     2
425 #define GAME_MIN_CITYMINDIST         1
426 #define GAME_MAX_CITYMINDIST         11
427 
428 #define GAME_DEFAULT_CIVILWARSIZE    10
429 #define GAME_MIN_CIVILWARSIZE        2 /* can't split an empire of 1 city */
430 #define GAME_MAX_CIVILWARSIZE        1000
431 
432 #define GAME_DEFAULT_RESTRICTINFRA   FALSE
433 #define GAME_DEFAULT_UNRPROTECTS     TRUE
434 
435 #define GAME_DEFAULT_CONTACTTURNS    20
436 #define GAME_MIN_CONTACTTURNS        0
437 #define GAME_MAX_CONTACTTURNS        100
438 
439 #define GAME_DEFAULT_CELEBRATESIZE    3
440 
441 #define GAME_DEFAULT_RAPTUREDELAY    1
442 #define GAME_MIN_RAPTUREDELAY        1
443 #define GAME_MAX_RAPTUREDELAY        99 /* 99 practicaly disables rapturing */
444 
445 #define GAME_DEFAULT_DISASTERS       10
446 #define GAME_MIN_DISASTERS           0
447 #define GAME_MAX_DISASTERS           1000
448 
449 #define GAME_DEFAULT_TRAIT_DIST_MODE TDM_FIXED
450 
451 #define GAME_DEFAULT_SAVEPALACE      TRUE
452 
453 #define GAME_DEFAULT_HOMECAUGHTUNITS TRUE
454 
455 #define GAME_DEFAULT_NATURALCITYNAMES TRUE
456 
457 #define GAME_DEFAULT_MIGRATION        FALSE
458 
459 #define GAME_DEFAULT_MGR_TURNINTERVAL 5
460 #define GAME_MIN_MGR_TURNINTERVAL     1
461 #define GAME_MAX_MGR_TURNINTERVAL     100
462 
463 #define GAME_DEFAULT_MGR_FOODNEEDED   TRUE
464 
465 /* definition of the migration distance in relation to the current city
466  * radius; 0 means that migration is possible if the second city is within
467  * the city radius */
468 #define GAME_DEFAULT_MGR_DISTANCE     0
469 #define GAME_MIN_MGR_DISTANCE         (0 - CITY_MAP_MAX_RADIUS)
470 #define GAME_MAX_MGR_DISTANCE         (1 + CITY_MAP_MAX_RADIUS)
471 
472 #define GAME_DEFAULT_MGR_NATIONCHANCE 50
473 #define GAME_MIN_MGR_NATIONCHANCE     0
474 #define GAME_MAX_MGR_NATIONCHANCE     100
475 
476 #define GAME_DEFAULT_MGR_WORLDCHANCE  10
477 #define GAME_MIN_MGR_WORLDCHANCE      0
478 #define GAME_MAX_MGR_WORLDCHANCE      100
479 
480 #define GAME_DEFAULT_AQUEDUCTLOSS    0
481 #define GAME_MIN_AQUEDUCTLOSS        0
482 #define GAME_MAX_AQUEDUCTLOSS        100
483 
484 #define GAME_DEFAULT_KILLSTACK       TRUE
485 #define GAME_DEFAULT_KILLCITIZEN     TRUE
486 
487 #define GAME_DEFAULT_KILLUNHOMED     0
488 #define GAME_MIN_KILLUNHOMED         0
489 #define GAME_MAX_KILLUNHOMED         100
490 
491 #define GAME_DEFAULT_TECHPENALTY     100
492 #define GAME_MIN_TECHPENALTY         0
493 #define GAME_MAX_TECHPENALTY         100
494 
495 #define GAME_DEFAULT_TECHLOST_RECV   0
496 #define GAME_MIN_TECHLOST_RECV       0
497 #define GAME_MAX_TECHLOST_RECV       100
498 
499 #define GAME_DEFAULT_TECHLOST_DONOR  0
500 #define GAME_MIN_TECHLOST_DONOR      0
501 #define GAME_MAX_TECHLOST_DONOR      100
502 
503 #define GAME_DEFAULT_TEAM_POOLED_RESEARCH TRUE
504 
505 #define GAME_DEFAULT_RAZECHANCE      20
506 #define GAME_MIN_RAZECHANCE          0
507 #define GAME_MAX_RAZECHANCE          100
508 
509 #define GAME_DEFAULT_REVEALMAP       REVEAL_MAP_NONE
510 
511 #define GAME_DEFAULT_SCORELOG        FALSE
512 #define GAME_DEFAULT_SCORELOGLEVEL   SL_ALL
513 #define GAME_DEFAULT_SCOREFILE       "freeciv-score.log"
514 
515 /* Turns between reports is random between SCORETURN and (2 x SCORETURN).
516  * First report is shown at SCORETURN. As report is generated in the end of the turn,
517  * first report is already generated at (SCORETURN - 1) */
518 #define GAME_DEFAULT_SCORETURN       20
519 
520 #define GAME_DEFAULT_VICTORY_CONDITIONS (1 << VC_SPACERACE | 1 << VC_ALLIED)
521 #define GAME_DEFAULT_END_SPACESHIP   TRUE
522 
523 #define GAME_DEFAULT_TURNBLOCK       TRUE
524 
525 #define GAME_DEFAULT_AUTO_AI_TOGGLE  FALSE
526 
527 #define GAME_DEFAULT_TIMEOUT         0
528 #define GAME_DEFAULT_FIRST_TIMEOUT   -1
529 #define GAME_DEFAULT_TIMEOUTINT      0
530 #define GAME_DEFAULT_TIMEOUTINTINC   0
531 #define GAME_DEFAULT_TIMEOUTINC      0
532 #define GAME_DEFAULT_TIMEOUTINCMULT  1
533 #define GAME_DEFAULT_TIMEOUTADDEMOVE 0
534 #define GAME_DEFAULT_TIMEOUTCOUNTER  1
535 
536 #define GAME_DEFAULT_MAXCONNECTIONSPERHOST 4
537 #define GAME_MIN_MAXCONNECTIONSPERHOST     0
538 #define GAME_MAX_MAXCONNECTIONSPERHOST     MAX_NUM_CONNECTIONS
539 
540 #define GAME_MIN_TIMEOUT             -1
541 #define GAME_MAX_TIMEOUT             8639999
542 #define GAME_MIN_FIRST_TIMEOUT       -1
543 #define GAME_MAX_FIRST_TIMEOUT       GAME_MAX_TIMEOUT
544 
545 #define GAME_MIN_UNITWAITTIME        0
546 #define GAME_MAX_UNITWAITTIME        GAME_MAX_TIMEOUT
547 #define GAME_DEFAULT_UNITWAITTIME    0
548 
549 #define GAME_DEFAULT_PHASE_MODE 0
550 
551 #define GAME_DEFAULT_TCPTIMEOUT      10
552 #define GAME_MIN_TCPTIMEOUT          0
553 #define GAME_MAX_TCPTIMEOUT          120
554 
555 #define GAME_DEFAULT_NETWAIT         4
556 #define GAME_MIN_NETWAIT             0
557 #define GAME_MAX_NETWAIT             20
558 
559 #define GAME_DEFAULT_PINGTIME        20
560 #define GAME_MIN_PINGTIME            1
561 #define GAME_MAX_PINGTIME            1800
562 
563 #define GAME_DEFAULT_PINGTIMEOUT     60
564 #define GAME_MIN_PINGTIMEOUT         60
565 #define GAME_MAX_PINGTIMEOUT         1800
566 
567 #define GAME_DEFAULT_NOTRADESIZE     0
568 #define GAME_MIN_NOTRADESIZE         0
569 #define GAME_MAX_NOTRADESIZE         49
570 
571 #define GAME_DEFAULT_FULLTRADESIZE   1
572 #define GAME_MIN_FULLTRADESIZE       1
573 #define GAME_MAX_FULLTRADESIZE       50
574 
575 #define GAME_DEFAULT_TRADING_TECH    TRUE
576 #define GAME_DEFAULT_TRADING_GOLD    TRUE
577 #define GAME_DEFAULT_TRADING_CITY    TRUE
578 
579 #define GAME_DEFAULT_TRADEMINDIST    9
580 #define GAME_MIN_TRADEMINDIST        1
581 #define GAME_MAX_TRADEMINDIST        999
582 
583 #define GAME_DEFAULT_BARBARIANRATE   BARBS_NORMAL
584 
585 #define GAME_DEFAULT_ONSETBARBARIAN  60
586 #define GAME_MIN_ONSETBARBARIAN      0
587 #define GAME_MAX_ONSETBARBARIAN      GAME_MAX_END_TURN
588 
589 #define GAME_DEFAULT_OCCUPYCHANCE    0
590 #define GAME_MIN_OCCUPYCHANCE        0
591 #define GAME_MAX_OCCUPYCHANCE        100
592 
593 #define GAME_DEFAULT_AUTOATTACK      FALSE
594 
595 #ifdef FREECIV_WEB
596 #define GAME_DEFAULT_RULESETDIR      "fcweb"
597 #else  /* FREECIV_WEB */
598 #define GAME_DEFAULT_RULESETDIR      "classic"
599 #endif /* FREECIV_WEB */
600 
601 #define GAME_DEFAULT_SAVE_NAME       "freeciv"
602 #define GAME_DEFAULT_SAVETURNS       1
603 #define GAME_MIN_SAVETURNS           1
604 #define GAME_MAX_SAVETURNS           200
605 #define GAME_DEFAULT_SAVEFREQUENCY   15
606 #define GAME_MIN_SAVEFREQUENCY       2
607 #define GAME_MAX_SAVEFREQUENCY       1440
608 
609 #define GAME_DEFAULT_AUTOSAVES       (1 << AS_TURN | 1 << AS_GAME_OVER | 1 << AS_QUITIDLE | 1 << AS_INTERRUPT)
610 
611 #define GAME_DEFAULT_SKILL_LEVEL     AI_LEVEL_EASY
612 #define GAME_HARDCODED_DEFAULT_SKILL_LEVEL 3 /* that was 'easy' in old saves */
613 #define GAME_OLD_DEFAULT_SKILL_LEVEL 5  /* normal; for oldest save games */
614 
615 #define GAME_DEFAULT_DEMOGRAPHY      "NASRLPEMOCqrb"
616 #define GAME_DEFAULT_ALLOW_TAKE      "HAhadOo"
617 
618 #define GAME_DEFAULT_EVENT_CACHE_TURNS    1
619 #define GAME_MIN_EVENT_CACHE_TURNS        0
620 #define GAME_MAX_EVENT_CACHE_TURNS        (GAME_MAX_END_TURN + 1)
621 
622 #define GAME_DEFAULT_EVENT_CACHE_MAX_SIZE   256
623 #define GAME_MIN_EVENT_CACHE_MAX_SIZE        10
624 #define GAME_MAX_EVENT_CACHE_MAX_SIZE     20000
625 
626 #define GAME_DEFAULT_EVENT_CACHE_CHAT     TRUE
627 
628 #define GAME_DEFAULT_EVENT_CACHE_INFO     FALSE
629 
630 #define GAME_DEFAULT_COMPRESS_LEVEL 6    /* if we have compression */
631 #define GAME_MIN_COMPRESS_LEVEL     1
632 #define GAME_MAX_COMPRESS_LEVEL     9
633 
634 #if defined(FREECIV_HAVE_LIBBZ2)
635 #  define GAME_DEFAULT_COMPRESS_TYPE FZ_BZIP2
636 #elif defined(FREECIV_HAVE_LIBZ)
637 #  define GAME_DEFAULT_COMPRESS_TYPE FZ_ZLIB
638 #elif defined(FREECIV_HAVE_LIBLZMA)
639 #  define GAME_DEFAULT_COMPRESS_TYPE FZ_XZ
640 #else
641 #  define GAME_DEFAULT_COMPRESS_TYPE FZ_PLAIN
642 #endif
643 
644 #define GAME_DEFAULT_ALLOWED_CITY_NAMES CNM_PLAYER_UNIQUE
645 
646 #define GAME_DEFAULT_PLRCOLORMODE PLRCOL_PLR_ORDER
647 
648 #define GAME_DEFAULT_REVOLENTYPE        REVOLEN_RANDOM
649 #define GAME_DEFAULT_REVOLUTION_LENGTH  5
650 #define GAME_MIN_REVOLUTION_LENGTH      1
651 #define GAME_MAX_REVOLUTION_LENGTH      20
652 
653 #define GAME_DEFAULT_START_YEAR -4000
654 
655 #define GAME_DEFAULT_AIRLIFTINGSTYLE AIRLIFTING_CLASSICAL
656 #define GAME_DEFAULT_PERSISTENTREADY PERSISTENTR_DISABLED
657 
658 #define GAME_MAX_READ_RECURSION 10 /* max recursion for the read command */
659 
660 #define GAME_DEFAULT_KICK_TIME 1800     /* 1800 seconds = 30 minutes. */
661 #define GAME_MIN_KICK_TIME 0            /* 0 = disabling. */
662 #define GAME_MAX_KICK_TIME 86400        /* 86400 seconds = 24 hours. */
663 
664 /* Max distance from the capital used to calculat the bribe cost. */
665 #define GAME_UNIT_BRIBE_DIST_MAX 32
666 
667 /* Max number of recursive transports. */
668 #define GAME_TRANSPORT_MAX_RECURSIVE 5
669 
670 /* ruleset settings */
671 
672 #define RS_MAX_VALUE                             10000
673 
674 /* TRANS: year label (Anno Domini) */
675 #define RS_DEFAULT_POS_YEAR_LABEL                N_("AD")
676 /* TRANS: year label (Before Christ) */
677 #define RS_DEFAULT_NEG_YEAR_LABEL                N_("BC")
678 
679 #define RS_DEFAULT_ILLNESS_ON                    FALSE
680 
681 #define RS_DEFAULT_ILLNESS_BASE_FACTOR           25
682 #define RS_MIN_ILLNESS_BASE_FACTOR               0
683 #define RS_MAX_ILLNESS_BASE_FACTOR               RS_MAX_VALUE
684 
685 #define RS_DEFAULT_ILLNESS_MIN_SIZE              3
686 #define RS_MIN_ILLNESS_MIN_SIZE                  1
687 #define RS_MAX_ILLNESS_MIN_SIZE                  100
688 
689 #define RS_DEFAULT_ILLNESS_TRADE_INFECTION_PCT   50
690 #define RS_MIN_ILLNESS_TRADE_INFECTION_PCT       0
691 #define RS_MAX_ILLNESS_TRADE_INFECTION_PCT       500
692 
693 #define RS_DEFAULT_ILLNESS_POLLUTION_PCT         50
694 #define RS_MIN_ILLNESS_POLLUTION_PCT             0
695 #define RS_MAX_ILLNESS_POLLUTION_PCT             500
696 
697 #define RS_DEFAULT_CALENDAR_SKIP_0               TRUE
698 
699 #define RS_DEFAULT_BORDER_RADIUS_SQ_CITY         17 /* city radius 4 */
700 #define RS_MIN_BORDER_RADIUS_SQ_CITY             0
701 #define RS_MAX_BORDER_RADIUS_SQ_CITY             401 /* city radius 20 */
702 
703 #define RS_DEFAULT_BORDER_SIZE_EFFECT            1
704 #define RS_MIN_BORDER_SIZE_EFFECT                0
705 #define RS_MAX_BORDER_SIZE_EFFECT                100
706 
707 #define RS_DEFAULT_BORDER_RADIUS_SQ_CITY_PERMANENT 0
708 #define RS_MIN_BORDER_RADIUS_SQ_CITY_PERMANENT   (-CITY_MAP_MAX_RADIUS_SQ)
709 #define RS_MAX_BORDER_RADIUS_SQ_CITY_PERMANENT   401 /* city radius 20 */
710 
711 #define RS_DEFAULT_INCITE_BASE_COST              1000
712 #define RS_MIN_INCITE_BASE_COST                  0
713 #define RS_MAX_INCITE_BASE_COST                  RS_MAX_VALUE
714 
715 #define RS_DEFAULT_INCITE_IMPROVEMENT_FCT        1
716 #define RS_MIN_INCITE_IMPROVEMENT_FCT            0
717 #define RS_MAX_INCITE_IMPROVEMENT_FCT            RS_MAX_VALUE
718 
719 #define RS_DEFAULT_INCITE_UNIT_FCT               2
720 #define RS_MIN_INCITE_UNIT_FCT                   0
721 #define RS_MAX_INCITE_UNIT_FCT                   RS_MAX_VALUE
722 
723 #define RS_DEFAULT_INCITE_TOTAL_FCT              100
724 #define RS_MIN_INCITE_TOTAL_FCT                  0
725 #define RS_MAX_INCITE_TOTAL_FCT                  RS_MAX_VALUE
726 
727 #define RS_DEFAULT_GRANARY_FOOD_INI              20
728 
729 #define RS_DEFAULT_GRANARY_FOOD_INC              10
730 #define RS_MIN_GRANARY_FOOD_INC                  0
731 #define RS_MAX_GRANARY_FOOD_INC                  RS_MAX_VALUE
732 
733 #define RS_DEFAULT_CITY_CENTER_OUTPUT            0
734 #define RS_MIN_CITY_CENTER_OUTPUT                0
735 #define RS_MAX_CITY_CENTER_OUTPUT                RS_MAX_VALUE
736 
737 #define RS_DEFAULT_CITIES_MIN_DIST               2
738 #define RS_MIN_CITIES_MIN_DIST                   1
739 #define RS_MAX_CITIES_MIN_DIST                   RS_MAX_VALUE
740 
741 /* the constants CITY_MAP_*_RADIUS are defined in city.c */
742 #define RS_DEFAULT_CITY_RADIUS_SQ                CITY_MAP_DEFAULT_RADIUS_SQ
743 #define RS_MIN_CITY_RADIUS_SQ                    CITY_MAP_MIN_RADIUS_SQ
744 #define RS_MAX_CITY_RADIUS_SQ                    CITY_MAP_MAX_RADIUS_SQ
745 
746 #define RS_DEFAULT_VIS_RADIUS_SQ                 5 /* city radius 2 */
747 #define RS_MIN_VIS_RADIUS_SQ                     0
748 #define RS_MAX_VIS_RADIUS_SQ                     401 /* city radius 20 */
749 
750 #define RS_DEFAULT_BASE_POLLUTION                -20
751 /* no min / max values as it can be set to high negative values to
752  * deactiveate pollution and high positive values to create much
753  * pollution */
754 
755 #define RS_DEFAULT_HAPPY_COST                    2
756 #define RS_MIN_HAPPY_COST                        0
757 #define RS_MAX_HAPPY_COST                        100
758 
759 #define RS_DEFAULT_FOOD_COST                     2
760 #define RS_MIN_FOOD_COST                         0
761 #define RS_MAX_FOOD_COST                         100
762 
763 #define RS_DEFAULT_SLOW_INVASIONS                TRUE
764 
765 #define RS_DEFAULT_TIRED_ATTACK                  FALSE
766 
767 #define RS_DEFAULT_BASE_BRIBE_COST               750
768 #define RS_MIN_BASE_BRIBE_COST                   0
769 #define RS_MAX_BASE_BRIBE_COST                   RS_MAX_VALUE
770 
771 #define RS_DEFAULT_RANSOM_GOLD                   100
772 #define RS_MIN_RANSOM_GOLD                       0
773 #define RS_MAX_RANSOM_GOLD                       RS_MAX_VALUE
774 
775 #define RS_DEFAULT_PILLAGE_SELECT                TRUE
776 
777 #define RS_DEFAULT_UPGRADE_VETERAN_LOSS          0
778 #define RS_MIN_UPGRADE_VETERAN_LOSS              0
779 #define RS_MAX_UPGRADE_VETERAN_LOSS              MAX_VET_LEVELS
780 
781 #define RS_DEFAULT_TECH_UPKEEP_DIVIDER   100
782 #define RS_MIN_TECH_UPKEEP_DIVIDER       1
783 #define RS_MAX_TECH_UPKEEP_DIVIDER       100000
784 
785 #define RS_DEFAULT_BASE_TECH_COST                20
786 #define RS_MIN_BASE_TECH_COST                    0
787 #define RS_MAX_BASE_TECH_COST                    200
788 
789 #define RS_DEFAULT_FORCE_TRADE_ROUTE             FALSE
790 
791 #ifdef __cplusplus
792 }
793 #endif /* __cplusplus */
794 
795 #endif  /* FC__GAME_H */
796