1 /* ---------------------------------------------------------------------- *
2  * lin-city.h
3  * This file is part of lincity.
4  * Lincity is copyright (c) I J Peters 1995-1997, (c) Greg Sharp 1997-2001.
5  * ---------------------------------------------------------------------- */
6 
7 #ifndef __lin_city_h__
8 #define __lin_city_h__
9 
10 #include <stdio.h>
11 
12 /*
13   The mouse sensitivity can be an integer such as 1, 2, 3 etc.
14   The higher the number the less you have to move the mouse.
15   It's a bit crude, it just multiples the mouse movement by this
16   amount. IMHO 3 is about the maximum useful value, 2 is quite
17   comfortable.
18     ** This is only relevant for linux-svgalib. **
19 */
20 #define MOUSE_SENSITIVITY 1
21 
22 /*
23   When your money reaches 1 million or more, to make it easier to
24   read, it is split into two parts; a millions part, and the rest.
25    For example  12,355232    You can choose any character you like,
26    but I have given some other examples. Just comment out the one
27    above, and uncomment one below. IT MUST NOT BE NULL.
28   #define MONEY_SEPARATOR '.'
29   #define MONEY_SEPARATOR ' '
30   #define MONEY_SEPARATOR ':'
31 */
32 #define MONEY_SEPARATOR ','
33 
34 /*
35    #define MP_SANITY_CHECK
36 */
37 
38 /* The number of milliseconds between scrolling text on the initial screen */
39 #define SPLASH_SCROLL_DELAY 30  /* was 30 */
40 
41 /*
42        ************************************************
43         NO USER CONFIGURABLE OPTIONS BEYOND THIS POINT
44        ************************************************
45 */
46 
47 /* VERSION_INT is used in the load/save code.  All other code uses
48    the symbol VERSION in config.h */
49 #define VERSION_INT 112
50 
51 /* Don't load if < MIN_LOAD_VERSION */
52 #define MIN_LOAD_VERSION 97
53 
54 /* Load corrections if version <= MM_MS_C_VER (max markets/substations) */
55 #define MM_MS_C_VER 97
56 
57 /* Load corrections if version <= MG_C_VER (max monthgraph size) */
58 #define MG_C_VER 111
59 
60 #if defined (WIN32)
61 #define PATH_SLASH '\\'
62 #define PATH_SLASH_STRING "\\"
63 #else
64 #define PATH_SLASH '/'
65 #define PATH_SLASH_STRING "/"
66 #endif
67 
68 #define USE_X11_PIXMAPS
69 
70 #ifndef TRUE
71 #define TRUE 1
72 #endif
73 #ifndef FALSE
74 #define FALSE 0
75 #endif
76 
77 /* Used by HandleError () */
78 #define FATAL   -1
79 #define WARNING -2
80 
81 #ifndef M_PI
82 #define M_PI        3.14159265358979323846
83 #endif
84 
85 
86 /* comment out the the next three lines for _slightly_ faster X drawing. */
87 #ifdef LC_X11
88 #define ALLOW_PIX_DOUBLING
89 #endif
90 
91 /*
92   Gamma correction. The numbers GAMMA_CORRECT_X are between 0.0 and 1.0
93   The following values are enabled with the -w option. This seems quite
94   good for 'washed out' monitors that lack red.
95   You can also set the values from the command line.
96    [x]lincity -R 1.0 -G 0.0 -B 0.4  is the same as [x]lincity -w
97  */
98 #define GAMMA_CORRECT_RED   1.0
99 #define GAMMA_CORRECT_GREEN 0.0
100 #define GAMMA_CORRECT_BLUE  0.4
101 
102 #define PROFILE_COUNTDOWN 10000
103 
104 /* hof is 70 from 28/12 */
105 
106 #define DEBUG
107 
108 /*
109 #define DEBUG_ENGINE 1
110    #define ALLOW_TCORE_DUMP
111    #define DEBUG_ROCKETS
112    #define DEBUGMOUSE
113    #define DEBUG_MOUSE
114    #define DEBUG_MAIN_SCREEN
115    #define DEBUG_GET_POWER
116    if DEBUG_KEYS is defined, pressing certain keys add money, tech points etc.
117    #define DEBUG_KEYS 1
118 */
119 /*
120    #define CS_PROFILE
121 */
122 
123 #if defined (LC_X11) || defined (WIN32)
124 #define BORDERX 30
125 #define BORDERY 30
126 #endif
127 
128 #define TEXT_FG_COLOUR  (white(24))
129 #define TEXT_BG_COLOUR  105
130 #define YN_DIALBOX_BG_COLOUR (red(10))
131 #define LOAD_BG_COLOUR       (cyan(10))
132 #define SAVE_BG_COLOUR       (magenta(10))
133 #define NW_BG_COLOUR         (green(10))
134 
135 /* GCS: We are about to run out of bits on the flags, so in the future we
136    might need to implement compression.  For example, FLAG_IS_RIVER is
137    only used for GROUP_WATER, FLAG_MB_COAL for GROUP_MARKET, and so on. */
138 /* WCK: Compression would work, but that's complicated.   I would rather move
139    FLAG_M?_* into an int_? variable.  And add more int_? variables.  That keeps
140    it simple and squeezes some life out of 32 bits.  I don't think we need to
141    hurry.  I'd rather replace the whole scheme. */
142 #define FLAG_LEFT               (1)
143 #define FLAG_UP                 (2)
144 #define FLAG_RIGHT              (4)
145 #define FLAG_DOWN               (8)
146 #define FLAG_POWERED            (0x10)
147 #define FLAG_FED                (0x20)
148 #define FLAG_EMPLOYED           (0x40)
149 #define FLAG_IS_TRANSPORT       (0x80)
150 #define FLAG_MB_FOOD            (0x100)
151 #define FLAG_MS_FOOD            (0x200)
152 #define FLAG_MB_JOBS            (0x400)
153 #define FLAG_MS_JOBS            (0x800)
154 #define FLAG_MB_COAL            (0x1000)
155 #define FLAG_MS_COAL            (0x2000)
156 #define FLAG_MB_ORE             (0x4000)
157 #define FLAG_MS_ORE             (0x8000)
158 #define FLAG_MB_GOODS           (0x10000)
159 #define FLAG_MS_GOODS           (0x20000)
160 #define FLAG_MB_STEEL           (0x40000)
161 #define FLAG_MS_STEEL           (0x80000)
162 #define FLAG_FIRE_COVER         (0x100000)
163 #define FLAG_HEALTH_COVER       (0x200000)
164 #define FLAG_CRICKET_COVER      (0x400000)
165 #define FLAG_IS_RIVER           (0x800000)
166 #define FLAG_HAD_POWER          (0x1000000)
167 #define FLAG_MULTI_TRANSPORT    (0x2000000)   /* Is it a multitransport? */
168 #define FLAG_MULTI_TRANS_PREV   (0x4000000)
169 #define FLAG_POWER_LINE         (0x8000000)
170 
171 #define T_FOOD  0
172 #define T_JOBS  1
173 #define T_COAL  2
174 #define T_GOODS 3
175 #define T_ORE   4
176 #define T_STEEL 5
177 #define T_WASTE 6
178 
179 #define MT_FAIL     0
180 #define MT_START    1
181 #define MT_CONTINUE 2
182 #define MT_SUCCESS  3
183 
184 #define HOF_START 845830134
185 #define HOF_STOP 857843038
186 
187 #define MINI_SCREEN_NORMAL_FLAG    (0)
188 #define MINI_SCREEN_POL_FLAG       (1)
189 #define MINI_SCREEN_UB40_FLAG      (2)
190 #define MINI_SCREEN_STARVE_FLAG    (3)
191 #define MINI_SCREEN_PORT_FLAG      (4)
192 #define MINI_SCREEN_POWER_FLAG     (5)
193 #define MINI_SCREEN_FIRE_COVER     (6)
194 #define MINI_SCREEN_CRICKET_COVER  (7)
195 #define MINI_SCREEN_HEALTH_COVER   (8)
196 #define MINI_SCREEN_COAL_FLAG      (9)
197 
198 #define MAIN_SCREEN_NORMAL_FLAG    (1)
199 #define MAIN_SCREEN_EQUALS_MINI    (2)
200 
201 #define SEED_RAND
202 #define OLD_LC_SAVE_DIR "Lin-city"
203 #if defined (WIN32)
204 #define LC_SAVE_DIR "SAVED_GAMES"
205 #define LINCITYRC_FILENAME "lincity.ini"
206 #else
207 /* GCS: Changed for 1.12 */
208 /* #define LC_SAVE_DIR ".Lin-city" */
209 #define LC_SAVE_DIR ".lincity"
210 #define LINCITYRC_FILENAME ".lincityrc"
211 #endif
212 #define RESULTS_FILENAME "results"
213 
214 #define MAX_ICON_LEN 4096
215 #define WORLD_SIDE_LEN 100
216 #define NUMOF_DAYS_IN_MONTH 100
217 #define NUMOF_DAYS_IN_YEAR (NUMOF_DAYS_IN_MONTH*12)
218 #define FAST_TIME_FOR_YEAR 1
219 #define MED_TIME_FOR_YEAR  20
220 #define SLOW_TIME_FOR_YEAR  60
221 
222 /* interest rate *10  ie 10 is 1% */
223 #define INTEREST_RATE 15
224 
225 #if defined (commentout)
226 #define HELP_BUTTON_X 608
227 #define HELP_BUTTON_Y 448
228 #define HELP_BUTTON_W 32
229 #define HELP_BUTTON_H 32
230 #define QUIT_BUTTON_X 608
231 #define QUIT_BUTTON_Y 416
232 #define QUIT_BUTTON_W 32
233 #define QUIT_BUTTON_H 32
234 #define LOAD_BUTTON_X 576
235 #define LOAD_BUTTON_Y 416
236 #define LOAD_BUTTON_W 32
237 #define LOAD_BUTTON_H 32
238 #define SAVE_BUTTON_X 576
239 #define SAVE_BUTTON_Y 448
240 #define SAVE_BUTTON_W 32
241 #define SAVE_BUTTON_H 32
242 #endif
243 
244 #define HELPERRORPAGE "error.hlp"
245 #define HELPBACKGROUNDCOLOUR (white(8))
246 #define HELPBUTTON_COLOUR (white(25))
247 #define MAX_NUMOF_HELP_BUTTONS 40
248 #define MAX_LENOF_HELP_FILENAME 40
249 #define MAX_HELP_HISTORY 20
250 #define CS_MOUSE_BUTTON_DELAY 5
251 #define RIGHT_MOUSE_MOVE_VAL 5
252 
253 #define GOOD 1
254 #define BAD (-1)
255 #define RESULTS 0
256 
257 #define PROGBOXX 170
258 #define PROGBOXY 180
259 #define PROGBOXW 300
260 #define PROGBOXH 120
261 #define PROGBOX_BG_COLOUR 114
262 #define PROGBOX_DONE_COL 4
263 #define PROGBOX_NOTDONE_COL 2
264 
265 #define POWER_LINE_CAPACITY 1000000
266 #define POWERS_SOLAR_OUTPUT 1800
267 #define WINDMILL_POWER      450
268 #define WINDMILL_JOBS       10
269 /* WINDMILL_RCOST is days per quid */
270 #define WINDMILL_RCOST      3
271 #define ANTIQUE_WINDMILL_ANIM_SPEED 160
272 #define MODERN_WINDMILL_ANIM_SPEED 120
273 
274 #define OLD_MAX_NUMOF_SUBSTATIONS 100
275 #define MAX_NUMOF_SUBSTATIONS 512
276 #define SUBSTATION_RANGE 10
277 #define POWER_USE_PER_PERSON 3
278 #define POWER_RES_OVERHEAD 30
279 #define POWERS_COAL_OUTPUT 22000
280 #define MAX_COAL_AT_POWER_STATION 100000
281 #define MAX_ORE_AT_INDUSTRY_L 20000
282 #define MAX_JOBS_AT_INDUSTRY_L 500
283 #define MAX_GOODS_AT_INDUSTRY_L 65000
284 #define INDUSTRY_L_GET_JOBS    120
285 #define INDUSTRY_L_GET_ORE     600
286 #define INDUSTRY_L_GET_STEEL   60
287 #define INDUSTRY_L_JOBS_LOAD_ORE 1
288 #define INDUSTRY_L_JOBS_LOAD_STEEL 4
289 #define INDUSTRY_L_ORE_USED  125
290 #define INDUSTRY_L_STEEL_USED  12
291 #define INDUSTRY_L_JOBS_USED       30
292 #define INDUSTRY_L_MAKE_GOODS 225
293 #define MAX_STEEL_AT_INDUSTRY_L 2000
294 #define MIN_JOBS_AT_INDUSTRY_L (INDUSTRY_L_JOBS_LOAD_ORE\
295 +INDUSTRY_L_JOBS_LOAD_STEEL+INDUSTRY_L_JOBS_USED)
296 #define INDUSTRY_L_ANIM_SPEED 290
297 
298 #define MAX_ORE_AT_INDUSTRY_H 10000
299 #define MAX_COAL_AT_INDUSTRY_H 1000
300 #define MAX_MADE_AT_INDUSTRY_H MAX_ORE_AT_INDUSTRY_H/16
301 #define POWER_MAKE_STEEL 200
302 #define INDUSTRY_H_ANIM_SPEED  290
303 
304 #define DAYS_PER_POLLUTION      14
305 #define POWERS_COAL_POLLUTION   20
306 #define INDUSTRY_L_POLLUTION    10
307 #define INDUSTRY_H_POLLUTION    10
308 #define COALMINE_POLLUTION      3
309 #define PORT_POLLUTION          1
310 #define RAIL_POLLUTION          1
311 #define DAYS_PER_RAIL_POLLUTION 30
312 #define ROAD_POLLUTION          1
313 #define DAYS_PER_ROAD_POLLUTION 20
314 #define UNNAT_DEATHS_COST       500
315 #define POL_DIV                 64	/* GCS -- from engine.c */
316 
317 #define FINANCE_X 91
318 #define FINANCE_W 120
319 #define FINANCE_Y 200
320 #define FINANCE_H 56
321 #define INCOME_TAX_RATE 8
322 #define COAL_TAX_RATE 20
323 #define GOODS_TAX_RATE 1
324 #define DOLE_RATE 15
325 #define TRANSPORT_COST_RATE 14
326 #define IM_PORT_COST_RATE 1
327 #define PORT_FOOD_RATE    1
328 #define PORT_JOBS_RATE    5
329 #define PORT_COAL_RATE    50
330 #define PORT_ORE_RATE     1
331 #define PORT_GOODS_RATE   3
332 #define PORT_STEEL_RATE   100
333 /*
334   These next two control the stuff bought or sold as a % of what's on the
335   transport.  1000=100%  500=50% etc.
336 */
337 #define PORT_EXPORT_RATE  500
338 #define PORT_IMPORT_RATE  500
339 
340 #define NUMOF_DISCOUNT_TRIGGERS 6
341 #define EX_DISCOUNT_TRIGGER_1   25000
342 #define EX_DISCOUNT_TRIGGER_2   50000
343 #define EX_DISCOUNT_TRIGGER_3  100000
344 #define EX_DISCOUNT_TRIGGER_4  200000
345 #define EX_DISCOUNT_TRIGGER_5  400000
346 #define EX_DISCOUNT_TRIGGER_6  800000
347 
348 #define MIN_RES_POPULATION 10
349 #define MAX_TECH_LEVEL	   1000000
350 #define TECH_LEVEL_LOSS_START 11000
351 /*
352    tech-level/TECH_LEVEL_LOSS is lost every month when
353    above TECH_LEVEL_LOSS_START
354  */
355 #define TECH_LEVEL_LOSS    500
356 #define TECH_LEVEL_UNAIDED 2
357 #define MODERN_WINDMILL_TECH 450000
358 
359 #define BUILD_MONUMENT_JOBS     350000
360 #define MONUMENT_GET_JOBS       100
361 #define MONUMENT_DAYS_PER_TECH  3
362 #define MONUMENT_TECH_EXPIRE    400
363 #define MONUMENT_ANIM_SPEED     300
364 
365 #define BLACKSMITH_JOBS    35
366 #define BLACKSMITH_GET_COAL 6
367 #define MAX_GOODS_AT_BLACKSMITH 200
368 #define MAX_COAL_AT_BLACKSMITH  100
369 #define BLACKSMITH_STEEL_USED 1
370 #define BLACKSMITH_COAL_USED  1
371 #define GOODS_MADE_BY_BLACKSMITH 50
372 #define BLACKSMITH_BATCH (GOODS_MADE_BY_BLACKSMITH*100)
373 #define BLACKSMITH_ANIM_THRESHOLD 10
374 #define BLACKSMITH_ANIM_SPEED    200
375 
376 #define MILL_JOBS          35
377 #define MAX_GOODS_AT_MILL  200
378 #define MAX_FOOD_AT_MILL   500
379 #define MAX_COAL_AT_MILL   50
380 #define GOODS_MADE_BY_MILL 75
381 #define MILL_GET_FOOD      51
382 #define MILL_GET_COAL      4
383 #define MILL_POWER_PER_COAL 60
384 #define FOOD_USED_BY_MILL  (GOODS_MADE_BY_MILL/2)
385 #define COAL_USED_BY_MILL  1
386 #define MILL_ANIM_THRESHOLD 10
387 #define MILL_ANIM_SPEED    300
388 
389 #define SCHOOL_JOBS        50
390 #define SCHOOL_GOODS	   75
391 #define JOBS_MAKE_TECH_SCHOOL  200
392 #define GOODS_MAKE_TECH_SCHOOL  75
393 #define TECH_MADE_BY_SCHOOL    2
394 #define MAX_JOBS_AT_SCHOOL     400
395 #define MAX_GOODS_AT_SCHOOL    200
396 #define SCHOOL_RUNNING_COST    2
397 
398 #define DAYS_BETWEEN_COVER (NUMOF_DAYS_IN_MONTH*3)
399 #define DAYS_BETWEEN_FIRES (NUMOF_DAYS_IN_YEAR*2)
400 #define FIRESTATION_JOBS   6
401 #define FIRESTATION_GET_JOBS 7
402 #define MAX_JOBS_AT_FIRESTATION (FIRESTATION_JOBS*NUMOF_DAYS_IN_YEAR)
403 #define FIRESTATION_GOODS  2
404 #define FIRESTATION_GET_GOODS 3
405 #define MAX_GOODS_AT_FIRESTATION (FIRESTATION_GOODS*NUMOF_DAYS_IN_YEAR)
406 #define FIRESTATION_RANGE  18
407 #define FIRESTATION_RUNNING_COST 1
408 #define FIRESTATION_RUNNING_COST_MUL 6
409 #define FIRESTATION_ANIMATION_SPEED 250
410 #define FIRE_ANIMATION_SPEED 350
411 #define FIRE_DAYS_PER_SPREAD (NUMOF_DAYS_IN_YEAR/8)
412 #define FIRE_LENGTH (NUMOF_DAYS_IN_YEAR*5)
413 #define AFTER_FIRE_LENGTH (NUMOF_DAYS_IN_YEAR*10)
414 
415 #define CRICKET_JOBS   8
416 #define CRICKET_GET_JOBS 9
417 #define MAX_JOBS_AT_CRICKET (CRICKET_JOBS*NUMOF_DAYS_IN_YEAR)
418 #define CRICKET_GOODS  2
419 #define CRICKET_GET_GOODS 3
420 #define MAX_GOODS_AT_CRICKET (CRICKET_GOODS*NUMOF_DAYS_IN_YEAR)
421 #define CRICKET_RANGE  10
422 #define CRICKET_RUNNING_COST 1
423 #define CRICKET_ANIMATION_SPEED 750
424 
425 #define MAX_GOODS_AT_POTTERY     200
426 #define POTTERY_ORE_MAKE_GOODS    11
427 #define POTTERY_COAL_MAKE_GOODS    2
428 #define POTTERY_JOBS              35
429 #define MAX_ORE_AT_POTTERY        (POTTERY_ORE_MAKE_GOODS*60)
430 #define POTTERY_GET_ORE           (POTTERY_ORE_MAKE_GOODS*20)
431 #define MAX_COAL_AT_POTTERY       (POTTERY_COAL_MAKE_GOODS*60)
432 #define POTTERY_GET_COAL          (POTTERY_COAL_MAKE_GOODS*21)
433 #define MAX_JOBS_AT_POTTERY       (POTTERY_JOBS*20)
434 #define POTTERY_GET_JOBS          (POTTERY_JOBS*2)
435 #define POTTERY_MADE_GOODS        35
436 #define POTTERY_ANIM_SPEED        280
437 #define POTTERY_CLOSE_TIME        20
438 
439 #define UNIVERSITY_JOBS   250
440 #define UNIVERSITY_JOBS_STORE 5000
441 #define UNIVERSITY_GOODS  750
442 #define UNIVERSITY_GOODS_STORE 7000
443 #define UNIVERSITY_RUNNING_COST 23
444 #define UNIVERSITY_TECH_MADE    4
445 
446 #define ROCKET_PAD_JOBS         1000
447 #define ROCKET_PAD_JOBS_STORE   10000
448 #define ROCKET_PAD_GOODS        10000
449 #define ROCKET_PAD_GOODS_STORE  500000
450 #define ROCKET_PAD_STEEL	500
451 #define ROCKET_PAD_STEEL_STORE  12000
452 #define ROCKET_PAD_RUNNING_COST 200
453 #define ROCKET_PAD_LAUNCH       100
454 #define ROCKET_ANIMATION_SPEED  450
455 #define ROCKET_LAUNCH_BAD       1
456 #define ROCKET_LAUNCH_GOOD      2
457 #define ROCKET_LAUNCH_EVAC      3
458 
459 #define TIP_DEGRADE_TIME 200 * NUMOF_DAYS_IN_YEAR
460 
461 #define MAX_WASTE_AT_RECYCLE 20000
462 #define BURN_WASTE_AT_RECYCLE (MAX_WASTE_AT_RECYCLE/200)
463 #define MAX_ORE_AT_RECYCLE   (MAX_ORE_ON_RAIL*2)
464 #define GOODS_RECYCLED       500
465 #define RECYCLE_GOODS_JOBS   (GOODS_RECYCLED/50)
466 #define RECYCLE_RUNNING_COST 3
467 
468 #define HEALTH_CENTRE_JOBS   6
469 #define HEALTH_CENTRE_GET_JOBS 7
470 #define MAX_JOBS_AT_HEALTH_CENTRE (HEALTH_CENTRE_JOBS*NUMOF_DAYS_IN_YEAR)
471 #define HEALTH_CENTRE_GOODS  40
472 #define HEALTH_CENTRE_GET_GOODS 41
473 #define MAX_GOODS_AT_HEALTH_CENTRE (HEALTH_CENTRE_GOODS*NUMOF_DAYS_IN_YEAR)
474 #define HEALTH_RUNNING_COST  2
475 #define HEALTH_RUNNING_COST_MUL 9
476 #define HEALTH_CENTRE_RANGE  15
477 
478 #define OLD_MAX_NUMOF_MARKETS 100
479 #define MAX_NUMOF_MARKETS 512
480 #define MARKET_RANGE      10
481 #define MAX_FOOD_ON_TRACK 2048
482 #define MAX_FOOD_ON_RIVER (MAX_FOOD_ON_TRACK*2)
483 #define MAX_FOOD_ON_ROAD (MAX_FOOD_ON_TRACK*4)
484 #define MAX_FOOD_ON_RAIL (MAX_FOOD_ON_ROAD*4)
485 #define MAX_FOOD_IN_MARKET (MAX_FOOD_ON_RAIL*8)
486 #define MARKET_FOOD_SEARCH_TRIGGER (MAX_FOOD_IN_MARKET/5)
487 #define MAX_JOBS_ON_TRACK 1024
488 #define MAX_JOBS_ON_RIVER (MAX_JOBS_ON_TRACK*2)
489 #define MAX_JOBS_ON_ROAD (MAX_JOBS_ON_TRACK*5)
490 #define MAX_JOBS_ON_RAIL (MAX_JOBS_ON_ROAD*5)
491 #define MAX_JOBS_IN_MARKET (MAX_JOBS_ON_RAIL*3)
492 #define MARKET_JOBS_SEARCH_TRIGGER (MAX_JOBS_IN_MARKET/5)
493 #define MARKET_ANIM_SPEED 750
494 #define EMPLOYER_RANGE 10
495 #define WORKING_POP_PERCENT 45
496 #define JOB_SWING 15
497 #define HC_JOB_SWING 10
498 #define CRICKET_JOB_SWING 4
499 
500 #define ORGANIC_FARM_FOOD_OUTPUT 550
501 #define ORGANIC_FARM_ANIM_SPEED 3000
502 #define FARM_JOBS_USED 13
503 #define ORG_FARM_RANGE 10
504 #define ORG_FARM_POWER_REC 50
505 /* gets waste only when powered */
506 #define ORG_FARM_WASTE_GET 6
507 #define MIN_FOOD_SOLD_FOR_ANIM 200
508 #define DAYS_PER_STARVE 20
509 
510 #define MAX_WASTE_ON_TRACK 1024
511 #define MAX_WASTE_ON_ROAD (MAX_WASTE_ON_TRACK*5)
512 #define MAX_WASTE_ON_RAIL (MAX_WASTE_ON_ROAD*5)
513 #define MAX_WASTE_IN_MARKET (MAX_WASTE_ON_RAIL*3)
514 #define MARKET_WASTE_SEARCH_TRIGGER (MAX_WASTE_IN_MARKET/5)
515 #define MAX_WASTE_AT_TIP  10000000
516 #define WASTE_BURN_ON_TRANSPORT 20
517 #define TRANSPORT_BURN_WASTE_COUNT 75000
518 
519 #define NUMOF_COAL_RESERVES 100
520 #define COAL_RESERVE_SIZE 10000
521 #define ORE_RESERVE       1000
522 #define MIN_ORE_RESERVE_FOR_MINE (ORE_RESERVE)
523 #define MAX_COAL_AT_MINE 100000
524 #define MAX_ORE_AT_MINE 100000
525 /* COAL_RESERVE_SEARCH_LEN acts in both directions, so 5 is 10*10 */
526 #define COAL_RESERVE_SEARCH_LEN 8
527 #define JOBS_DIG_COAL 900
528 #define JOBS_DIG_ORE  200
529 #define JOBS_COALPS_GENERATE 100
530 #define MAX_JOBS_AT_COALPS 2000
531 #define JOBS_LOAD_COAL 18
532 #define JOBS_LOAD_ORE  9
533 #define JOBS_LOAD_STEEL 15
534 #define JOBS_AT_COMMUNE_GATE 4
535 #define COMMUNE_ANIM_SPEED 750
536 #define COMMUNE_POP  5
537 
538 #define DIG_MORE_COAL_TRIGGER (MAX_COAL_AT_MINE)
539 #define DIG_MORE_ORE_TRIGGER  (MAX_ORE_AT_MINE)
540 #define MAX_COAL_ON_TRACK 64
541 #define MAX_COAL_ON_RIVER (MAX_COAL_ON_TRACK*2)
542 #define MAX_COAL_ON_ROAD (MAX_COAL_ON_TRACK*8)
543 #define MAX_COAL_ON_RAIL (MAX_COAL_ON_ROAD*8)
544 #define MAX_COAL_IN_MARKET (MAX_COAL_ON_RAIL*2)
545 #define MARKET_COAL_SEARCH_TRIGGER (MAX_COAL_IN_MARKET/5)
546 
547 #define MAX_GOODS_ON_TRACK 2048
548 #define MAX_GOODS_ON_RIVER (MAX_GOODS_ON_TRACK*2)
549 #define MAX_GOODS_ON_ROAD (MAX_GOODS_ON_TRACK*5)
550 #define ROAD_GOODS_USED_MASK 0x1f
551 #define MAX_GOODS_ON_RAIL (MAX_GOODS_ON_ROAD*5)
552 #define RAIL_GOODS_USED_MASK 0xf
553 #define MAX_GOODS_IN_MARKET (MAX_GOODS_ON_RAIL*4)
554 #define MARKET_GOODS_SEARCH_TRIGGER (MAX_GOODS_IN_MARKET/5)
555 #define MAX_ORE_ON_TRACK 4096
556 #define MAX_ORE_ON_RIVER (MAX_ORE_ON_TRACK*2)
557 #define MAX_ORE_ON_ROAD (MAX_ORE_ON_TRACK*4)
558 #define MAX_ORE_ON_RAIL (MAX_ORE_ON_ROAD*4)
559 #define MAX_ORE_IN_MARKET (MAX_ORE_ON_RAIL*2)
560 #define MARKET_ORE_SEARCH_TRIGGER (MAX_ORE_IN_MARKET/5)
561 
562 
563 #define MAX_STEEL_ON_TRACK 128
564 #define MAX_STEEL_ON_RIVER (MAX_STEEL_ON_TRACK*2)
565 #define MAX_STEEL_ON_ROAD (MAX_STEEL_ON_TRACK*4)
566 #define MAX_STEEL_ON_RAIL (MAX_STEEL_ON_ROAD*4)
567 #define RAIL_STEEL_USED_MASK 0x7f
568 #define MAX_STEEL_AT_INDUSTRY_H (MAX_STEEL_ON_RAIL*10)
569 /*
570   JOBS_MAKE_STEEL is the steel made per job at the steel works
571   what's it doing here?
572  */
573 #define JOBS_MAKE_STEEL 70
574 /*
575   ORE_MAKE_STEEL is the ore used per unit of STEEL at a steel works
576   what's it doing here?
577  */
578 #define ORE_MAKE_STEEL 17
579 #define MAX_STEEL_IN_MARKET (MAX_STEEL_ON_RAIL*2)
580 #define MARKET_STEEL_SEARCH_TRIGGER (MAX_STEEL_IN_MARKET/5)
581 
582 #if defined (commentout)
583 #define MAIN_WIN_W 448
584 #define MAIN_WIN_X (640-MAIN_WIN_W-8)
585 #define MAIN_WIN_Y 8
586 #define MAIN_WIN_H 400
587 #endif
588 
589 #define SUST_ORE_COAL_COL 34
590 #define SUST_PORT_COL     white(24)
591 #define SUST_MONEY_COL    green(26)
592 #define SUST_POP_COL      cyan(24)
593 #define SUST_TECH_COL     yellow(26)
594 #define SUST_FIRE_COL     red(26)
595 #define SUST_ORE_COAL_YEARS_NEEDED 180
596 #define SUST_PORT_YEARS_NEEDED     180
597 #define SUST_MONEY_YEARS_NEEDED    60
598 #define SUST_POP_YEARS_NEEDED      60
599 #define SUST_TECH_YEARS_NEEDED     120
600 #define SUST_FIRE_YEARS_NEEDED     60
601 
602 #define SUST_MIN_POPULATION 5000
603 #define SUST_MIN_TECH_LEVEL (MAX_TECH_LEVEL/2)
604 
605 #define STATS_X 232
606 #define STATS_Y 428
607 #define STATS_W 304
608 #define STATS_H 32
609 
610 /* GCS FIX: This is still used in static data structure for size
611    of monthgraph.  Fix by encapsulating the monthgraph and dynamically
612    allocating.  */
613 #if defined (commentout)
614 #ifndef MONTHGRAPH_W
615 #define MONTHGRAPH_X 91
616 #define MONTHGRAPH_W 120
617 #define MONTHGRAPH_Y 116
618 #define MONTHGRAPH_H 64
619 #endif
620 #define DIFFGRAPH_POWER_COLOUR (yellow(28))
621 #define DIFFGRAPH_COAL_COLOUR  (white(18))
622 #define DIFFGRAPH_GOODS_COLOUR (cyan(24))
623 #define DIFFGRAPH_ORE_COLOUR   (red(22))
624 #define DIFFGRAPH_POPULATION_COLOUR 7
625 #endif
626 
627 #define GRAPHS_B_COLOUR (white(6))
628 
629 /* These constants are still used by save-under buffer */
630 #if defined (commentout)
631 #define MARKET_CB_X (79)
632 #define MARKET_CB_Y 0
633 #endif
634 //#define MARKET_CB_W (18*8)
635 #define MARKET_CB_W (17*8 - 2)
636 #define MARKET_CB_H (23*8)
637 
638 #define SCROLL_LONG_COUNT 5
639 #define SCROLL_RIGHT_BUTTON_X 100
640 #define SCROLL_RIGHT_BUTTON_W 32
641 #define SCROLL_RIGHT_BUTTON_Y 100
642 #define SCROLL_RIGHT_BUTTON_H 32
643 #define SCROLL_LEFT_BUTTON_X 100
644 #define SCROLL_LEFT_BUTTON_W 32
645 #define SCROLL_LEFT_BUTTON_Y 132
646 #define SCROLL_LEFT_BUTTON_H 32
647 #define SCROLL_DOWN_BUTTON_X 100
648 #define SCROLL_DOWN_BUTTON_W 32
649 #define SCROLL_DOWN_BUTTON_Y 164
650 #define SCROLL_DOWN_BUTTON_H 32
651 #define SCROLL_UP_BUTTON_X 100
652 #define SCROLL_UP_BUTTON_W 32
653 #define SCROLL_UP_BUTTON_Y 196
654 #define SCROLL_UP_BUTTON_H 32
655 
656 #define SHUFFLE_MAPPOINT_COUNT 4
657 
658 #if defined (commentout)
659 #define MAPPOINT_STATS_X 91
660 /* MAPPOINT_STATS_W must be == MONTHGRAPH_W because of the graph drawing. */
661 #define MAPPOINT_STATS_W MONTHGRAPH_W
662 #define MAPPOINT_STATS_Y 8
663 #define MAPPOINT_STATS_H (11*8)
664 #endif
665 
666 #define GROUP_BARE 	   0
667 #define GROUP_BARE_COLOUR  (green(12))
668 #define GROUP_BARE_COST    0
669 #define GROUP_BARE_COST_MUL 1
670 #define GROUP_BARE_BUL_COST 1
671 #define GROUP_BARE_TECH    0
672 #define GROUP_BARE_FIREC   0
673 
674 #define GROUP_POWER_LINE   1
675 #define GROUP_POWER_LINE_COLOUR (yellow(26))
676 #define GROUP_POWER_LINE_COST 100
677 #define GROUP_POWER_LINE_COST_MUL 2
678 #define GROUP_POWER_LINE_BUL_COST 100
679 #define GROUP_POWER_LINE_TECH 200
680 #define GROUP_POWER_LINE_FIREC 0
681 
682 #if defined (commentout)
683 /* GROUP_POWER_SOURCE is a solar ps - change the names  - real soon */
684 #define GROUP_POWER_SOURCE 2
685 #define GROUP_POWER_SOURCE_COLOUR (yellow(22))
686 #define GROUP_POWER_SOURCE_COST 500000
687 #define GROUP_POWER_SOURCE_COST_MUL 5
688 #define GROUP_POWER_SOURCE_BUL_COST 100000
689 #define GROUP_POWER_SOURCE_TECH 500
690 #define GROUP_POWER_SOURCE_NO_CREDIT
691 #define GROUP_POWER_SOURCE_FIREC 33
692 #endif
693 
694 #define GROUP_SOLAR_POWER 2
695 #define GROUP_SOLAR_POWER_COLOUR (yellow(22))
696 #define GROUP_SOLAR_POWER_COST 500000
697 #define GROUP_SOLAR_POWER_COST_MUL 5
698 #define GROUP_SOLAR_POWER_BUL_COST 100000
699 #define GROUP_SOLAR_POWER_TECH 500
700 #define GROUP_SOLAR_POWER_NO_CREDIT
701 #define GROUP_SOLAR_POWER_FIREC 33
702 
703 #define GROUP_SUBSTATION   3
704 #define GROUP_SUBSTATION_COLOUR (yellow(18))
705 #define GROUP_SUBSTATION_COST 500
706 #define GROUP_SUBSTATION_COST_MUL 2
707 #define GROUP_SUBSTATION_BUL_COST 100
708 #define GROUP_SUBSTATION_TECH 200
709 #define GROUP_SUBSTATION_FIREC 50
710 
711 #define GROUP_RESIDENCE_LL 4
712 #define GROUP_RESIDENCE_LL_COLOUR (cyan(24))
713 #define GROUP_RESIDENCE_LL_COST 1000
714 #define GROUP_RESIDENCE_LL_COST_MUL 25
715 #define GROUP_RESIDENCE_LL_BUL_COST 1000
716 #define GROUP_RESIDENCE_LL_TECH 0
717 #define GROUP_RESIDENCE_LL_FIREC 75
718 
719 #if defined (commentout)
720 #define RESIDENCE_BASE_BR     100
721 #define RESIDENCE_BRM_HEALTH  5
722 #define RESIDENCE_BASE_DR     (68*12)
723 #define GROUP_RESIDENCE    4
724 #define GROUP_RESIDENCE_COLOUR (cyan(24))
725 #define GROUP_RESIDENCE_COST   0
726 #define GROUP_RESIDENCE_COST1  1000
727 #define RESIDENCE1_BRM (RESIDENCE_BASE_BR*12)
728 #define RESIDENCE1_DRM ((RESIDENCE_BASE_DR*3)/4)
729 #define GROUP_RESIDENCE_COST2  2000
730 #define RESIDENCE2_BRM 0
731 #define RESIDENCE2_DRM 0
732 #define GROUP_RESIDENCE_COST3  4000
733 #define RESIDENCE3_BRM (RESIDENCE_BASE_BR+RESIDENCE_BASE_BR/4)
734 #define RESIDENCE3_DRM ((RESIDENCE_BASE_DR)/2)
735 #define GROUP_RESIDENCE_COST4  800
736 #define RESIDENCE4_BRM (RESIDENCE_BASE_BR*18)
737 #define RESIDENCE4_DRM ((RESIDENCE_BASE_DR*3)/4)
738 #define GROUP_RESIDENCE_COST5  1600
739 #define RESIDENCE5_BRM (RESIDENCE_BASE_BR/2)
740 #define RESIDENCE5_DRM ((RESIDENCE_BASE_DR)/4)
741 #define GROUP_RESIDENCE_COST6  3200
742 #define RESIDENCE6_BRM 0
743 #define RESIDENCE6_DRM ((RESIDENCE_BASE_DR)/4)
744 #define GROUP_RESIDENCE_COST_MUL 25
745 #define GROUP_RESIDENCE_BUL_COST 1000
746 #define GROUP_RESIDENCE_TECH 0
747 #define GROUP_RESIDENCE_FIREC 75
748 /* RESIDENCE_PPM is the people_pool mobitily. Higher number=less mobile. */
749 #define RESIDENCE_PPM   20
750 #endif
751 
752 /* RESIDENCE?_BRM is the birth rate modifier */
753 /* RESIDENCE?_DRM is the death rate modifier */
754 #define RESIDENCE_BASE_BR     100
755 #define RESIDENCE_BASE_DR     (68*12)
756 #define RESIDENCE_BRM_HEALTH  5
757 #define RESIDENCE1_BRM (RESIDENCE_BASE_BR*12)
758 #define RESIDENCE1_DRM ((RESIDENCE_BASE_DR*3)/4)
759 #define RESIDENCE2_BRM 0
760 #define RESIDENCE2_DRM 0
761 #define RESIDENCE3_BRM (RESIDENCE_BASE_BR+RESIDENCE_BASE_BR/4)
762 #define RESIDENCE3_DRM ((RESIDENCE_BASE_DR)/2)
763 #define RESIDENCE4_BRM (RESIDENCE_BASE_BR*18)
764 #define RESIDENCE4_DRM ((RESIDENCE_BASE_DR*3)/4)
765 #define RESIDENCE5_BRM (RESIDENCE_BASE_BR/2)
766 #define RESIDENCE5_DRM ((RESIDENCE_BASE_DR)/4)
767 #define RESIDENCE6_BRM 0
768 #define RESIDENCE6_DRM ((RESIDENCE_BASE_DR)/4)
769 /* RESIDENCE_PPM is the people_pool mobitily. Higher number=less mobile. */
770 #define RESIDENCE_PPM   20
771 
772 #define GROUP_ORGANIC_FARM 5
773 #define GROUP_ORGANIC_FARM_COLOUR (green(30))
774 #define GROUP_ORGANIC_FARM_COST 1000
775 #define GROUP_ORGANIC_FARM_COST_MUL 20
776 #define GROUP_ORGANIC_FARM_BUL_COST 100
777 #define GROUP_ORGANIC_FARM_TECH 0
778 #define GROUP_ORGANIC_FARM_FIREC 20
779 
780 #define GROUP_MARKET       6
781 #define GROUP_MARKET_COLOUR (blue(28))
782 #define GROUP_MARKET_COST 100
783 #define GROUP_MARKET_COST_MUL 25
784 #define GROUP_MARKET_BUL_COST 100
785 #define GROUP_MARKET_TECH 0
786 #define GROUP_MARKET_FIREC 80
787 
788 #define GROUP_TRACK	   7
789 #define GROUP_TRACK_COLOUR 32	/* 32 is a brown */
790 #define GROUP_TRACK_COST   1
791 #define GROUP_TRACK_COST_MUL 25
792 #define GROUP_TRACK_BUL_COST   10
793 #define GROUP_TRACK_TECH   0
794 #define GROUP_TRACK_FIREC  4
795 
796 #define GROUP_COALMINE     8
797 #define GROUP_COALMINE_COLOUR 0
798 #define GROUP_COALMINE_COST   10000
799 #define GROUP_COALMINE_COST_MUL 25
800 #define GROUP_COALMINE_BUL_COST   10000
801 #define GROUP_COALMINE_TECH   85
802 #define GROUP_COALMINE_FIREC  85
803 
804 #define GROUP_RAIL         9
805 #define GROUP_RAIL_COLOUR  (magenta(18))
806 #define GROUP_RAIL_COST    500
807 #define GROUP_RAIL_COST_MUL 10
808 #define GROUP_RAIL_BUL_COST    1000
809 #define GROUP_RAIL_TECH    180
810 #define GROUP_RAIL_FIREC   6
811 
812 #define GROUP_COAL_POWER 10
813 #define GROUP_COAL_POWER_COLOUR 0
814 #define GROUP_COAL_POWER_COST   100000
815 #define GROUP_COAL_POWER_COST_MUL 5
816 #define GROUP_COAL_POWER_BUL_COST   200000
817 #define GROUP_COAL_POWER_TECH   200
818 #define GROUP_COAL_POWER_FIREC  80
819 
820 #define GROUP_ROAD         11
821 #define GROUP_ROAD_COLOUR  (white(18))
822 #define GROUP_ROAD_COST    100
823 #define GROUP_ROAD_COST_MUL 25
824 #define GROUP_ROAD_BUL_COST    50
825 #define GROUP_ROAD_TECH    50
826 #define GROUP_ROAD_FIREC   4
827 
828 #define GROUP_INDUSTRY_L   12
829 #define GROUP_INDUSTRY_L_COLOUR (cyan(18))
830 #define GROUP_INDUSTRY_L_COST 20000
831 #define GROUP_INDUSTRY_L_COST_MUL 25
832 #define GROUP_INDUSTRY_L_BUL_COST 20000
833 #define GROUP_INDUSTRY_L_TECH 160
834 #define GROUP_INDUSTRY_L_FIREC 70
835 
836 #define GROUP_UNIVERSITY   13
837 #define GROUP_UNIVERSITY_COLOUR (blue(22))
838 #define GROUP_UNIVERSITY_COST 20000
839 #define GROUP_UNIVERSITY_COST_MUL 25
840 #define GROUP_UNIVERSITY_BUL_COST 20000
841 #define GROUP_UNIVERSITY_TECH 150
842 #define GROUP_UNIVERSITY_NO_CREDIT
843 #define GROUP_UNIVERSITY_FIREC 40
844 
845 #define GROUP_COMMUNE      14
846 #define GROUP_COMMUNE_COLOUR (green(30))
847 #define GROUP_COMMUNE_COST  1
848 #define GROUP_COMMUNE_COST_MUL 2
849 #define GROUP_COMMUNE_BUL_COST  1000
850 #define GROUP_COMMUNE_TECH  0
851 #define GROUP_COMMUNE_FIREC 30
852 
853 #define GROUP_OREMINE      15
854 #define GROUP_OREMINE_COLOUR (red(18))
855 #define GROUP_OREMINE_COST 500
856 #define GROUP_OREMINE_COST_MUL 10
857 #define GROUP_OREMINE_BUL_COST 500000
858 #define GROUP_OREMINE_TECH 0
859 #define GROUP_OREMINE_FIREC 0
860 
861 #define GROUP_TIP      16
862 #define GROUP_TIP_COLOUR (white(16))
863 #define GROUP_TIP_COST 10000
864 #define GROUP_TIP_COST_MUL 25
865 #define GROUP_TIP_BUL_COST 1000000
866 #define GROUP_TIP_TECH 0
867 #define GROUP_TIP_FIREC 50
868 
869 #define GROUP_PORT      17
870 #define GROUP_PORT_COLOUR (blue(28))
871 #define GROUP_PORT_COST 100000
872 #define GROUP_PORT_COST_MUL 2
873 #define GROUP_PORT_BUL_COST 1000
874 #define GROUP_PORT_TECH 35
875 #define GROUP_PORT_FIREC 50
876 
877 #define GROUP_INDUSTRY_H   18
878 #define GROUP_INDUSTRY_H_COLOUR (7)	/* colour 7 is an orange, sort of */
879 #define GROUP_INDUSTRY_H_COST 50000
880 #define GROUP_INDUSTRY_H_COST_MUL 20
881 #define GROUP_INDUSTRY_H_BUL_COST 70000
882 #define GROUP_INDUSTRY_H_TECH 170
883 #define GROUP_INDUSTRY_H_FIREC 80
884 
885 #define GROUP_PARKLAND     19
886 #define GROUP_PARKLAND_COLOUR (green(31))
887 #define GROUP_PARKLAND_COST   1000
888 #define GROUP_PARKLAND_COST_MUL 25
889 #define GROUP_PARKLAND_BUL_COST   1000
890 #define GROUP_PARKLAND_TECH   2
891 #define GROUP_PARKLAND_NO_CREDIT
892 #define GROUP_PARKLAND_FIREC 1
893 
894 #define GROUP_RECYCLE      20
895 #define GROUP_RECYCLE_COLOUR   (green(28))
896 #define GROUP_RECYCLE_COST    100000
897 #define GROUP_RECYCLE_COST_MUL 5
898 #define GROUP_RECYCLE_BUL_COST    1000
899 #define GROUP_RECYCLE_TECH    232
900 #define GROUP_RECYCLE_NO_CREDIT
901 #define GROUP_RECYCLE_FIREC 10
902 
903 #define GROUP_WATER	   21
904 #define GROUP_WATER_COLOUR    (blue(31))
905 #define GROUP_WATER_COST      1000000
906 #define GROUP_WATER_COST_MUL 2
907 #define GROUP_WATER_BUL_COST      1000000
908 #define GROUP_WATER_TECH      0
909 #define GROUP_RIVER (GROUP_WATER)	/* oops -- GCS: Why oops? */
910 #define GROUP_WATER_FIREC 0
911 
912 #define GROUP_HEALTH       22
913 #define GROUP_HEALTH_COLOUR   (green(24))
914 #define GROUP_HEALTH_COST     100000
915 #define GROUP_HEALTH_COST_MUL 2
916 #define GROUP_HEALTH_BUL_COST     1000
917 #define GROUP_HEALTH_TECH     110
918 #define GROUP_HEALTH_FIREC 2
919 
920 #define GROUP_ROCKET	   23
921 #define GROUP_ROCKET_COLOUR   (magenta(20))
922 #define GROUP_ROCKET_COST     700000
923 #define GROUP_ROCKET_COST_MUL 2
924 #define GROUP_ROCKET_BUL_COST     1
925 #define GROUP_ROCKET_TECH     750
926 #define GROUP_ROCKET_NO_CREDIT
927 #define GROUP_ROCKET_FIREC 0
928 
929 #define GROUP_WINDMILL     24
930 #define GROUP_WINDMILL_COLOUR (green(25))
931 #define GROUP_WINDMILL_COST   20000
932 #define GROUP_WINDMILL_COST_MUL 25
933 #define GROUP_WINDMILL_BUL_COST   1000
934 #define GROUP_WINDMILL_TECH   30
935 #define GROUP_WINDMILL_FIREC  10
936 
937 #define GROUP_MONUMENT     25
938 #define GROUP_MONUMENT_COLOUR (white(15))
939 #define GROUP_MONUMENT_COST   10000
940 #define GROUP_MONUMENT_COST_MUL 25
941 #define GROUP_MONUMENT_BUL_COST   1000000
942 #define GROUP_MONUMENT_TECH   0
943 #define GROUP_MONUMENT_FIREC  0
944 
945 #define GROUP_SCHOOL     26
946 #define GROUP_SCHOOL_COLOUR (white(15))
947 #define GROUP_SCHOOL_COST   10000
948 #define GROUP_SCHOOL_COST_MUL 25
949 #define GROUP_SCHOOL_BUL_COST   10000
950 #define GROUP_SCHOOL_TECH   1
951 #define GROUP_SCHOOL_FIREC 40
952 
953 #define GROUP_BLACKSMITH     27
954 #define GROUP_BLACKSMITH_COLOUR (white(15))
955 #define GROUP_BLACKSMITH_COST   5000
956 #define GROUP_BLACKSMITH_COST_MUL 25
957 #define GROUP_BLACKSMITH_BUL_COST   1000
958 #define GROUP_BLACKSMITH_TECH   3
959 #define GROUP_BLACKSMITH_FIREC 60
960 
961 #define GROUP_MILL     28
962 #define GROUP_MILL_COLOUR (white(15))
963 #define GROUP_MILL_COST   10000
964 #define GROUP_MILL_COST_MUL 25
965 #define GROUP_MILL_BUL_COST   1000
966 #define GROUP_MILL_TECH   25
967 #define GROUP_MILL_FIREC  60
968 
969 #define GROUP_POTTERY  29
970 #define GROUP_POTTERY_COLOUR (red(12))
971 #define GROUP_POTTERY_COST   1000
972 #define GROUP_POTTERY_COST_MUL 25
973 #define GROUP_POTTERY_BUL_COST 1000
974 #define GROUP_POTTERY_TECH  0
975 #define GROUP_POTTERY_FIREC 50
976 
977 #define GROUP_FIRESTATION 30
978 #define GROUP_FIRESTATION_COLOUR (red(20))
979 #define GROUP_FIRESTATION_COST   20000
980 #define GROUP_FIRESTATION_COST_MUL 10
981 #define GROUP_FIRESTATION_BUL_COST 1000
982 #define GROUP_FIRESTATION_TECH     22
983 #define GROUP_FIRESTATION_FIREC 0
984 
985 #define GROUP_CRICKET 31
986 #define GROUP_CRICKET_COLOUR (white(20))
987 #define GROUP_CRICKET_COST   2000
988 #define GROUP_CRICKET_COST_MUL 3
989 #define GROUP_CRICKET_BUL_COST 1000
990 #define GROUP_CRICKET_TECH     12
991 #define GROUP_CRICKET_FIREC 20
992 
993 #define GROUP_BURNT        32
994 #define GROUP_BURNT_COLOUR    (red(30))
995 #define GROUP_BURNT_COST   0        /* Unused */
996 #define GROUP_BURNT_COST_MUL   1    /* Unused */
997 #define GROUP_BURNT_BUL_COST  1000
998 #define GROUP_BURNT_TECH   0        /* Unused */
999 #define GROUP_BURNT_FIREC  0
1000 
1001 #define GROUP_SHANTY        33
1002 #define GROUP_SHANTY_COLOUR    (red(22))
1003 #define GROUP_SHANTY_COST   0        /* Unused */
1004 #define GROUP_SHANTY_COST_MUL   1    /* Unused */
1005 #define GROUP_SHANTY_BUL_COST  100000
1006 #define GROUP_SHANTY_TECH   0        /* Unused */
1007 #define GROUP_SHANTY_FIREC     25
1008 
1009 #define SHANTY_MIN_PP     150
1010 #define SHANTY_POP        50
1011 #define DAYS_BETWEEN_SHANTY (NUMOF_DAYS_IN_MONTH*5)
1012 #define SHANTY_GET_FOOD   50
1013 #define SHANTY_GET_JOBS   5
1014 #define SHANTY_GET_GOODS  50
1015 #define SHANTY_GET_COAL   1
1016 #define SHANTY_GET_ORE    10
1017 #define SHANTY_GET_STEEL  1
1018 
1019 #define GROUP_FIRE        34
1020 #define GROUP_FIRE_COLOUR    (red(30))
1021 #define GROUP_FIRE_COST   0        /* Unused */
1022 #define GROUP_FIRE_COST_MUL   1    /* Unused */
1023 #define GROUP_FIRE_BUL_COST  1000
1024 #define GROUP_FIRE_TECH   0        /* Unused */
1025 #define GROUP_FIRE_FIREC  0
1026 
1027 #define GROUP_USED        35
1028 #define GROUP_USED_COLOUR (green(12))  /* Unused */
1029 #define GROUP_USED_COST   0            /* Unused */
1030 #define GROUP_USED_COST_MUL  1         /* Unused */
1031 #define GROUP_USED_BUL_COST  0         /* Unused */
1032 #define GROUP_USED_TECH   0            /* Unused */
1033 #define GROUP_USED_FIREC  0            /* Unused */
1034 
1035 #define GROUP_RESIDENCE_ML 36
1036 #define GROUP_RESIDENCE_ML_COLOUR (cyan(24))
1037 #define GROUP_RESIDENCE_ML_COST 2000
1038 #define GROUP_RESIDENCE_ML_COST_MUL 25
1039 #define GROUP_RESIDENCE_ML_BUL_COST 1000
1040 #define GROUP_RESIDENCE_ML_TECH 0
1041 #define GROUP_RESIDENCE_ML_FIREC 75
1042 
1043 #define GROUP_RESIDENCE_HL 37
1044 #define GROUP_RESIDENCE_HL_COLOUR (cyan(24))
1045 #define GROUP_RESIDENCE_HL_COST 4000
1046 #define GROUP_RESIDENCE_HL_COST_MUL 25
1047 #define GROUP_RESIDENCE_HL_BUL_COST 1000
1048 #define GROUP_RESIDENCE_HL_TECH 0
1049 #define GROUP_RESIDENCE_HL_FIREC 75
1050 
1051 #define GROUP_RESIDENCE_LH 38
1052 #define GROUP_RESIDENCE_LH_COLOUR (cyan(24))
1053 #define GROUP_RESIDENCE_LH_COST 800
1054 #define GROUP_RESIDENCE_LH_COST_MUL 25
1055 #define GROUP_RESIDENCE_LH_BUL_COST 1000
1056 #define GROUP_RESIDENCE_LH_TECH 0          /* ?? */
1057 #define GROUP_RESIDENCE_LH_FIREC 75
1058 
1059 #define GROUP_RESIDENCE_MH 39
1060 #define GROUP_RESIDENCE_MH_COLOUR (cyan(24))
1061 #define GROUP_RESIDENCE_MH_COST 1600
1062 #define GROUP_RESIDENCE_MH_COST_MUL 25
1063 #define GROUP_RESIDENCE_MH_BUL_COST 1000
1064 #define GROUP_RESIDENCE_MH_TECH 0
1065 #define GROUP_RESIDENCE_MH_FIREC 75
1066 
1067 #define GROUP_RESIDENCE_HH 40
1068 #define GROUP_RESIDENCE_HH_COLOUR (cyan(24))
1069 #define GROUP_RESIDENCE_HH_COST 3200
1070 #define GROUP_RESIDENCE_HH_COST_MUL 25
1071 #define GROUP_RESIDENCE_HH_BUL_COST 1000
1072 #define GROUP_RESIDENCE_HH_TECH 0
1073 #define GROUP_RESIDENCE_HH_FIREC 75
1074 
1075 #define GROUP_IS_TRANSPORT(group) \
1076             ((group == GROUP_TRACK) || \
1077              (group == GROUP_ROAD) || \
1078              (group == GROUP_RAIL) || \
1079              (group == GROUP_POWER_LINE))
1080 
1081 #define GROUP_IS_RESIDENCE(group) \
1082             ((group == GROUP_RESIDENCE_LL) || \
1083              (group == GROUP_RESIDENCE_ML) || \
1084              (group == GROUP_RESIDENCE_HL) || \
1085              (group == GROUP_RESIDENCE_LH) || \
1086              (group == GROUP_RESIDENCE_MH) || \
1087              (group == GROUP_RESIDENCE_HH))
1088 
1089 #define GROUP_RESIDENCE_LL 4
1090 #define GROUP_RESIDENCE_LL_COLOUR (cyan(24))
1091 #define GROUP_RESIDENCE_LL_COST 1000
1092 #define GROUP_RESIDENCE_LL_COST_MUL 25
1093 #define GROUP_RESIDENCE_LL_BUL_COST 1000
1094 #define GROUP_RESIDENCE_LL_TECH 0
1095 #define GROUP_RESIDENCE_LL_FIREC 75
1096 
1097 
1098 #define MOUSE_TYPE_NORMAL 1
1099 #define MOUSE_TYPE_SQUARE 2
1100 #define MOUSE_BUTTON_REPEAT 4
1101 
1102 #define red(x) (32 + x)
1103 #define green(x) (64 + x)
1104 #define yellow(x) (96 + x)
1105 #define blue(x) (128 + x)
1106 #define magenta(x) (160 + x)
1107 #define cyan(x) (192 + x)
1108 #define white(x) (224 + x)
1109 
1110 
1111 struct map_point_info_struct
1112 {
1113   int population;
1114   int flags;
1115   unsigned short coal_reserve;
1116   unsigned short ore_reserve;
1117   int int_1;
1118   int int_2;
1119   int int_3;
1120   int int_4;
1121   int int_5;
1122   int int_6;
1123   int int_7;
1124 };
1125 typedef struct map_point_info_struct Map_Point_Info;
1126 
1127 
1128 /* Set these flags to true when they need to be updated on the screen */
1129 struct update_scoreboard_struct
1130 {
1131   int mps;
1132   int mini;
1133   int date;
1134   int money;
1135   int monthly;
1136   int yearly_1;
1137   int yearly_2;
1138   long int message_area;
1139 };
1140 typedef struct update_scoreboard_struct Update_Scoreboard;
1141 
1142 
1143 /*
1144   main functions
1145   **************
1146 */
1147 extern int lincity_main (int, char **);
1148 extern void client_main_loop (void);
1149 extern void do_error (char *);
1150 extern void do_save_city (void);
1151 extern void remove_scene (char *);
1152 extern void save_city (char *);
1153 extern void do_load_city (void);
1154 extern void load_opening_city (char *);
1155 extern void load_city (char *);
1156 extern void reset_animation_times (void);
1157 extern void coal_reserve_setup (void);
1158 extern void ore_reserve_setup (void);
1159 extern void setup_river (void);
1160 extern void setup_river2 (int, int, int);
1161 extern void check_savedir (void);
1162 extern void make_savedir (void);
1163 extern void draw_save_dir (int);
1164 extern void input_save_filename (char *);
1165 extern void load_start_image (void);
1166 extern void start_image_text (void);
1167 extern void si_scroll_text (void);
1168 extern char si_next_char (FILE *);
1169 extern void get_real_time (void);
1170 extern void debug_writeval (int);
1171 extern int cheat (void);
1172 extern void print_cheat (void);
1173 extern void unprint_cheat (void);
1174 extern void order_select_buttons (void);
1175 extern void lincityrc (void);
1176 extern void check_for_old_save_dir (void);
1177 extern int count_groups (int);
1178 extern int compile_results (void);
1179 extern void print_results (void);
1180 extern void mail_results (void);
1181 extern void window_results (void);
1182 extern void init_path_strings (void);
1183 extern void lc_usleep (unsigned long);
1184 extern void dump_tcore (void);
1185 #ifndef LC_X11
1186 extern void parse_args (int, char **);
1187 #endif
1188 extern void sustainability_test (void);
1189 extern int sust_fire_cover (void);
1190 extern void check_endian (void);
1191 extern void eswap32 (int *);
1192 extern void eswap16 (unsigned short *);
1193 extern void malloc_failure (void);
1194 
1195 /*
1196   fileutil
1197   ********
1198 */
1199 void malloc_failure (void);
1200 FILE* fopen_read_gzipped (char* fn);
1201 void fclose_read_gzipped (FILE* fp);
1202 void verify_package (void);
1203 
1204 /*
1205   ldsvgui
1206   *******
1207 */
1208 void load_opening_city (char *s);
1209 void check_savedir (void);
1210 
1211 /*
1212   opening
1213   *******
1214 */
1215 void load_start_image (void);
1216 
1217 
1218 /*
1219   type init functions
1220   *******************
1221 */
1222 extern void init_types (void);
1223 extern void init_type_graphics (void);
1224 void init_costs (void);
1225 int get_selected_type_cost (short selected_type);
1226 extern char *load_graphic (char *);
1227 
1228 /*
1229   screen functions
1230   ****************
1231 */
1232 #ifdef CS_PROFILE
1233 extern void FPgl_write (int, int, char *);
1234 extern void FPgl_getbox (int, int, int, int, void *);
1235 extern void FPgl_putbox (int, int, int, int, void *);
1236 extern void FPgl_fillbox (int, int, int, int, int);
1237 extern void FPgl_hline (int, int, int, int);
1238 extern void FPgl_line (int, int, int, int, int);
1239 extern void FPgl_setpixel (int, int, int);
1240 #endif
1241 extern void check_power_line_graphics (void);
1242 extern void check_water_graphics (void);
1243 extern void check_track_graphics (void);
1244 extern void check_rail_graphics (void);
1245 extern void check_road_graphics (void);
1246 extern int select_power_line_type (int, int, int, int);
1247 extern int select_water_type (int, int, int, int);
1248 extern int select_track_type (int, int, int, int);
1249 extern int select_rail_type (int, int, int, int);
1250 extern int select_road_type (int, int, int, int);
1251 extern void update_select_buttons (void);
1252 extern void draw_main_window_box (int);
1253 extern void draw_select_button_graphic (int, char *);
1254 extern void setcustompalette (void);
1255 extern void clip_main_window (void);
1256 extern void unclip_main_window (void);
1257 extern void initfont (void);
1258 extern void load_scroll_buttons (void);
1259 extern void draw_scroll_buttons (void);
1260 extern void update_mini_screen (void);
1261 extern void draw_mini_screen (void);
1262 extern void draw_big_mini_screen (void);
1263 extern void draw_mini_screen_pollution (void);
1264 extern void draw_mini_screen_fire_cover (void);
1265 extern void draw_mini_screen_cricket_cover (void);
1266 extern void draw_mini_screen_health_cover (void);
1267 extern void draw_mini_screen_ub40 (void);
1268 extern void draw_mini_screen_starve (void);
1269 extern void draw_mini_screen_coal (void);
1270 extern void draw_mini_screen_power (void);
1271 extern void draw_mini_screen_ocost (void);
1272 extern void draw_mini_screen_port (void);
1273 extern void draw_mini_screen_cursor (void);
1274 extern void print_stats (void);
1275 extern void print_total_money (void);
1276 int ask_launch_rocket_now (int x, int y);
1277 void print_date (void);
1278 extern void draw_market_cb (void);
1279 extern void clicked_market_cb (int, int);
1280 extern void close_market_cb (void);
1281 extern void draw_port_cb (void);
1282 extern void clicked_port_cb (int, int);
1283 extern void close_port_cb (void);
1284 extern int yn_dial_box (char *, char *, char *, char *);
1285 extern void ok_dial_box (char *, int, char *);
1286 extern int inv_sbut (int);
1287 extern void call_select_change_up (int);
1288 extern void beg_space_pad (char *, int);
1289 extern void draw_up_pbar (int, int, int, int);
1290 extern void draw_down_pbar (int, int, int, int);
1291 extern void do_pbar_population (int);
1292 extern void do_pbar_tech (int);
1293 extern void do_pbar_food (int);
1294 extern void do_pbar_jobs (int);
1295 extern void do_pbar_coal (int);
1296 extern void do_pbar_goods (int);
1297 extern void do_pbar_ore (int);
1298 extern void do_pbar_steel (int);
1299 extern void do_pbar_money (int);
1300 extern void prog_box (char *, int);
1301 /*
1302   mouse functions -- are now in mouse.h, where they should be!
1303   ***************
1304 */
1305 
1306 /*
1307   engine functions
1308   ****************
1309 */
1310 void initialize_tax_rates (void);
1311 void set_mappoint (int x, int y, short selected_type);
1312 void set_mappoint_used (int, int, int, int);
1313 int no_credit_build (int selected_type);
1314 void set_mappoint_ints (int fromx, int fromy, int x, int y);
1315 void new_city (int* originx, int* originy, int random_village);
1316 extern void engine_do_time_step (void);
1317 extern void do_residence (int, int);
1318 extern void debug_print (int);
1319 extern void do_power_source (int, int);
1320 extern void do_power_source_coal (int, int);
1321 extern void do_industry_l (int, int);
1322 extern void do_industry_h (int, int);
1323 extern void do_power_substation (int, int);
1324 extern int get_power (int, int, int, int);
1325 extern int add_a_substation (int, int);
1326 extern void remove_a_substation (int, int);
1327 extern void do_organic_farm (int, int);
1328 void init_mappoint_array (void);
1329 extern void shuffle_mappoint_array (void);
1330 extern void shuffle_substations (void);
1331 extern void do_coalmine (int, int);
1332 extern void do_oremine (int, int);
1333 extern void do_commune (int, int);
1334 extern void do_port (int, int);
1335 extern int buy_food (int, int);
1336 extern int buy_jobs (int, int);
1337 extern int buy_coal (int, int);
1338 extern int buy_ore (int, int);
1339 extern int buy_goods (int, int);
1340 extern int buy_steel (int, int);
1341 extern int sell_food (int, int);
1342 extern int sell_jobs (int, int);
1343 extern int sell_coal (int, int);
1344 extern int sell_ore (int, int);
1345 extern int sell_goods (int, int);
1346 extern int sell_steel (int, int);
1347 
1348 extern void do_pollution (void);
1349 extern void do_parkland (int, int);
1350 extern void do_university (int, int);
1351 extern void do_recycle (int, int);
1352 extern void do_health_centre (int, int);
1353 extern void do_rocket_pad (int, int);
1354 extern void launch_rocket (int x, int y);
1355 extern void remove_people (int);
1356 extern void do_windmill (int, int);
1357 extern void do_monument (int, int);
1358 extern void do_school (int, int);
1359 extern void do_blacksmith (int, int);
1360 extern void do_mill (int, int);
1361 extern void do_pottery (int, int);
1362 extern void do_firestation (int, int);
1363 extern void do_cricket (int, int);
1364 extern void clear_fire_health_and_cricket_cover (void);
1365 extern void do_fire_health_and_cricket_cover (void);
1366 extern void do_fire_cover (int, int);
1367 extern void do_health_cover (int, int);
1368 extern void do_cricket_cover (int, int);
1369 extern void do_random_fire (int, int, int);
1370 extern void do_fire (int, int);
1371 extern int spiral_find_group (int, int, int);
1372 extern int spiral_find_2x2 (int, int);
1373 extern void add_a_shanty (void);
1374 extern void remove_a_shanty (void);
1375 extern void update_shanty (void);
1376 extern void do_shanty (int, int);
1377 extern void do_tip (int, int);
1378 extern void update_tech_dep (int, int);
1379 /*
1380    transport functions
1381    *******************
1382 */
1383 void connect_transport (int originx, int originy, int w, int h);
1384 extern void do_power_line (int, int);
1385 extern void do_track (int, int);
1386 extern void do_rail (int, int);
1387 extern void do_road (int, int);
1388 extern void general_transport (Map_Point_Info *, int *, int, int *);
1389 
1390 /*
1391    market functions
1392    ****************
1393 */
1394 extern int get_food (int, int, int);
1395 extern int put_food (int, int, int);
1396 extern int get_jobs (int, int, int);
1397 extern int put_jobs (int, int, int);
1398 extern int get_goods (int, int, int);
1399 extern int put_goods (int, int, int);
1400 extern int get_ore (int, int, int);
1401 extern int put_ore (int, int, int);
1402 extern int get_coal (int, int, int);
1403 extern int put_coal (int, int, int);
1404 extern int add_a_market (int, int);
1405 extern void remove_a_market (int, int);
1406 extern void do_market (int, int);
1407 extern void shuffle_markets (void);
1408 extern int deal_with_transport (int, int, int, int);
1409 extern int get_steel (int, int, int);
1410 extern int put_steel (int, int, int);
1411 extern int get_waste (int, int, int);
1412 extern int put_waste (int, int, int);
1413 extern int get_stuff (int, int, int, int);
1414 extern int get_stuff2 (Map_Point_Info *, int, int);
1415 extern int get_stuff3 (Map_Point_Info *, int, int);
1416 extern int get_stuff4 (Map_Point_Info *, int, int);
1417 extern int put_stuff (int, int, int, int);
1418 extern int put_stuff2 (Map_Point_Info *, short *, int, int);
1419 extern int put_stuff3 (Map_Point_Info *, short *, int, int);
1420 extern int put_stuff4 (Map_Point_Info *, short *, int, int);
1421 
1422 #ifdef LC_X11
1423 /* ----- X11 functions ----- */
1424 extern void Fgl_write (int, int, char *);
1425 extern void open_write (int, int, char *);
1426 extern void Fgl_getbox (int, int, int, int, void *);
1427 extern void Fgl_putbox (int, int, int, int, void *);
1428 extern void Fgl_fillbox (int, int, int, int, int);
1429 extern void Fgl_hline (int, int, int, int);
1430 extern void Fgl_line (int, int, int, int, int);
1431 extern void Fgl_setpixel (int, int, int);
1432 extern void Fgl_setfontcolors (int, int);
1433 extern void Fgl_setfont (int, int, void*);
1434 extern void Fgl_enableclipping (void);
1435 extern void Fgl_setclippingwindow (int, int, int, int);
1436 extern void Fgl_disableclipping (void);
1437 #ifdef USE_X11_PIXMAPS
1438 #define USE_PIXMAPS
1439 extern void init_pixmaps (void);
1440 extern void init_icon_pixmap (short);
1441 extern void update_pixmap (int, int, int, int, int, int, int, char *);
1442 #endif
1443 
1444 #elif defined (WIN32)
1445 /* ----- Win32 functions ----- */
1446 extern void gl_setpalettecolor (long, long, long, long);
1447 extern void Fgl_write (int, int, char *);
1448 extern void open_write (int, int, char *);
1449 extern void Fgl_getbox (int, int, int, int, void *);
1450 extern void Fgl_putbox (int, int, int, int, void *);
1451 extern void Fgl_fillbox (int, int, int, int, int);
1452 extern void Fgl_hline (int, int, int, int);
1453 extern void Fgl_line (int, int, int, int, int);
1454 extern void Fgl_setpixel (int, int, int);
1455 extern void Fgl_setfontcolors (int, int);
1456 extern void Fgl_setfont (int, int, void*);
1457 extern void Fgl_enableclipping (void);
1458 extern void Fgl_setclippingwindow (int, int, int, int);
1459 extern void Fgl_disableclipping (void);
1460 #define USE_PIXMAPS		/* Always */
1461 extern void init_pixmaps (void);
1462 extern void init_icon_pixmap (short);
1463 extern void update_pixmap (int, int, int, int, int, int, int, char *);
1464 
1465 #else
1466 /* ----- SVGALIB functions ----- */
1467 /* profiling */
1468 #ifdef CS_PROFILE
1469 #define Fgl_write(a,b,c) FPgl_write(a,b,c)
1470 #define Fgl_getbox(a,b,c,d,e) FPgl_getbox(a,b,c,d,e)
1471 #define Fgl_putbox(a,b,c,d,e) FPgl_putbox(a,b,c,d,e)
1472 #define Fgl_fillbox(a,b,c,d,e) FPgl_fillbox(a,b,c,d,e)
1473 #define Fgl_hline(a,b,c,d) FPgl_hline(a,b,c,d)
1474 #define Fgl_line(a,b,c,d,e) FPgl_line(a,b,c,d,e)
1475 #define Fgl_setpixel(a,b,c) FPgl_setpixel(a,b,c)
1476 #define Fgl_setfontcolors(a,b) gl_setfontcolors(a,b)
1477 #define Fgl_setfont(a,b,c) gl_setfont(a,b,c)
1478 #define Fgl_enableclipping()   gl_enableclipping()
1479 #define Fgl_setclippingwindow(a,b,c,d)   gl_setclippingwindow(a,b,c,d)
1480 #define Fgl_disableclipping()   gl_disableclipping()
1481 #else
1482 #define Fgl_write(a,b,c) gl_write(a,b,c)
1483 #define Fgl_getbox(a,b,c,d,e) gl_getbox(a,b,c,d,e)
1484 #define Fgl_putbox(a,b,c,d,e) gl_putbox(a,b,c,d,e)
1485 #define Fgl_fillbox(a,b,c,d,e) gl_fillbox(a,b,c,d,e)
1486 #define Fgl_hline(a,b,c,d) gl_hline(a,b,c,d)
1487 #define Fgl_line(a,b,c,d,e) gl_line(a,b,c,d,e)
1488 #define Fgl_setpixel(a,b,c) gl_setpixel(a,b,c)
1489 #define Fgl_setfontcolors(a,b) gl_setfontcolors(a,b)
1490 #define Fgl_setfont(a,b,c) gl_setfont(a,b,c)
1491 #define Fgl_enableclipping()   gl_enableclipping()
1492 #define Fgl_setclippingwindow(a,b,c,d)   gl_setclippingwindow(a,b,c,d)
1493 #define Fgl_disableclipping()   gl_disableclipping()
1494 #endif
1495 
1496 #endif
1497 /*
1498   *******   end of lin-city.h   ***********
1499   *****************************************
1500 */
1501 
1502 #include "lintypes.h"
1503 
1504 #endif /* __lin_city_h__ */
1505