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