2 * Empire - A multi-player, client/server Internet based war game.
3 * Copyright (C) 1986-2005, Dave Pare, Jeff Bailey, Thomas Ruschak,
4 * Ken Stevens, Steve McClure
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 * See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
23 * related information and legal notices. It is expected that any future
24 * projects/authors will amend these files as needed.
28 * econfig-spec.h: Combined include for optlist.h and emp_config.c
32 * Preprocessor of MSC C++ 6.0 (VC98) is broken and chokes on empty
33 * macro arguments. Fixed in MSC C++ 7.0. Work around: pass
34 * useless token `unused'.
37 #if defined(EMP_CONFIG_C_OUTPUT)
39 #define EMPCFONLYC(fvname, vname, vtype, ctype, num, descr) \
40 { (fvname), (ctype), &(vname), (num), (descr) },
41 #define EMPCFBOTH(fvname, vname, vtype, ctype, num, descr) \
42 { (fvname), (ctype), &(vname), (num), (descr) },
44 #elif defined(EMP_CONFIG_H_OUTPUT)
46 #define EMPCFONLYC(fvname, vname, vtype, ctype, num, descr)
47 #define EMPCFBOTH(fvname, vname, vtype, ctype, num, descr) \
50 #endif /* EMP_CONFIG_C_OUTPUT || EMP_CONFIG_H_OUTPUT */
52 #define EMPCF_COMMENT(comment) \
53 EMPCFONLYC("", emp_config_dummy, unused , NSC_NOTYPE, 0, (comment))
55 /* things that can be changed */
56 EMPCF_COMMENT("\n### Server configuration and information")
57 EMPCFBOTH("data", datadir, char *, NSC_STRING, KM_INTERNAL,
58 "Directory the data is stored in")
59 EMPCFBOTH("info", infodir, char *, NSC_STRING, KM_INTERNAL,
60 "Directory the info pages are stored in")
61 EMPCFBOTH("listen_addr", listen_addr, char *, NSC_STRING, KM_INTERNAL,
62 "Local address the server should listen on. \"\" listens on all.")
63 EMPCFBOTH("port", loginport, char *, NSC_STRING, KM_INTERNAL,
64 "TCP/IP port the server will start up on")
65 EMPCFBOTH("privname", privname, char *, NSC_STRING, 0,
67 EMPCFBOTH("privlog", privlog, char *, NSC_STRING, 0,
68 "E-mail of the deity")
69 EMPCFBOTH("WORLD_X", WORLD_X, int, NSC_INT, 0,
70 "World size X dimension (enforced to be even by subtracting 1 if necessary)")
71 EMPCFBOTH("WORLD_Y", WORLD_Y, int, NSC_INT, 0,
72 "World size Y dimension")
74 EMPCF_COMMENT("\n\n### Update policy")
75 EMPCFBOTH("update_policy", update_policy, int, NSC_INT, 0,
76 "0 - normal, 1 - update_times, 2 - blitz, 3 - demand only")
77 EMPCFBOTH("etu_per_update", etu_per_update, int, NSC_INT, 0,
78 "Number of ETUs per update")
79 EMPCFBOTH("s_p_etu", s_p_etu, int, NSC_INT, 0,
80 "Seconds per etu, updates will occur every s_p_etu * etu_per_update seconds")
81 EMPCFBOTH("adj_update", adj_update, int, NSC_INT, KM_INTERNAL,
82 "Move the update forward or backward (in seconds)")
83 EMPCFBOTH("update_window", update_window, int, NSC_INT, 0,
84 "Window the update will occur in (in seconds) before and after the update time")
85 EMPCFBOTH("update_times", update_times, char *, NSC_STRING, 0,
86 "Times when updates occur under policy #1. Must coincide with schedule.")
87 EMPCFBOTH("hourslop", hourslop, int, NSC_INT, KM_INTERNAL,
88 "Number of minutes update check can slip to match update_times")
89 EMPCFBOTH("blitz_time", blitz_time, int, NSC_INT, 0,
90 "Number of minutes between updates under policy #2.")
91 EMPCFBOTH("pre_update_hook", pre_update_hook, char *, NSC_STRING, 0,
92 "Shell command run right before the update.")
94 EMPCF_COMMENT("\n\n### Demand update policy")
95 EMPCFBOTH("update_demandpolicy", update_demandpolicy, int, NSC_INT, 0,
96 "0 - emp_tm checks, 1 - after setting, 2 - demand updates disabled")
97 EMPCFBOTH("update_wantmin", update_wantmin, int, NSC_INT, 0,
98 "number of requests needed for demand update")
99 EMPCFBOTH("update_missed", update_missed, int, NSC_INT, 0,
100 "number of demand updates country can miss before veto update")
101 EMPCFBOTH("update_demandtimes", update_demandtimes, char *, NSC_STRING, 0,
102 "Times when demand updates can occur. Ranges CANNOT cross midnight.")
104 EMPCF_COMMENT("\n\n### Game hours restrictions")
105 EMPCFBOTH("game_days", game_days, char *, NSC_STRING, 0,
106 "Days game is up and running (Su Mo Tu We Th Fr Sa)")
107 EMPCFBOTH("game_hours", game_hours, char *, NSC_STRING, 0,
108 "Hours game is up and running (6:00-18:00)")
110 EMPCF_COMMENT("\n\n### Options\n")
111 EMPCFONLYC("option", emp_config_dummy, unused , NSC_NOTYPE, 0, NULL)
112 EMPCFONLYC("nooption", emp_config_dummy, unused , NSC_NOTYPE, 0, NULL)
115 EMPCF_COMMENT("\n\n### Countries")
116 EMPCFBOTH("btu_build_rate", btu_build_rate, float, NSC_FLOAT, 0,
117 "Rate at which BTUs accumulate (etu * civ * eff * btu_build_rate)")
118 EMPCFBOTH("m_m_p_d", m_m_p_d, int, NSC_INT, 0,
119 "Maximum minutes per day a country is allowed to be logged in")
120 EMPCFBOTH("max_btus", max_btus, int, NSC_INT, 0,
121 "Maximum number of BTUs a country can have")
122 EMPCFBOTH("max_idle", max_idle, int, NSC_INT, 0,
123 "Maximum number of minutes a player can sit idle while logged in")
124 EMPCFBOTH("players_at_00", players_at_00, int, NSC_INT, 0,
125 "Players have their coordinate system at deity 0,0 (0 - no, 1 - yes)")
126 EMPCFBOTH("at_least_one_100", at_least_one_100, int, NSC_INT, KM_INTERNAL,
127 "Initialize new countries with at least one sector with 100 of all resource")
128 EMPCFBOTH("start_cash", start_cash, long, NSC_LONG, 0,
129 "Starting cash for new countries")
130 EMPCFBOTH("powe_cost", powe_cost, double, NSC_DOUBLE, 0,
131 "Number of BTUs needed to generate a new power report")
132 EMPCFBOTH("war_cost", War_Cost, int, NSC_INT, 0,
133 "Cost to declare war (if SLOW_WAR is on)")
135 EMPCF_COMMENT("\n\n### Technology/Research/Education/Happiness")
136 EMPCFBOTH("easy_tech", easy_tech, float, NSC_FLOAT, 0,
137 "Amount of tech built with no penalty")
138 EMPCFBOTH("start_tech", start_technology, float, NSC_FLOAT, KM_INTERNAL,
139 "Starting technology for new countries")
140 EMPCFBOTH("start_happy", start_happiness, float, NSC_FLOAT, KM_INTERNAL,
141 "Starting happiness for new countries")
142 EMPCFBOTH("start_research", start_research, float, NSC_FLOAT, KM_INTERNAL,
143 "Starting research for new countries")
144 EMPCFBOTH("start_edu", start_education, float, NSC_FLOAT, KM_INTERNAL,
145 "Starting education for new countries")
146 EMPCFBOTH("level_age_rate", level_age_rate, float, NSC_FLOAT, 0,
147 "ETU rate at which tech decays (0 -> no decline)")
148 EMPCFBOTH("tech_log_base", tech_log_base, float, NSC_FLOAT, 0,
149 "Log base to apply to tech breakthroughs above the easy tech level")
150 EMPCFBOTH("ally_factor", ally_factor, float, NSC_FLOAT, 0,
151 "Shared tech with allies (1 / ally_factor)")
152 EMPCFBOTH("edu_avg", edu_avg, float, NSC_FLOAT, 0,
153 "Number of ETUs education is averaged over")
154 EMPCFBOTH("hap_avg", hap_avg, float, NSC_FLOAT, 0,
155 "Number of ETUs happiness is averaged over")
156 EMPCFBOTH("edu_cons", edu_cons, double, NSC_DOUBLE, 0,
157 "Education consumption (1 breakthrough per edu_cons)")
158 EMPCFBOTH("hap_cons", hap_cons, double, NSC_DOUBLE, 0,
159 "Happiness consumption (1 breakthrough per hap_cons)")
161 EMPCF_COMMENT("\n\n### Sectors")
162 EMPCFBOTH("startmob", startmob, int, NSC_INT, KM_INTERNAL,
163 "Starting mobility for sanctuaries")
164 EMPCFBOTH("sect_mob_scale", sect_mob_scale, float, NSC_FLOAT, 0,
165 "Sector mobility accumulation (sect_mob_scale * ETUs per update)")
166 EMPCFBOTH("sect_mob_max", sect_mob_max, int, NSC_INT, 0,
167 "Maximum mobility for sectors")
168 EMPCFBOTH("buil_bh", buil_bh, int, NSC_INT, 0,
169 "Number of hcms required to build a bridge span")
170 EMPCFBOTH("buil_bc", buil_bc, double, NSC_DOUBLE, 0,
171 "Cash required to build a bridge span")
172 EMPCFBOTH("buil_bt", buil_bt, double, NSC_DOUBLE, 0,
173 "Technology required to build a bridge span")
174 EMPCFBOTH("buil_tower_bh", buil_tower_bh, int, NSC_INT, 0,
175 "Number of hcms required to build a bridge tower")
176 EMPCFBOTH("buil_tower_bc", buil_tower_bc, double, NSC_DOUBLE, 0,
177 "Cash required to build a bridge tower")
178 EMPCFBOTH("buil_tower_bt", buil_tower_bt, double, NSC_DOUBLE, 0,
179 "Technology required to build a bridge tower")
181 EMPCF_COMMENT("\n\n### Land Units")
182 EMPCFBOTH("land_mob_scale", land_mob_scale, float, NSC_FLOAT, 0,
183 "Land unit mobility accumulation (land_mob_scale * ETUs per update)")
184 EMPCFBOTH("land_grow_scale", land_grow_scale, float, NSC_FLOAT, 0,
185 "How fast efficiency grows for land units each update (* ETUs)")
186 EMPCFBOTH("land_mob_max", land_mob_max, int, NSC_INT, 0,
187 "Maximum mobility for land units")
188 EMPCFBOTH("money_land", money_land, double, NSC_DOUBLE, 0,
189 "Cost per ETU to maintain land units (percentage of unit price)")
190 EMPCFBOTH("morale_base", morale_base, int, NSC_INT, KM_INTERNAL,
191 "Base level for setting morale of land units")
193 EMPCF_COMMENT("\n\n### Planes")
194 EMPCFBOTH("plane_mob_scale", plane_mob_scale, float, NSC_FLOAT, 0,
195 "Plane mobility accumulation (plane_mob_scale * ETUs per update)")
196 EMPCFBOTH("plane_grow_scale", plane_grow_scale, float, NSC_FLOAT, 0,
197 "How fast efficiency grows for planes each update (* ETUs)")
198 EMPCFBOTH("plane_mob_max", plane_mob_max, int, NSC_INT, 0,
199 "Maximum mobility for planes")
200 EMPCFBOTH("money_plane", money_plane, double, NSC_DOUBLE, 0,
201 "Cost per ETU to maintain planes (percentage of plane price)")
203 EMPCF_COMMENT("\n\n### Ships")
204 EMPCFBOTH("ship_mob_scale", ship_mob_scale, float, NSC_FLOAT, 0,
205 "Ship mobility accumulation (ship_mob_scale * ETUs per update)")
206 EMPCFBOTH("ship_grow_scale", ship_grow_scale, float, NSC_FLOAT, 0,
207 "How fast efficiency grows for ships each update (* ETUs)")
208 EMPCFBOTH("ship_mob_max", ship_mob_max, int, NSC_INT, 0,
209 "Maximum mobility for ships")
210 EMPCFBOTH("money_ship", money_ship, double, NSC_DOUBLE, 0,
211 "Cost per ETU to maintain ships (percentage of ship price)")
212 EMPCFBOTH("torpedo_damage", torpedo_damage, int, NSC_INT, 0,
213 "Torpedo damage (damage is X + 1dX + 1dX)")
215 EMPCF_COMMENT("\n\n### Combat/Damage")
216 EMPCFBOTH("fort_max_interdiction_range", fort_max_interdiction_range, int, NSC_INT, 0,
217 "Maximum range (in sectors) a fort will try to interdict another country")
218 EMPCFBOTH("land_max_interdiction_range", land_max_interdiction_range, int, NSC_INT, 0,
219 "Maximum range (in sectors) a land unit will try to interdict another country")
220 EMPCFBOTH("ship_max_interdiction_range", ship_max_interdiction_range, int, NSC_INT, 0,
221 "Maximum range (in sectors) a ship will try to interdict another country")
222 EMPCFBOTH("flakscale", flakscale, float, NSC_FLOAT, 0,
223 "Scale factor for flak damage")
224 EMPCFBOTH("combat_mob", combat_mob, double, NSC_DOUBLE, 0,
225 "How much mobility do units spend for combat (* casualties/bodies)")
226 EMPCFBOTH("people_damage", people_damage, double, NSC_DOUBLE, 0,
227 "People take this amount of normal damage")
228 EMPCFBOTH("unit_damage", unit_damage, double, NSC_DOUBLE, 0,
229 "Land units take this amount of normal damage")
230 EMPCFBOTH("collateral_dam", collateral_dam, double, NSC_DOUBLE, 0,
231 "Side effect damage amount done to sector")
232 EMPCFBOTH("assault_penalty", assault_penalty, double, NSC_DOUBLE, 0,
233 "Amount of normal attacking efficiency for paratroopers and assaulting")
234 EMPCFBOTH("fire_range_factor", fire_range_factor, float, NSC_FLOAT, 0,
235 "Scale normal firing ranges by this amount")
236 EMPCFBOTH("sect_mob_neg_factor", sect_mob_neg_factor, int, NSC_INT, 0,
237 "Amount of negative mobility a sector has after takeover (ETU / x) (MOB_ACCESS)")
238 EMPCFBOTH("mission_mob_cost", mission_mob_cost, double, NSC_DOUBLE, 0,
239 "Cost to put something on a mission (percentage of max mob)")
241 EMPCF_COMMENT("\n\n### Populace")
242 EMPCFBOTH("uwbrate", uwbrate, double, NSC_DOUBLE, 0,
243 "Birth rate for uw's")
244 EMPCFBOTH("money_civ", money_civ, double, NSC_DOUBLE, 0,
245 "Money gained from taxes on a civilian in one ETU")
246 EMPCFBOTH("money_mil", money_mil, double, NSC_DOUBLE, 0,
247 "Money gained from taxes on an active soldier in one ETU")
248 EMPCFBOTH("money_res", money_res, double, NSC_DOUBLE, 0,
249 "Money gained from taxes on a soldier on active reserve in one ETU")
250 EMPCFBOTH("money_uw", money_uw, double, NSC_DOUBLE, 0,
251 "Money gained from taxes on an uncompensated worker in one ETU")
252 EMPCFBOTH("babyeat", babyeat, double, NSC_DOUBLE, 0,
253 "Amount of food to mature 1 baby into a civilian")
254 EMPCFBOTH("bankint", bankint, double, NSC_DOUBLE, 0,
255 "Bank dollar gain (per bar per etu)")
256 EMPCFBOTH("eatrate", eatrate, double, NSC_DOUBLE, 0,
257 "Food eating rate for mature people")
258 EMPCFBOTH("fcrate", fcrate, double, NSC_DOUBLE, 0,
259 "Food cultivation rate (* workforce in sector)")
260 EMPCFBOTH("fgrate", fgrate, double, NSC_DOUBLE, 0,
261 "Food growth rate (* fertility of sector)")
262 EMPCFBOTH("obrate", obrate, double, NSC_DOUBLE, 0,
263 "Civilian birth rate")
264 EMPCFBOTH("rollover_avail_max", rollover_avail_max, int, NSC_INT, 0,
265 "Maximum avail that can roll over an update")
267 EMPCF_COMMENT("\n\n### Nukes")
268 EMPCFBOTH("decay_per_etu", decay_per_etu, double, NSC_DOUBLE, 0,
269 "Decay of fallout per ETU")
270 EMPCFBOTH("fallout_spread", fallout_spread, double, NSC_DOUBLE, 0,
271 "Amount of fallout that leaks into surrounding sectors")
272 EMPCFBOTH("drnuke_const", drnuke_const, float, NSC_FLOAT, 0,
273 "Amount of research to tech needed to build a nuke (if DRNUKE is on)")
275 EMPCF_COMMENT("\n\n### Market/Trade")
276 EMPCFBOTH("MARK_DELAY", MARK_DELAY, int, NSC_INT, 0,
277 "Number of seconds commodities stay on the market for bidding")
278 EMPCFBOTH("TRADE_DELAY", TRADE_DELAY, int, NSC_INT, 0,
279 "Number of seconds ships, planes, and units stay on the market for bidding")
280 EMPCFBOTH("buytax", buytax, double, NSC_DOUBLE, 0,
281 "Tax (in percentage points) charged to the buyer on market purchases")
282 EMPCFBOTH("tradetax", tradetax, double, NSC_DOUBLE, 0,
283 "Amount of a trade transaction the seller makes (the rest is tax)")
285 EMPCF_COMMENT("\n\n### Trade ships")
286 EMPCFBOTH("trade_1_dist", trade_1_dist, int, NSC_INT, 0,
287 "Less than this distance no money for cashing in")
288 EMPCFBOTH("trade_2_dist", trade_2_dist, int, NSC_INT, 0,
289 "Less than this distance gets trade_1 money for cashing in")
290 EMPCFBOTH("trade_3_dist", trade_3_dist, int, NSC_INT, 0,
291 "Less than this distance gets trade_2 money for cashing in (>= gets trade_3")
292 EMPCFBOTH("trade_1", trade_1, float, NSC_FLOAT, 0,
293 "Return per sector on trade_1 distance amount")
294 EMPCFBOTH("trade_2", trade_2, float, NSC_FLOAT, 0,
295 "Return per sector on trade_2 distance amount")
296 EMPCFBOTH("trade_3", trade_3, float, NSC_FLOAT, 0,
297 "Return per sector on trade_3 distance amount")
298 EMPCFBOTH("trade_ally_bonus", trade_ally_bonus, float, NSC_FLOAT, 0,
299 "Bonus you get for cashing in with an ally")
300 EMPCFBOTH("trade_ally_cut", trade_ally_cut, float, NSC_FLOAT, 0,
301 "Bonus your ally gets for you cashing in with them")
303 EMPCF_COMMENT("\n\n### Misc.")
304 EMPCFBOTH("anno_keep_days", anno_keep_days, int, NSC_INT, KM_INTERNAL,
305 "How long until announcements expire (<0 means never)")
306 EMPCFBOTH("news_keep_days", news_keep_days, int, NSC_INT, KM_INTERNAL,
307 "How long until news expire")
308 EMPCFBOTH("fuel_mult", fuel_mult, int, NSC_INT, 0,
309 "Multiplier for fuel to mobility calculation")
310 EMPCFBOTH("lost_items_timeout", lost_items_timeout, int, NSC_INT, KM_INTERNAL,
311 "Seconds before a lost item is timed out of the database")
313 EMPCFONLYC(NULL, emp_config_dummy, NULL, NSC_NOTYPE, 0, NULL)