Freeciv-3.1
Loading...
Searching...
No Matches
fc_types.h
Go to the documentation of this file.
1/***********************************************************************
2 Freeciv - Copyright (C) 2004 - The Freeciv Project
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
14#ifndef FC__FC_TYPES_H
15#define FC__FC_TYPES_H
16
17#ifdef __cplusplus
18extern "C" {
19#endif /* __cplusplus */
20
21/* utility */
22#include "bitvector.h"
23#include "shared.h"
24
25/* This file serves to reduce the cross-inclusion of header files which
26 * occurs when a type which is defined in one file is needed for a function
27 * definition in another file.
28 *
29 * Nothing in this file should require anything else from the common/
30 * directory! */
31
32#define MAX_NUM_PLAYER_SLOTS 512 /* Used in the network protocol. */
33 /* Must be divisable by 32 or iterations
34 * in savegame2.c needs to be changed */
35#define MAX_NUM_BARBARIANS 12 /* 3, but slots reserved for future use. */
36#define MAX_NUM_PLAYERS MAX_NUM_PLAYER_SLOTS - MAX_NUM_BARBARIANS
37/* Used in the network protocol. */
38#define MAX_NUM_CONNECTIONS (2 * (MAX_NUM_PLAYER_SLOTS))
39/* e.g. unit_types. Used in the network protocol. */
40#define MAX_NUM_ITEMS 200
41#define MAX_NUM_ADVANCES 250 /* Used in the network protocol. */
42#define MAX_NUM_UNITS 250 /* Used in the network protocol. */
43#define MAX_NUM_BUILDINGS 200 /* Used in the network protocol. */
44#define MAX_NUM_TECH_LIST 10 /* Used in the network protocol. */
45#define MAX_NUM_UNIT_LIST 10 /* Used in the network protocol. */
46#define MAX_NUM_BUILDING_LIST 10 /* Used in the network protocol. */
47#define MAX_LEN_VET_SHORT_NAME 8
48/* Used in the network protocol. See diplomat_success_vs_defender() */
49#define MAX_VET_LEVELS 20
50#define MAX_EXTRA_TYPES 128 /* Used in the network protocol. */
51#define MAX_GOODS_TYPES 25
52#define MAX_DISASTER_TYPES 10
53#define MAX_ACHIEVEMENT_TYPES 40
54#define MAX_NUM_ACTION_AUTO_PERFORMERS 8
55#define MAX_NUM_MULTIPLIERS 15
56#define MAX_NUM_LEADERS MAX_NUM_ITEMS /* Used in the network protocol. */
57#define MAX_NUM_NATION_SETS 32 /* Used in the network protocol.
58 * RULESET_NATION_SETS packet may become too big
59 * if increased */
60#define MAX_NUM_NATION_GROUPS 128 /* Used in the network protocol. */
61/* Used in the network protocol -- nation count is a UINT16 */
62#define MAX_NUM_NATIONS MAX_UINT16
63#define MAX_NUM_STARTPOS_NATIONS 1024 /* Used in the network protocol. */
64#define MAX_CALENDAR_FRAGMENTS 52 /* Used in the network protocol. */
65#define MAX_NUM_TECH_CLASSES 16 /* Used in the network protocol. */
67/* Changing these will probably break network compatibility. */
68#define MAX_LEN_NAME 48
69#define MAX_LEN_CITYNAME 80
70#define MAX_LEN_MAP_LABEL 64
71#define MAX_LEN_DEMOGRAPHY 16
72#define MAX_LEN_ALLOW_TAKE 16
73#define MAX_LEN_GAME_IDENTIFIER 33
74#define MAX_GRANARY_INIS 24
75#define MAX_LEN_STARTUNIT (20+1)
76#define MAX_LEN_ENUM 64
78/* Line breaks after this number of characters; be careful and use only 70 */
79#define LINE_BREAK 70
80
81#define MAX_CITY_NATIONALITIES (MIN(MAX_NUM_PLAYER_SLOTS, MAX_CITY_SIZE))
83/* symbol to flag missing numbers for better debugging */
84#define IDENTITY_NUMBER_ZERO (0)
85
88/* A bitvector for all player slots. Used in the network protocol. */
91/* Changing this breaks network compatibility. */
94};
95
96/* Changing this enum will break savegame and network compatibility. */
97/* When changing this, also update the list of valid requirement "Activity"
98 * values in doc/README.effects and the list of invalid requirement
99 * "Activity" values in activity_is_valid_in_requirement(). */
100#define SPECENUM_NAME unit_activity
101/* Not performing any activity right now */
102#define SPECENUM_VALUE0 ACTIVITY_IDLE
103#define SPECENUM_VALUE0NAME N_("Idle")
104/* Action with the result ACTRES_CLEAN_POLLUTION */
105#define SPECENUM_VALUE1 ACTIVITY_POLLUTION
106#define SPECENUM_VALUE1NAME N_("Pollution")
107/* Savegame compatibility */
108#define SPECENUM_VALUE2 ACTIVITY_OLD_ROAD
109#define SPECENUM_VALUE2NAME "Unused Road"
110/* Action with the result ACTRES_CULTIVATE */
111#define SPECENUM_VALUE3 ACTIVITY_MINE
112#define SPECENUM_VALUE3NAME N_("?act:Mine")
113/* Action with the result ACTRES_IRRIGATE */
114#define SPECENUM_VALUE4 ACTIVITY_IRRIGATE
115#define SPECENUM_VALUE4NAME N_("Irrigate")
116/* Has completed ACTIVITY_FORTIFYING */
117#define SPECENUM_VALUE5 ACTIVITY_FORTIFIED
118#define SPECENUM_VALUE5NAME N_("Fortified")
119/* Savegame compatibility */
120#define SPECENUM_VALUE6 ACTIVITY_FORTRESS
121#define SPECENUM_VALUE6NAME "Fortress"
122/* Server side client state (UI) */
123#define SPECENUM_VALUE7 ACTIVITY_SENTRY
124#define SPECENUM_VALUE7NAME "Sentry"
125/* Savegame compatibility */
126#define SPECENUM_VALUE8 ACTIVITY_OLD_RAILROAD
127#define SPECENUM_VALUE8NAME "Unused Railroad"
128/* Action with the result ACTRES_PILLAGE */
129#define SPECENUM_VALUE9 ACTIVITY_PILLAGE
130#define SPECENUM_VALUE9NAME N_("Pillage")
131/* AI compatibility. Is not orders' goto. */
132#define SPECENUM_VALUE10 ACTIVITY_GOTO
133#define SPECENUM_VALUE10NAME "Goto"
134/* Server side agent */
135#define SPECENUM_VALUE11 ACTIVITY_EXPLORE
136#define SPECENUM_VALUE11NAME "Explore"
137/* Action with the result ACTRES_TRANSFORM_TERRAIN */
138#define SPECENUM_VALUE12 ACTIVITY_TRANSFORM
139#define SPECENUM_VALUE12NAME N_("Transform")
140/* Unused */
141#define SPECENUM_VALUE13 ACTIVITY_UNKNOWN
142#define SPECENUM_VALUE13NAME "Unused"
143/* Savegame compatibility */
144#define SPECENUM_VALUE14 ACTIVITY_AIRBASE
145#define SPECENUM_VALUE14NAME "Unused Airbase"
146/* Action with the result ACTRES_FORTIFY */
147#define SPECENUM_VALUE15 ACTIVITY_FORTIFYING
148#define SPECENUM_VALUE15NAME N_("Fortifying")
149/* Action with the result ACTRES_CLEAN_FALLOUT */
150#define SPECENUM_VALUE16 ACTIVITY_FALLOUT
151#define SPECENUM_VALUE16NAME N_("Fallout")
152/* Unused */
153#define SPECENUM_VALUE17 ACTIVITY_PATROL_UNUSED
154#define SPECENUM_VALUE17NAME "Unused Patrol"
155/* Action with the result ACTRES_BASE */
156#define SPECENUM_VALUE18 ACTIVITY_BASE
157#define SPECENUM_VALUE18NAME N_("Base")
158/* Action with the result ACTRES_ROAD */
159#define SPECENUM_VALUE19 ACTIVITY_GEN_ROAD
160#define SPECENUM_VALUE19NAME N_("Road")
161/* Action with the result ACTRES_CONVERT */
162#define SPECENUM_VALUE20 ACTIVITY_CONVERT
163#define SPECENUM_VALUE20NAME N_("Convert")
164/* Action with the result ACTRES_CULTIVATE */
165#define SPECENUM_VALUE21 ACTIVITY_CULTIVATE
166#define SPECENUM_VALUE21NAME N_("Cultivate")
167/* Action with the result ACTRES_PLANT */
168#define SPECENUM_VALUE22 ACTIVITY_PLANT
169#define SPECENUM_VALUE22NAME N_("Plant")
170/* Number of activities */
171#define SPECENUM_COUNT ACTIVITY_LAST
172#include "specenum_gen.h"
173
174/* Values used in the network protocol. */
175#define SPECENUM_NAME action_result
176#define SPECENUM_VALUE0 ACTRES_ESTABLISH_EMBASSY
177#define SPECENUM_VALUE0NAME "Unit Establish Embassy"
178#define SPECENUM_VALUE1 ACTRES_SPY_INVESTIGATE_CITY
179#define SPECENUM_VALUE1NAME "Unit Investigate City"
180#define SPECENUM_VALUE2 ACTRES_SPY_POISON
181#define SPECENUM_VALUE2NAME "Unit Poison City"
182#define SPECENUM_VALUE3 ACTRES_SPY_STEAL_GOLD
183#define SPECENUM_VALUE3NAME "Unit Steal Gold"
184#define SPECENUM_VALUE4 ACTRES_SPY_SABOTAGE_CITY
185#define SPECENUM_VALUE4NAME "Unit Sabotage City"
186#define SPECENUM_VALUE5 ACTRES_SPY_TARGETED_SABOTAGE_CITY
187#define SPECENUM_VALUE5NAME "Unit Targeted Sabotage City"
188#define SPECENUM_VALUE6 ACTRES_SPY_SABOTAGE_CITY_PRODUCTION
189#define SPECENUM_VALUE6NAME "Unit Sabotage City Production"
190#define SPECENUM_VALUE7 ACTRES_SPY_STEAL_TECH
191#define SPECENUM_VALUE7NAME "Unit Steal Tech"
192#define SPECENUM_VALUE8 ACTRES_SPY_TARGETED_STEAL_TECH
193#define SPECENUM_VALUE8NAME "Unit Targeted Steal Tech"
194#define SPECENUM_VALUE9 ACTRES_SPY_INCITE_CITY
195#define SPECENUM_VALUE9NAME "Unit Incite City"
196#define SPECENUM_VALUE10 ACTRES_TRADE_ROUTE
197#define SPECENUM_VALUE10NAME "Unit Establish Trade Route"
198#define SPECENUM_VALUE11 ACTRES_MARKETPLACE
199#define SPECENUM_VALUE11NAME "Unit Enter Marketplace"
200#define SPECENUM_VALUE12 ACTRES_HELP_WONDER
201#define SPECENUM_VALUE12NAME "Unit Help Wonder"
202#define SPECENUM_VALUE13 ACTRES_SPY_BRIBE_UNIT
203#define SPECENUM_VALUE13NAME "Unit Bribe Unit"
204#define SPECENUM_VALUE14 ACTRES_SPY_SABOTAGE_UNIT
205#define SPECENUM_VALUE14NAME "Unit Sabotage Unit"
206#define SPECENUM_VALUE15 ACTRES_CAPTURE_UNITS
207#define SPECENUM_VALUE15NAME "Unit Capture Units"
208#define SPECENUM_VALUE16 ACTRES_FOUND_CITY
209#define SPECENUM_VALUE16NAME "Unit Found City"
210#define SPECENUM_VALUE17 ACTRES_JOIN_CITY
211#define SPECENUM_VALUE17NAME "Unit Join City"
212#define SPECENUM_VALUE18 ACTRES_STEAL_MAPS
213#define SPECENUM_VALUE18NAME "Unit Steal Maps"
214#define SPECENUM_VALUE19 ACTRES_BOMBARD
215#define SPECENUM_VALUE19NAME "Unit Bombard"
216#define SPECENUM_VALUE20 ACTRES_SPY_NUKE
217#define SPECENUM_VALUE20NAME "Unit Suitcase Nuke"
218#define SPECENUM_VALUE21 ACTRES_NUKE
219#define SPECENUM_VALUE21NAME "Unit Nuke"
220#define SPECENUM_VALUE22 ACTRES_NUKE_UNITS
221#define SPECENUM_VALUE22NAME "Unit Nuke Units"
222#define SPECENUM_VALUE23 ACTRES_DESTROY_CITY
223#define SPECENUM_VALUE23NAME "Unit Destroy City"
224#define SPECENUM_VALUE24 ACTRES_EXPEL_UNIT
225#define SPECENUM_VALUE24NAME "Unit Expel Unit"
226#define SPECENUM_VALUE25 ACTRES_DISBAND_UNIT_RECOVER
227#define SPECENUM_VALUE25NAME "Unit Disband Recover"
228#define SPECENUM_VALUE26 ACTRES_DISBAND_UNIT
229#define SPECENUM_VALUE26NAME "Unit Disband"
230#define SPECENUM_VALUE27 ACTRES_HOME_CITY
231#define SPECENUM_VALUE27NAME "Unit Home City"
232#define SPECENUM_VALUE28 ACTRES_UPGRADE_UNIT
233#define SPECENUM_VALUE28NAME "Unit Upgrade"
234#define SPECENUM_VALUE29 ACTRES_PARADROP
235#define SPECENUM_VALUE29NAME "Unit Paradrop"
236#define SPECENUM_VALUE30 ACTRES_AIRLIFT
237#define SPECENUM_VALUE30NAME "Unit Airlift"
238#define SPECENUM_VALUE31 ACTRES_ATTACK
239#define SPECENUM_VALUE31NAME "Unit Attack"
240#define SPECENUM_VALUE32 ACTRES_STRIKE_BUILDING
241#define SPECENUM_VALUE32NAME "Unit Surgical Strike Building"
242#define SPECENUM_VALUE33 ACTRES_STRIKE_PRODUCTION
243#define SPECENUM_VALUE33NAME "Unit Surgical Strike Production"
244#define SPECENUM_VALUE34 ACTRES_CONQUER_CITY
245#define SPECENUM_VALUE34NAME "Unit Conquer City"
246#define SPECENUM_VALUE35 ACTRES_HEAL_UNIT
247#define SPECENUM_VALUE35NAME "Unit Heal Unit"
248#define SPECENUM_VALUE36 ACTRES_TRANSFORM_TERRAIN
249#define SPECENUM_VALUE36NAME "Unit Transform Terrain"
250#define SPECENUM_VALUE37 ACTRES_CULTIVATE
251#define SPECENUM_VALUE37NAME "Unit Cultivate"
252#define SPECENUM_VALUE38 ACTRES_PLANT
253#define SPECENUM_VALUE38NAME "Unit Plant"
254#define SPECENUM_VALUE39 ACTRES_PILLAGE
255#define SPECENUM_VALUE39NAME "Unit Pillage"
256#define SPECENUM_VALUE40 ACTRES_FORTIFY
257#define SPECENUM_VALUE40NAME "Unit Fortify"
258#define SPECENUM_VALUE41 ACTRES_ROAD
259#define SPECENUM_VALUE41NAME "Unit Build Road"
260#define SPECENUM_VALUE42 ACTRES_CONVERT
261#define SPECENUM_VALUE42NAME "Unit Convert"
262#define SPECENUM_VALUE43 ACTRES_BASE
263#define SPECENUM_VALUE43NAME "Unit Build Base"
264#define SPECENUM_VALUE44 ACTRES_MINE
265#define SPECENUM_VALUE44NAME "Unit Build Mine"
266#define SPECENUM_VALUE45 ACTRES_IRRIGATE
267#define SPECENUM_VALUE45NAME "Unit Build Irrigation"
268#define SPECENUM_VALUE46 ACTRES_CLEAN_POLLUTION
269#define SPECENUM_VALUE46NAME "Unit Clean Pollution"
270#define SPECENUM_VALUE47 ACTRES_CLEAN_FALLOUT
271#define SPECENUM_VALUE47NAME "Unit Clean Fallout"
272#define SPECENUM_VALUE48 ACTRES_TRANSPORT_ALIGHT
273#define SPECENUM_VALUE48NAME "Unit Transport Alight"
274#define SPECENUM_VALUE49 ACTRES_TRANSPORT_UNLOAD
275#define SPECENUM_VALUE49NAME "Unit Transport Unload"
276#define SPECENUM_VALUE50 ACTRES_TRANSPORT_DISEMBARK
277#define SPECENUM_VALUE50NAME "Unit Transport Disembark"
278#define SPECENUM_VALUE51 ACTRES_TRANSPORT_BOARD
279#define SPECENUM_VALUE51NAME "Unit Transport Board"
280#define SPECENUM_VALUE52 ACTRES_TRANSPORT_EMBARK
281#define SPECENUM_VALUE52NAME "Unit Transport Embark"
282#define SPECENUM_VALUE53 ACTRES_SPY_SPREAD_PLAGUE
283#define SPECENUM_VALUE53NAME "Unit Spread Plague"
284#define SPECENUM_VALUE54 ACTRES_SPY_ATTACK
285#define SPECENUM_VALUE54NAME "Unit Spy Attack"
286#define SPECENUM_VALUE55 ACTRES_CONQUER_EXTRAS
287#define SPECENUM_VALUE55NAME "Unit Conquer Extras"
288#define SPECENUM_VALUE56 ACTRES_HUT_ENTER
289#define SPECENUM_VALUE56NAME "Unit Enter Hut"
290#define SPECENUM_VALUE57 ACTRES_HUT_FRIGHTEN
291#define SPECENUM_VALUE57NAME "Unit Frighten Hut"
292#define SPECENUM_VALUE58 ACTRES_UNIT_MOVE
293#define SPECENUM_VALUE58NAME "Unit Move"
294#define SPECENUM_VALUE59 ACTRES_PARADROP_CONQUER
295#define SPECENUM_VALUE59NAME "Unit Paradrop Conquer"
296#define SPECENUM_VALUE60 ACTRES_HOMELESS
297#define SPECENUM_VALUE60NAME "Unit Make Homeless"
298/* All consequences are handled as (ruleset) action data. */
299#define SPECENUM_COUNT ACTRES_NONE
301
302#define ACTRES_LAST ACTRES_NONE
303
304/* Used in the network protocol. */
305#define SPECENUM_NAME action_sub_result
306/* Will enter each enterable hut at the target tile */
307#define SPECENUM_VALUE0 ACT_SUB_RES_HUT_ENTER
308#define SPECENUM_VALUE0NAME "Unit Enter Hut"
309/* Will frighten each frightenable hut at the target tile */
310#define SPECENUM_VALUE1 ACT_SUB_RES_HUT_FRIGHTEN
311#define SPECENUM_VALUE1NAME "Unit Frighten Hut"
312/* The actor may load into a transport if it can't survive on its own at the
313 * target tile. */
314#define SPECENUM_VALUE2 ACT_SUB_RES_MAY_EMBARK
315#define SPECENUM_VALUE2NAME "Unit May Embark"
316#define SPECENUM_BITVECTOR bv_action_sub_results
317#define SPECENUM_COUNT ACT_SUB_RES_COUNT
318#include "specenum_gen.h"
320/* Happens at once, not during turn change. */
321#define ACT_TIME_INSTANTANEOUS (-1)
322
323/* Symbol used to flag no (sub) target of an action or for an activity.
324 * IDENTITY_NUMBER_ZERO can't be used since 0 is a valid identity for
325 * certain (sub) targets. */
326#define NO_TARGET (-1)
327
328/* How "large" a Casus Belli is. */
329#define SPECENUM_NAME casus_belli_range
330/* No one gets a Casus Belli. */
331#define SPECENUM_VALUE0 CBR_NONE
332#define SPECENUM_VALUE0NAME N_("No Casus Belli")
333/* Only the victim player gets a Casus Belli. */
334#define SPECENUM_VALUE1 CBR_VICTIM_ONLY
335#define SPECENUM_VALUE1NAME N_("Victim Casus Belli")
336/* Every other player, including the victim, gets a Casus Belli. */
337#define SPECENUM_VALUE2 CBR_INTERNATIONAL_OUTRAGE
338#define SPECENUM_VALUE2NAME N_("International Outrage")
339#define SPECENUM_COUNT CBR_LAST
341
344typedef signed short Continent_id;
345typedef int Terrain_type_id;
348typedef int Impr_type_id;
349typedef int Tech_type_id;
351typedef enum unit_activity Activity_type_id;
352typedef int Nation_type_id;
354typedef int Unit_type_id;
355typedef int Base_type_id;
356typedef int Road_type_id;
359typedef int Goods_type_id;
360typedef unsigned char citizens;
361typedef int action_id;
362
363struct advance;
364struct city;
365struct connection;
366struct government;
367struct impr_type;
368struct nation_type;
369struct output_type;
370struct player;
371struct specialist;
372struct terrain;
373struct tile;
374struct unit;
375struct achievement;
376struct action;
377
378
379/* Changing these will break network compatibility.
380 * If changing MAX_NUM_REQS, also update user documentation in README.effects. */
381#define SP_MAX 20
382#define MAX_NUM_REQS 40
384#define MAX_NUM_RULESETS 63 /* Used in the network protocol. */
385#define MAX_RULESET_NAME_LENGTH 64 /* Used in the network protocol. */
386#define RULESET_SUFFIX ".serv"
388/* Unit Class List, also 32-bit vector? */
389#define UCL_LAST 32 /* Used in the network protocol. */
390typedef int Unit_Class_id;
391
392/* The direction8 gives the 8 possible directions. These may be used in
393 * a number of ways, for instance as an index into the DIR_DX/DIR_DY
394 * arrays. Not all directions may be valid; see is_valid_dir and
395 * is_cardinal_dir. */
396
397/* The DIR8/direction8 naming system is used to avoid conflict with
398 * DIR4/direction4 in client/tilespec.h
399 *
400 * Changing the order of the directions will break network compatibility.
401 *
402 * Some code assumes that the first 4 directions are the reverses of the
403 * last 4 (in no particular order). See client/goto.c and
404 * map.c:opposite_direction(). */
405
406/* Used in the network protocol. */
407#define SPECENUM_NAME direction8
408#define SPECENUM_VALUE0 DIR8_NORTHWEST
409#define SPECENUM_VALUE0NAME "Northwest"
410#define SPECENUM_VALUE1 DIR8_NORTH
411#define SPECENUM_VALUE1NAME "North"
412#define SPECENUM_VALUE2 DIR8_NORTHEAST
413#define SPECENUM_VALUE2NAME "Northeast"
414#define SPECENUM_VALUE3 DIR8_WEST
415#define SPECENUM_VALUE3NAME "West"
416#define SPECENUM_VALUE4 DIR8_EAST
417#define SPECENUM_VALUE4NAME "East"
418#define SPECENUM_VALUE5 DIR8_SOUTHWEST
419#define SPECENUM_VALUE5NAME "Southwest"
420#define SPECENUM_VALUE6 DIR8_SOUTH
421#define SPECENUM_VALUE6NAME "South"
422#define SPECENUM_VALUE7 DIR8_SOUTHEAST
423#define SPECENUM_VALUE7NAME "Southeast"
424#define SPECENUM_INVALID ((enum direction8) (DIR8_SOUTHEAST + 1))
425#include "specenum_gen.h"
426
427/* No direction. Understood as the origin tile that a direction would have
428 * been relative to. */
429#define DIR8_ORIGIN direction8_invalid()
430
431/* Used in the network protocol. */
432#define SPECENUM_NAME free_tech_method
433#define SPECENUM_VALUE0 FTM_GOAL
434#define SPECENUM_VALUE0NAME "Goal"
435#define SPECENUM_VALUE1 FTM_RANDOM
436#define SPECENUM_VALUE1NAME "Random"
437#define SPECENUM_VALUE2 FTM_CHEAPEST
438#define SPECENUM_VALUE2NAME "Cheapest"
439#include "specenum_gen.h"
440
441/* Some code requires compile time value for number of directions, and
442 * cannot use specenum function call direction8_max(). */
443#define DIR8_MAGIC_MAX 8
444
445/* The victim gets a casus belli if EFT_CASUS_BELLI_* is equal to or above
446 * CASUS_BELLI_VICTIM. To change this value you must update the
447 * documentation of each Casus_Belli_* effect in
448 * doc/README.effects, update existing rulesets and add ruleset
449 * compatibility code to server/rscompat.c. */
450#define CASUS_BELLI_VICTIM 1
451/* International outrage: Everyone gets a casus belli if EFT_CASUS_BELLI_*
452 * is equal to or above CASUS_BELLI_OUTRAGE. To change this value you must
453 * update the documentation of each Casus_Belli_* effect in
454 * doc/README.effects, update existing rulesets and add ruleset
455 * compatibility code to server/rscompat.c. */
456#define CASUS_BELLI_OUTRAGE 1000
457
458/* Really in ai.c */
459const char *ai_level_name_update_cb(const char *old);
460
461/* Used in the network protocol. */
462/* server/commands.c must match these */
463#define SPECENUM_NAME ai_level
464#define SPECENUM_VALUE0 AI_LEVEL_AWAY
465#define SPECENUM_VALUE0NAME N_("Away")
466#define SPECENUM_VALUE1 AI_LEVEL_RESTRICTED
467#define SPECENUM_VALUE1NAME N_("Restricted")
468#define SPECENUM_VALUE2 AI_LEVEL_NOVICE
469#define SPECENUM_VALUE2NAME N_("Novice")
470#define SPECENUM_VALUE3 AI_LEVEL_EASY
471#define SPECENUM_VALUE3NAME N_("Easy")
472#define SPECENUM_VALUE4 AI_LEVEL_NORMAL
473#define SPECENUM_VALUE4NAME N_("Normal")
474#define SPECENUM_VALUE5 AI_LEVEL_HARD
475#define SPECENUM_VALUE5NAME N_("Hard")
476#define SPECENUM_VALUE6 AI_LEVEL_CHEATING
477#define SPECENUM_VALUE6NAME N_("Cheating")
478
479#ifdef FREECIV_DEBUG
480#define SPECENUM_VALUE7 AI_LEVEL_EXPERIMENTAL
481#define SPECENUM_VALUE7NAME N_("Experimental")
482#endif /* FREECIV_DEBUG */
484#define SPECENUM_COUNT AI_LEVEL_COUNT
485#define SPECENUM_NAME_UPDATER
486#include "specenum_gen.h"
487
488/* pplayer->ai.barbarian_type and nations use this enum. */
489#define SPECENUM_NAME barbarian_type
490#define SPECENUM_VALUE0 NOT_A_BARBARIAN
491#define SPECENUM_VALUE0NAME "None"
492#define SPECENUM_VALUE1 LAND_BARBARIAN
493#define SPECENUM_VALUE1NAME "Land"
494#define SPECENUM_VALUE2 SEA_BARBARIAN
495#define SPECENUM_VALUE2NAME "Sea"
496#define SPECENUM_VALUE3 ANIMAL_BARBARIAN
497#define SPECENUM_VALUE3NAME "Animal"
498#define SPECENUM_VALUE4 LAND_AND_SEA_BARBARIAN
499#define SPECENUM_VALUE4NAME "LandAndSea"
500#include "specenum_gen.h"
501
502/*
503 * CityTile requirement types.
504 *
505 * Used in the network protocol
506 */
507#define SPECENUM_NAME citytile_type
508#define SPECENUM_VALUE0 CITYT_CENTER
509#define SPECENUM_VALUE0NAME "Center"
510#define SPECENUM_VALUE1 CITYT_CLAIMED
511#define SPECENUM_VALUE1NAME "Claimed"
512#define SPECENUM_VALUE2 CITYT_EXTRAS_OWNED
513#define SPECENUM_VALUE2NAME "Extras Owned"
514#define SPECENUM_COUNT CITYT_LAST
515#include "specenum_gen.h"
516
517/*
518 * CityStatus requirement types.
519 *
520 * Used in the network protocol
521 */
522#define SPECENUM_NAME citystatus_type
523#define SPECENUM_VALUE0 CITYS_OWNED_BY_ORIGINAL
524#define SPECENUM_VALUE0NAME "OwnedByOriginal"
525#define SPECENUM_COUNT CITYS_LAST
526#include "specenum_gen.h"
527
528/*
529 * UnitState requirement property types.
530 *
531 * Used in the network protocol.
532 */
533#define SPECENUM_NAME ustate_prop
534#define SPECENUM_VALUE0 USP_TRANSPORTED
535#define SPECENUM_VALUE0NAME "Transported"
536#define SPECENUM_VALUE1 USP_LIVABLE_TILE
537#define SPECENUM_VALUE1NAME "OnLivableTile"
538#define SPECENUM_VALUE2 USP_TRANSPORTING
539#define SPECENUM_VALUE2NAME "Transporting"
540#define SPECENUM_VALUE3 USP_HAS_HOME_CITY
541#define SPECENUM_VALUE3NAME "HasHomeCity"
542#define SPECENUM_VALUE4 USP_NATIVE_TILE
543#define SPECENUM_VALUE4NAME "OnNativeTile"
544#define SPECENUM_VALUE5 USP_NATIVE_EXTRA
545#define SPECENUM_VALUE5NAME "InNativeExtra"
546#define SPECENUM_VALUE6 USP_MOVED_THIS_TURN
547#define SPECENUM_VALUE6NAME "MovedThisTurn"
548#define SPECENUM_COUNT USP_COUNT
549#include "specenum_gen.h"
550
551/* Changing these values will break map_init_topology.
552 * Changing the names will break file format compatibility. */
553#define SPECENUM_NAME topo_flag
554#define SPECENUM_BITWISE
555#define SPECENUM_VALUE0 TF_WRAPX
556#define SPECENUM_VALUE0NAME N_("WrapX")
557#define SPECENUM_VALUE1 TF_WRAPY
558#define SPECENUM_VALUE1NAME N_("WrapY")
559#define SPECENUM_VALUE2 TF_ISO
560#define SPECENUM_VALUE2NAME N_("ISO")
561#define SPECENUM_VALUE3 TF_HEX
562#define SPECENUM_VALUE3NAME N_("Hex")
563#define TOPO_FLAG_BITS 4
564#include "specenum_gen.h"
565
566/* Used in the network protocol. */
567#define SPECENUM_NAME impr_genus_id
568#define SPECENUM_VALUE0 IG_GREAT_WONDER
569#define SPECENUM_VALUE0NAME "GreatWonder"
570#define SPECENUM_VALUE1 IG_SMALL_WONDER
571#define SPECENUM_VALUE1NAME "SmallWonder"
572#define SPECENUM_VALUE2 IG_IMPROVEMENT
573#define SPECENUM_VALUE2NAME "Improvement"
574#define SPECENUM_VALUE3 IG_SPECIAL
575#define SPECENUM_VALUE3NAME "Special"
576#define SPECENUM_COUNT IG_COUNT
577#include "specenum_gen.h"
579/* A server setting + its value. */
580typedef int ssetv;
581
582/* Sometimes we don't know (or don't care) if some requirements for effect
583 * are currently fulfilled or not. This enum tells lower level functions
584 * how to handle uncertain requirements.
585 */
586enum req_problem_type {
587 RPT_POSSIBLE, /* We want to know if it is possible that effect is active */
588 RPT_CERTAIN /* We want to know if it is certain that effect is active */
590
591#define REVERSED_RPT(x) \
592 (x == RPT_CERTAIN ? RPT_POSSIBLE : RPT_CERTAIN)
593
594/* Originally in requirements.h, bumped up and revised to unify with
595 * city_production and worklists. Functions remain in requirements.c
596 * Used in the network protocol. */
597typedef union {
599 struct government *govern;
600 const struct impr_type *building;
601 struct nation_type *nation;
602 struct nation_type *nationality;
605 struct unit_class *uclass;
606 const struct unit_type *utype;
607 struct extra_type *extra;
609 struct nation_group *nationgroup;
610 struct nation_style *style;
611 struct action *action;
612 struct goods_type *good;
614 enum ai_level ai_level;
615 enum citytile_type citytile;
616 enum citystatus_type citystatus;
617 int minsize;
618 int minculture;
619 int minforeignpct;
620 int minyear;
621 int mincalfrag;
622 Output_type_id outputtype;
623 int terrainclass; /* enum terrain_class */
624 int terrainalter; /* enum terrain_alteration */
625 int unitclassflag; /* enum unit_class_flag_id */
626 int unitflag; /* enum unit_flag_id */
627 int terrainflag; /* enum terrain_flag_id */
628 int techflag; /* enum tech_flag_id */
629 int roadflag; /* enum road_flag_id */
630 int extraflag;
631 int diplrel; /* enum diplstate_type or
632 enum diplrel_other */
633 enum ustate_prop unit_state;
634 enum unit_activity activity;
635 enum impr_genus_id impr_genus;
636 int minmoves;
637 int max_tile_units;
638 int minveteran;
639 int min_hit_points;
640 int age;
641 int min_techs;
643 enum topo_flag topo_property;
644 ssetv ssetval;
646
647/* The kind of universals_u (value_union_type was req_source_type).
648 * Used in the network protocol. */
649#define SPECENUM_NAME universals_n
650#define SPECENUM_VALUE0 VUT_NONE
651#define SPECENUM_VALUE0NAME "None"
652#define SPECENUM_VALUE1 VUT_ADVANCE
653#define SPECENUM_VALUE1NAME "Tech"
654#define SPECENUM_VALUE2 VUT_GOVERNMENT
655#define SPECENUM_VALUE2NAME "Gov"
656#define SPECENUM_VALUE3 VUT_IMPROVEMENT
657#define SPECENUM_VALUE3NAME "Building"
658#define SPECENUM_VALUE4 VUT_TERRAIN
659#define SPECENUM_VALUE4NAME "Terrain"
660#define SPECENUM_VALUE5 VUT_NATION
661#define SPECENUM_VALUE5NAME "Nation"
662#define SPECENUM_VALUE6 VUT_UTYPE
663#define SPECENUM_VALUE6NAME "UnitType"
664#define SPECENUM_VALUE7 VUT_UTFLAG
665#define SPECENUM_VALUE7NAME "UnitFlag"
666#define SPECENUM_VALUE8 VUT_UCLASS
667#define SPECENUM_VALUE8NAME "UnitClass"
668#define SPECENUM_VALUE9 VUT_UCFLAG
669#define SPECENUM_VALUE9NAME "UnitClassFlag"
670#define SPECENUM_VALUE10 VUT_OTYPE
671#define SPECENUM_VALUE10NAME "OutputType"
672#define SPECENUM_VALUE11 VUT_SPECIALIST
673#define SPECENUM_VALUE11NAME "Specialist"
674/* Minimum size: at city range means city size */
675#define SPECENUM_VALUE12 VUT_MINSIZE
676#define SPECENUM_VALUE12NAME "MinSize"
677/* AI level of the player */
678#define SPECENUM_VALUE13 VUT_AI_LEVEL
679#define SPECENUM_VALUE13NAME "AI"
680/* More generic terrain type currently "Land" or "Ocean" */
681#define SPECENUM_VALUE14 VUT_TERRAINCLASS
682#define SPECENUM_VALUE14NAME "TerrainClass"
683#define SPECENUM_VALUE15 VUT_MINYEAR
684#define SPECENUM_VALUE15NAME "MinYear"
685/* Terrain alterations that are possible */
686#define SPECENUM_VALUE16 VUT_TERRAINALTER
687#define SPECENUM_VALUE16NAME "TerrainAlter"
688/* Target tile is used by city. */
689#define SPECENUM_VALUE17 VUT_CITYTILE
690#define SPECENUM_VALUE17NAME "CityTile"
691#define SPECENUM_VALUE18 VUT_GOOD
692#define SPECENUM_VALUE18NAME "Good"
693#define SPECENUM_VALUE19 VUT_TERRFLAG
694#define SPECENUM_VALUE19NAME "TerrainFlag"
695#define SPECENUM_VALUE20 VUT_NATIONALITY
696#define SPECENUM_VALUE20NAME "Nationality"
697#define SPECENUM_VALUE21 VUT_ROADFLAG
698#define SPECENUM_VALUE21NAME "RoadFlag"
699#define SPECENUM_VALUE22 VUT_EXTRA
700#define SPECENUM_VALUE22NAME "Extra"
701#define SPECENUM_VALUE23 VUT_TECHFLAG
702#define SPECENUM_VALUE23NAME "TechFlag"
703#define SPECENUM_VALUE24 VUT_ACHIEVEMENT
704#define SPECENUM_VALUE24NAME "Achievement"
705#define SPECENUM_VALUE25 VUT_DIPLREL
706#define SPECENUM_VALUE25NAME "DiplRel"
707#define SPECENUM_VALUE26 VUT_MAXTILEUNITS
708#define SPECENUM_VALUE26NAME "MaxUnitsOnTile"
709#define SPECENUM_VALUE27 VUT_STYLE
710#define SPECENUM_VALUE27NAME "Style"
711#define SPECENUM_VALUE28 VUT_MINCULTURE
712#define SPECENUM_VALUE28NAME "MinCulture"
713#define SPECENUM_VALUE29 VUT_UNITSTATE
714#define SPECENUM_VALUE29NAME "UnitState"
715#define SPECENUM_VALUE30 VUT_MINMOVES
716#define SPECENUM_VALUE30NAME "MinMoveFrags"
717#define SPECENUM_VALUE31 VUT_MINVETERAN
718#define SPECENUM_VALUE31NAME "MinVeteran"
719#define SPECENUM_VALUE32 VUT_MINHP
720#define SPECENUM_VALUE32NAME "MinHitPoints"
721#define SPECENUM_VALUE33 VUT_AGE
722#define SPECENUM_VALUE33NAME "Age"
723#define SPECENUM_VALUE34 VUT_NATIONGROUP
724#define SPECENUM_VALUE34NAME "NationGroup"
725#define SPECENUM_VALUE35 VUT_TOPO
726#define SPECENUM_VALUE35NAME "Topology"
727#define SPECENUM_VALUE36 VUT_IMPR_GENUS
728#define SPECENUM_VALUE36NAME "BuildingGenus"
729#define SPECENUM_VALUE37 VUT_ACTION
730#define SPECENUM_VALUE37NAME "Action"
731#define SPECENUM_VALUE38 VUT_MINTECHS
732#define SPECENUM_VALUE38NAME "MinTechs"
733#define SPECENUM_VALUE39 VUT_EXTRAFLAG
734#define SPECENUM_VALUE39NAME "ExtraFlag"
735#define SPECENUM_VALUE40 VUT_MINCALFRAG
736#define SPECENUM_VALUE40NAME "MinCalFrag"
737#define SPECENUM_VALUE41 VUT_SERVERSETTING
738#define SPECENUM_VALUE41NAME "ServerSetting"
739#define SPECENUM_VALUE42 VUT_CITYSTATUS
740#define SPECENUM_VALUE42NAME "CityStatus"
741#define SPECENUM_VALUE43 VUT_MINFOREIGNPCT
742#define SPECENUM_VALUE43NAME "MinForeignPct"
743#define SPECENUM_VALUE44 VUT_ACTIVITY
744#define SPECENUM_VALUE44NAME "Activity"
745#define SPECENUM_VALUE45 VUT_DIPLREL_TILE
746#define SPECENUM_VALUE45NAME "DiplRelTile"
747#define SPECENUM_VALUE46 VUT_DIPLREL_TILE_O
748#define SPECENUM_VALUE46NAME "DiplRelTileOther"
749#define SPECENUM_VALUE47 VUT_DIPLREL_UNITANY
750#define SPECENUM_VALUE47NAME "DiplRelUnitAny"
751#define SPECENUM_VALUE48 VUT_DIPLREL_UNITANY_O
752#define SPECENUM_VALUE48NAME "DiplRelUnitAnyOther"
753/* Keep this last. */
754#define SPECENUM_COUNT VUT_COUNT
755#include "specenum_gen.h"
757/* Used in the network protocol. */
758struct universal {
760 enum universals_n kind; /* formerly .type and .is_unit */
761};
763/* Used in the network protocol. */
765BV_DEFINE(bv_max_extras, MAX_EXTRA_TYPES);
766BV_DEFINE(bv_startpos_nations, MAX_NUM_STARTPOS_NATIONS);
767
768/* Used in the network protocol. */
769#define SPECENUM_NAME gui_type
770/* Used for options which do not belong to any gui. */
771#define SPECENUM_VALUE0 GUI_STUB
772#define SPECENUM_VALUE0NAME "stub"
773/* GUI_GTK2 remains for now for keeping client options alive until
774 * user has migrated them to gtk3-client */
775#define SPECENUM_VALUE1 GUI_GTK2
776#define SPECENUM_VALUE1NAME "gtk2"
777#define SPECENUM_VALUE2 GUI_GTK3
778#define SPECENUM_VALUE2NAME "gtk3"
779#define SPECENUM_VALUE3 GUI_GTK3_22
780#define SPECENUM_VALUE3NAME "gtk3.22"
781/* GUI_SDL remains for now for keeping client options alive until
782 * user has migrated them to sdl2-client */
783#define SPECENUM_VALUE4 GUI_SDL
784#define SPECENUM_VALUE4NAME "sdl"
785#define SPECENUM_VALUE5 GUI_QT
786#define SPECENUM_VALUE5NAME "qt"
787#define SPECENUM_VALUE6 GUI_SDL2
788#define SPECENUM_VALUE6NAME "sdl2"
789#define SPECENUM_VALUE7 GUI_WEB
790#define SPECENUM_VALUE7NAME "web"
791#define SPECENUM_VALUE8 GUI_GTK4
792#define SPECENUM_VALUE8NAME "gtk4"
793#include "specenum_gen.h"
794
795/* Used in the network protocol. */
796#define SPECENUM_NAME airlifting_style
797#define SPECENUM_BITWISE
798/* Like classical Freeciv. One unit per turn. */
799#define SPECENUM_ZERO AIRLIFTING_CLASSICAL
800/* Allow airlifting from allied cities. */
801#define SPECENUM_VALUE0 AIRLIFTING_ALLIED_SRC
802/* Allow airlifting to allied cities. */
803#define SPECENUM_VALUE1 AIRLIFTING_ALLIED_DEST
804/* Unlimited units to airlift from the source (but always needs an Airport
805 * or equivalent). */
806#define SPECENUM_VALUE2 AIRLIFTING_UNLIMITED_SRC
807/* Unlimited units to airlift to the destination (doesn't require any
808 * Airport or equivalent). */
809#define SPECENUM_VALUE3 AIRLIFTING_UNLIMITED_DEST
810#include "specenum_gen.h"
811
812/* Used in the network protocol. */
813#define SPECENUM_NAME caravan_bonus_style
814#define SPECENUM_VALUE0 CBS_CLASSIC
815#define SPECENUM_VALUE0NAME "Classic"
816#define SPECENUM_VALUE1 CBS_LOGARITHMIC
817#define SPECENUM_VALUE1NAME "Logarithmic"
818#include "specenum_gen.h"
819
820/* Used in the network protocol. */
821#define SPECENUM_NAME persistent_ready
822#define SPECENUM_VALUE0 PERSISTENTR_DISABLED
823#define SPECENUM_VALUE0NAME "Disabled"
824#define SPECENUM_VALUE1 PERSISTENTR_CONNECTED
825#define SPECENUM_VALUE1NAME "Connected"
826#include "specenum_gen.h"
827
828#define SPECENUM_NAME reveal_map
829#define SPECENUM_BITWISE
830/* Reveal only the area around the first units at the beginning. */
831#define SPECENUM_ZERO REVEAL_MAP_NONE
832/* Reveal the (fogged) map at the beginning of the game. */
833#define SPECENUM_VALUE0 REVEAL_MAP_START
834/* Reveal (and unfog) the map for dead players. */
835#define SPECENUM_VALUE1 REVEAL_MAP_DEAD
836#include "specenum_gen.h"
837
838/* Used in the network protocol. */
839#define SPECENUM_NAME gameloss_style
840#define SPECENUM_BITWISE
841/* Like classical Freeciv. No special effects. */
842#define SPECENUM_ZERO GAMELOSS_STYLE_CLASSICAL
843/* Remaining cities are taken by barbarians. */
844#define SPECENUM_VALUE0 GAMELOSS_STYLE_BARB
845#define SPECENUM_VALUE0NAME "Barbarians"
846/* Try civil war. */
847#define SPECENUM_VALUE1 GAMELOSS_STYLE_CWAR
848#define SPECENUM_VALUE1NAME "CivilWar"
849/* Do some looting */
850#define SPECENUM_VALUE2 GAMELOSS_STYLE_LOOT
851#define SPECENUM_VALUE2NAME "Loot"
852#include "specenum_gen.h"
853
854/* Used in the network protocol. */
855#define SPECENUM_NAME tech_upkeep_style
856/* No upkeep */
857#define SPECENUM_VALUE0 TECH_UPKEEP_NONE
858#define SPECENUM_VALUE0NAME "None"
859/* Normal tech upkeep */
860#define SPECENUM_VALUE1 TECH_UPKEEP_BASIC
861#define SPECENUM_VALUE1NAME "Basic"
862/* Tech upkeep multiplied by number of cities */
863#define SPECENUM_VALUE2 TECH_UPKEEP_PER_CITY
864#define SPECENUM_VALUE2NAME "Cities"
865#include "specenum_gen.h"
866
867/* Used in the network protocol. */
868#define SPECENUM_NAME trade_revenue_style
869#define SPECENUM_VALUE0 TRS_CLASSIC
870#define SPECENUM_VALUE0NAME "Classic"
871#define SPECENUM_VALUE1 TRS_SIMPLE
872#define SPECENUM_VALUE1NAME "Simple"
873#include "specenum_gen.h"
874
875/* Used in the network protocol. */
876/* Numerical values used in savegames */
877#define SPECENUM_NAME phase_mode_type
878#define SPECENUM_VALUE0 PMT_CONCURRENT
879#define SPECENUM_VALUE0NAME "Concurrent"
880#define SPECENUM_VALUE1 PMT_PLAYERS_ALTERNATE
881#define SPECENUM_VALUE1NAME "Players Alternate"
882#define SPECENUM_VALUE2 PMT_TEAMS_ALTERNATE
883#define SPECENUM_VALUE2NAME "Teams Alternate"
884#include "specenum_gen.h"
886/* Phase mode change has changed meaning of the phase numbers */
887#define PHASE_INVALIDATED -1
888/* Phase was never known */
889#define PHASE_UNKNOWN -2
891/* Used in the network protocol. */
902};
913};
914
915/* Server setting types. */
916#define SPECENUM_NAME sset_type
917#define SPECENUM_VALUE0 SST_BOOL
918#define SPECENUM_VALUE1 SST_INT
919#define SPECENUM_VALUE2 SST_STRING
920#define SPECENUM_VALUE3 SST_ENUM
921#define SPECENUM_VALUE4 SST_BITWISE
922#define SPECENUM_COUNT SST_COUNT
923#include "specenum_gen.h"
925/* Mark server setting id's. */
926typedef int server_setting_id;
927
928/* Used in the network protocol. */
929#define SPECENUM_NAME extra_category
930#define SPECENUM_VALUE0 ECAT_INFRA
931#define SPECENUM_VALUE0NAME "Infra"
932#define SPECENUM_VALUE1 ECAT_NATURAL
933#define SPECENUM_VALUE1NAME "Natural"
934#define SPECENUM_VALUE2 ECAT_NUISANCE
935#define SPECENUM_VALUE2NAME "Nuisance"
936#define SPECENUM_VALUE3 ECAT_BONUS
937#define SPECENUM_VALUE3NAME "Bonus"
938#define SPECENUM_VALUE4 ECAT_RESOURCE
939#define SPECENUM_VALUE4NAME "Resource"
940#define SPECENUM_COUNT ECAT_COUNT
941#include "specenum_gen.h"
942#define ECAT_NONE ECAT_COUNT
943
944/* Used in the network protocol.
945 * When adding new cause types here, consider also adding them to the
946 * order of pillage preference in get_preferred_pillage() */
947#define SPECENUM_NAME extra_cause
948#define SPECENUM_VALUE0 EC_IRRIGATION
949#define SPECENUM_VALUE0NAME "Irrigation"
950#define SPECENUM_VALUE1 EC_MINE
951#define SPECENUM_VALUE1NAME "Mine"
952#define SPECENUM_VALUE2 EC_ROAD
953#define SPECENUM_VALUE2NAME "Road"
954#define SPECENUM_VALUE3 EC_BASE
955#define SPECENUM_VALUE3NAME "Base"
956#define SPECENUM_VALUE4 EC_POLLUTION
957#define SPECENUM_VALUE4NAME "Pollution"
958#define SPECENUM_VALUE5 EC_FALLOUT
959#define SPECENUM_VALUE5NAME "Fallout"
960#define SPECENUM_VALUE6 EC_HUT
961#define SPECENUM_VALUE6NAME "Hut"
962#define SPECENUM_VALUE7 EC_APPEARANCE
963#define SPECENUM_VALUE7NAME "Appear"
964#define SPECENUM_VALUE8 EC_RESOURCE
965#define SPECENUM_VALUE8NAME "Resource"
966#define SPECENUM_COUNT EC_COUNT
967#define SPECENUM_BITVECTOR bv_causes
969#define EC_NONE EC_COUNT
970#define EC_SPECIAL (EC_NONE + 1)
971#define EC_DEFENSIVE (EC_NONE + 2)
972#define EC_NATURAL_DEFENSIVE (EC_NONE + 3)
973#define EC_NOT_AGGRESSIVE (EC_NONE + 4)
974#define EC_LAST (EC_NONE + 5)
976/* struct extra_type reserve 16 bits (0-15) for these. */
977FC_STATIC_ASSERT(EC_COUNT < 16, extra_causes_over_limit);
978
979/* Used in the network protocol. */
980#define SPECENUM_NAME extra_rmcause
981#define SPECENUM_VALUE0 ERM_PILLAGE
982#define SPECENUM_VALUE0NAME "Pillage"
983#define SPECENUM_VALUE1 ERM_CLEANPOLLUTION
984#define SPECENUM_VALUE1NAME "CleanPollution"
985#define SPECENUM_VALUE2 ERM_CLEANFALLOUT
986#define SPECENUM_VALUE2NAME "CleanFallout"
987#define SPECENUM_VALUE3 ERM_DISAPPEARANCE
988#define SPECENUM_VALUE3NAME "Disappear"
989#define SPECENUM_VALUE4 ERM_ENTER
990#define SPECENUM_VALUE4NAME "Enter"
991#define SPECENUM_COUNT ERM_COUNT
992#define SPECENUM_BITVECTOR bv_rmcauses
993#include "specenum_gen.h"
994#define ERM_NONE ERM_COUNT
995
996/* struct extra_type reserve 8 bits (0-7) for these. */
997FC_STATIC_ASSERT(ERM_COUNT < 8, extra_rmcauses_over_limit);
998
999#define SPECENUM_NAME extra_unit_seen_type
1000#define SPECENUM_VALUE0 EUS_NORMAL
1001#define SPECENUM_VALUE0NAME "Normal"
1002#define SPECENUM_VALUE1 EUS_HIDDEN
1003#define SPECENUM_VALUE1NAME "Hidden"
1004#include "specenum_gen.h"
1005
1006/* Used in the network protocol. */
1007#define SPECENUM_NAME achievement_type
1008#define SPECENUM_VALUE0 ACHIEVEMENT_SPACESHIP
1009#define SPECENUM_VALUE0NAME "Spaceship"
1010#define SPECENUM_VALUE1 ACHIEVEMENT_MAP
1011#define SPECENUM_VALUE1NAME "Map_Known"
1012#define SPECENUM_VALUE2 ACHIEVEMENT_MULTICULTURAL
1013#define SPECENUM_VALUE2NAME "Multicultural"
1014#define SPECENUM_VALUE3 ACHIEVEMENT_CULTURED_CITY
1015#define SPECENUM_VALUE3NAME "Cultured_City"
1016#define SPECENUM_VALUE4 ACHIEVEMENT_CULTURED_NATION
1017#define SPECENUM_VALUE4NAME "Cultured_Nation"
1018#define SPECENUM_VALUE5 ACHIEVEMENT_LUCKY
1019#define SPECENUM_VALUE5NAME "Lucky"
1020#define SPECENUM_VALUE6 ACHIEVEMENT_HUTS
1021#define SPECENUM_VALUE6NAME "Huts"
1022#define SPECENUM_VALUE7 ACHIEVEMENT_METROPOLIS
1023#define SPECENUM_VALUE7NAME "Metropolis"
1024#define SPECENUM_VALUE8 ACHIEVEMENT_LITERATE
1025#define SPECENUM_VALUE8NAME "Literate"
1026#define SPECENUM_VALUE9 ACHIEVEMENT_LAND_AHOY
1027#define SPECENUM_VALUE9NAME "Land_Ahoy"
1028#define SPECENUM_COUNT ACHIEVEMENT_COUNT
1029#include "specenum_gen.h"
1030
1031/* Used in the network protocol. */
1032#define SPECENUM_NAME mood_type
1033#define SPECENUM_VALUE0 MOOD_PEACEFUL
1034#define SPECENUM_VALUE0NAME "Peaceful"
1035#define SPECENUM_VALUE1 MOOD_COMBAT
1036#define SPECENUM_VALUE1NAME "Combat"
1037#define SPECENUM_COUNT MOOD_COUNT
1038#include "specenum_gen.h"
1039
1040/* Used in the network protocol. */
1041#define SPECENUM_NAME action_decision
1042/* Doesn't need the player to decide what action to take. */
1043#define SPECENUM_VALUE0 ACT_DEC_NOTHING
1044#define SPECENUM_VALUE0NAME N_("nothing")
1045/* Wants a decision because of something done to the actor. */
1046#define SPECENUM_VALUE1 ACT_DEC_PASSIVE
1047#define SPECENUM_VALUE1NAME N_("passive")
1048/* Wants a decision because of something the actor did. */
1049#define SPECENUM_VALUE2 ACT_DEC_ACTIVE
1050#define SPECENUM_VALUE2NAME N_("active")
1051#define SPECENUM_COUNT ACT_DEC_COUNT
1052#include "specenum_gen.h"
1053
1054/*
1055 * Action probability
1056 *
1057 * An action probability is the probability that an action will be
1058 * successful under the given circumstances. It is an interval that
1059 * includes the end points. An end point goes from 0% to 100%.
1060 * Alternatively it can signal a special case.
1061 *
1062 * End point values from 0 up to and including 200 should be understood as
1063 * the chance of success measured in half percentage points. In other words:
1064 * The value 3 indicates that the chance is 1.5%. The value 10 indicates
1065 * that the chance is 5%. The probability of a minimum may be rounded down
1066 * to the nearest half percentage point. The probability of a maximum may
1067 * be rounded up to the nearest half percentage point.
1068 *
1069 * Values with a higher minimum than maximum are special case values. All
1070 * special cases should be declared and documented below. An undocumented
1071 * value in this range should be considered a bug. If a special value for
1072 * internal use is needed please avoid the range from and including 0 up
1073 * to and including 255.
1074 *
1075 * [0, 0] ACTPROB_IMPOSSIBLE is another way of saying that the
1076 * probability is 0%. It isn't really a special value since it
1077 * is in range.
1078 *
1079 * [200, 200] ACTPROB_CERTAIN is another way of saying that the probability
1080 * is 100%. It isn't really a special value since it is in range.
1081 *
1082 * [253, 0] ACTPROB_NA indicates that no probability should exist.
1083 *
1084 * [254, 0] ACTPROB_NOT_IMPLEMENTED indicates that support for finding
1085 * this probability currently is missing.
1086 *
1087 * [0, 200] ACTPROB_NOT_KNOWN indicates that the player don't know enough
1088 * to find out. It is caused by the probability depending on a
1089 * rule that depends on game state the player don't have access
1090 * to. It may be possible for the player to later gain access to
1091 * this game state. It isn't really a special value since it is
1092 * in range.
1094struct act_prob {
1095 int min;
1096 int max;
1103};
1104
1105/* Road type compatibility with old specials based roads.
1106 * Used in the network protocol. */
1108
1109/*
1110 * Maximum number of trade routes a city can have in any situation.
1111 * Changing this changes network protocol.
1112 */
1113#define MAX_TRADE_ROUTES 5
1114
1115/* Used in the network protocol. */
1116#define SPECENUM_NAME goods_selection_method
1117#define SPECENUM_VALUE0 GSM_LEAVING
1118#define SPECENUM_VALUE0NAME "Leaving"
1119#define SPECENUM_VALUE1 GSM_ARRIVAL
1120#define SPECENUM_VALUE1NAME "Arrival"
1147};
1157};
1158
1159/* Used in the network protocol. */
1160#define SPECENUM_NAME tech_cost_style
1161#define SPECENUM_VALUE0 TECH_COST_CIV1CIV2
1162#define SPECENUM_VALUE0NAME "Civ I|II"
1163#define SPECENUM_VALUE1 TECH_COST_CLASSIC
1164#define SPECENUM_VALUE1NAME "Classic"
1165#define SPECENUM_VALUE2 TECH_COST_CLASSIC_PRESET
1166#define SPECENUM_VALUE2NAME "Classic+"
1167#define SPECENUM_VALUE3 TECH_COST_EXPERIMENTAL
1168#define SPECENUM_VALUE3NAME "Experimental"
1169#define SPECENUM_VALUE4 TECH_COST_EXPERIMENTAL_PRESET
1170#define SPECENUM_VALUE4NAME "Experimental+"
1171#define SPECENUM_VALUE5 TECH_COST_LINEAR
1172#define SPECENUM_VALUE5NAME "Linear"
1173#include "specenum_gen.h"
1174
1175/* Used in the network protocol. */
1176#define SPECENUM_NAME tech_leakage_style
1177#define SPECENUM_VALUE0 TECH_LEAKAGE_NONE
1178#define SPECENUM_VALUE0NAME "None"
1179#define SPECENUM_VALUE1 TECH_LEAKAGE_EMBASSIES
1180#define SPECENUM_VALUE1NAME "Embassies"
1181#define SPECENUM_VALUE2 TECH_LEAKAGE_PLAYERS
1182#define SPECENUM_VALUE2NAME "All Players"
1183#define SPECENUM_VALUE3 TECH_LEAKAGE_NO_BARBS
1184#define SPECENUM_VALUE3NAME "Normal Players"
1185#include "specenum_gen.h"
1186
1187/* Used in the network protocol. */
1188#define SPECENUM_NAME gold_upkeep_style
1189#define SPECENUM_VALUE0 GOLD_UPKEEP_CITY
1190#define SPECENUM_VALUE0NAME "City"
1191#define SPECENUM_VALUE1 GOLD_UPKEEP_MIXED
1192#define SPECENUM_VALUE1NAME "Mixed"
1193#define SPECENUM_VALUE2 GOLD_UPKEEP_NATION
1194#define SPECENUM_VALUE2NAME "Nation"
1195#include "specenum_gen.h"
1196
1197/* Used in the network protocol. */
1198#define SPECENUM_NAME vision_layer
1199#define SPECENUM_VALUE0 V_MAIN
1200#define SPECENUM_VALUE0NAME "Main"
1201#define SPECENUM_VALUE1 V_INVIS
1202#define SPECENUM_VALUE1NAME "Stealth"
1203#define SPECENUM_VALUE2 V_SUBSURFACE
1204#define SPECENUM_VALUE2NAME "Subsurface"
1205#define SPECENUM_COUNT V_COUNT
1208typedef float adv_want;
1209#define ADV_WANT_PRINTF "%f"
1210
1211/* Used in the network protocol. */
1212#define SPECENUM_NAME setting_default_level
1213#define SPECENUM_VALUE0 SETDEF_INTERNAL
1214#define SPECENUM_VALUE0NAME "Internal"
1215#define SPECENUM_VALUE1 SETDEF_RULESET
1216#define SPECENUM_VALUE1NAME "Ruleset"
1217#define SPECENUM_VALUE2 SETDEF_CHANGED
1218#define SPECENUM_VALUE2NAME "Changed"
1219#include "specenum_gen.h"
1220
1221/* Used in the network protocol. */
1222#define SPECENUM_NAME capital_type
1223#define SPECENUM_VALUE0 CAPITAL_NOT
1224#define SPECENUM_VALUE0NAME "Not"
1225#define SPECENUM_VALUE1 CAPITAL_SECONDARY
1226#define SPECENUM_VALUE1NAME "Secondary"
1227#define SPECENUM_VALUE2 CAPITAL_PRIMARY
1228#define SPECENUM_VALUE2NAME "Primary"
1229#include "specenum_gen.h"
1230
1231/* Used in the network protocol. */
1232#define SPECENUM_NAME wonder_visib_type
1233#define SPECENUM_VALUE0 WV_ALWAYS
1234#define SPECENUM_VALUE0NAME "Always"
1235#define SPECENUM_VALUE1 WV_NEVER
1236#define SPECENUM_VALUE1NAME "Never"
1237#include "specenum_gen.h"
1238
1239/* Used in the network protocol. */
1240#define SPECENUM_NAME transp_def_type
1241#define SPECENUM_VALUE0 TDT_ALIGHT
1242#define SPECENUM_VALUE0NAME "Alight"
1243#define SPECENUM_VALUE1 TDT_BLOCKED
1244#define SPECENUM_VALUE1NAME "Blocked"
1245#include "specenum_gen.h"
1246
1247#ifdef __cplusplus
1248}
1249#endif /* __cplusplus */
1250
1251#endif /* FC__FC_TYPES_H */
#define BV_DEFINE(name, bits)
Definition bitvector.h:132
const char * ai_level_name_update_cb(const char *old)
Definition ai.c:368
int Road_type_id
Definition fc_types.h:354
trait_dist_mode
Definition fc_types.h:897
@ TDM_FIXED
Definition fc_types.h:898
@ TDM_EVEN
Definition fc_types.h:899
enum unit_activity Activity_type_id
Definition fc_types.h:349
float adv_want
Definition fc_types.h:1206
road_compat
Definition fc_types.h:1105
@ ROCO_RAILROAD
Definition fc_types.h:1105
@ ROCO_NONE
Definition fc_types.h:1105
@ ROCO_RIVER
Definition fc_types.h:1105
@ ROCO_ROAD
Definition fc_types.h:1105
int Goods_type_id
Definition fc_types.h:357
diplomacy_mode
Definition fc_types.h:903
@ DIPLO_NO_MIXED
Definition fc_types.h:908
@ DIPLO_FOR_TEAMS
Definition fc_types.h:909
@ DIPLO_NO_AIS
Definition fc_types.h:907
@ DIPLO_FOR_HUMANS
Definition fc_types.h:905
@ DIPLO_FOR_ALL
Definition fc_types.h:904
@ DIPLO_FOR_AIS
Definition fc_types.h:906
@ DIPLO_DISABLED
Definition fc_types.h:910
environment_upset_type
Definition fc_types.h:1129
@ EUT_NUCLEAR_WINTER
Definition fc_types.h:1131
@ EUT_GLOBAL_WARMING
Definition fc_types.h:1130
int server_setting_id
Definition fc_types.h:924
int Tech_type_id
Definition fc_types.h:347
unsigned char citizens
Definition fc_types.h:358
int Impr_type_id
Definition fc_types.h:346
int ssetv
Definition fc_types.h:578
req_problem_type
Definition fc_types.h:584
@ RPT_CERTAIN
Definition fc_types.h:586
@ RPT_POSSIBLE
Definition fc_types.h:585
revolen_type
Definition fc_types.h:1134
@ REVOLEN_RANDOM
Definition fc_types.h:1136
@ REVOLEN_RANDQUICK
Definition fc_types.h:1138
@ REVOLEN_FIXED
Definition fc_types.h:1135
@ REVOLEN_QUICKENING
Definition fc_types.h:1137
adv_unit_task
Definition fc_types.h:340
@ AUT_BUILD_CITY
Definition fc_types.h:340
@ AUT_NONE
Definition fc_types.h:340
@ AUT_AUTO_SETTLER
Definition fc_types.h:340
int Unit_Class_id
Definition fc_types.h:388
int Nation_type_id
Definition fc_types.h:350
int Terrain_type_id
Definition fc_types.h:343
int action_id
Definition fc_types.h:359
int Specialist_type_id
Definition fc_types.h:345
int Government_type_id
Definition fc_types.h:351
test_result
Definition fc_types.h:1097
@ TR_ALREADY_SOLD
Definition fc_types.h:1100
@ TR_OTHER_FAILURE
Definition fc_types.h:1099
@ TR_SUCCESS
Definition fc_types.h:1098
#define MAX_NUM_PLAYER_SLOTS
Definition fc_types.h:32
happyborders_type
Definition fc_types.h:1141
@ HB_ALLIANCE
Definition fc_types.h:1144
@ HB_DISABLED
Definition fc_types.h:1142
@ HB_NATIONAL
Definition fc_types.h:1143
FC_STATIC_ASSERT(EC_COUNT< 16, extra_causes_over_limit)
int Resource_type_id
Definition fc_types.h:344
#define MAX_EXTRA_TYPES
Definition fc_types.h:50
#define MAX_NUM_STARTPOS_NATIONS
Definition fc_types.h:61
spaceship_place_type
Definition fc_types.h:1148
@ SSHIP_PLACE_PROPULSION
Definition fc_types.h:1151
@ SSHIP_PLACE_STRUCTURAL
Definition fc_types.h:1149
@ SSHIP_PLACE_LIFE_SUPPORT
Definition fc_types.h:1153
@ SSHIP_PLACE_SOLAR_PANELS
Definition fc_types.h:1154
@ SSHIP_PLACE_FUEL
Definition fc_types.h:1150
@ SSHIP_PLACE_HABITATION
Definition fc_types.h:1152
int Unit_type_id
Definition fc_types.h:352
victory_condition_type
Definition fc_types.h:1122
@ VC_SPACERACE
Definition fc_types.h:1123
@ VC_CULTURE
Definition fc_types.h:1125
@ VC_ALLIED
Definition fc_types.h:1124
int Disaster_type_id
Definition fc_types.h:355
output_type_id
Definition fc_types.h:90
@ O_SHIELD
Definition fc_types.h:91
@ O_FOOD
Definition fc_types.h:91
@ O_TRADE
Definition fc_types.h:91
@ O_SCIENCE
Definition fc_types.h:91
@ O_LUXURY
Definition fc_types.h:91
@ O_GOLD
Definition fc_types.h:91
@ O_LAST
Definition fc_types.h:91
signed short Continent_id
Definition fc_types.h:342
borders_mode
Definition fc_types.h:890
@ BORDERS_ENABLED
Definition fc_types.h:892
@ BORDERS_DISABLED
Definition fc_types.h:891
@ BORDERS_SEE_INSIDE
Definition fc_types.h:893
@ BORDERS_EXPAND
Definition fc_types.h:894
int Base_type_id
Definition fc_types.h:353
int Multiplier_type_id
Definition fc_types.h:356
enum output_type_id Output_type_id
Definition fc_types.h:348
override_bool
Definition fc_types.h:84
@ OVERRIDE_TRUE
Definition fc_types.h:84
@ NO_OVERRIDE
Definition fc_types.h:84
@ OVERRIDE_FALSE
Definition fc_types.h:84
Definition city.h:309
Definition tile.h:49
Definition unit.h:138
enum universals_n kind
Definition fc_types.h:758
universals_u value
Definition fc_types.h:757