1 /*
2  *
3  *   Copyright (c) 1994, 2002, 2003 Johannes Prix
4  *   Copyright (c) 1994, 2002 Reinhard Prix
5  *   Copyright (c) 2004-2010 Arthur Huillet
6  *
7  *
8  *  This file is part of Freedroid
9  *
10  *  Freedroid is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; either version 2 of the License, or
13  *  (at your option) any later version.
14  *
15  *  Freedroid is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *  GNU General Public License for more details.
19  *
20  *  You should have received a copy of the GNU General Public License
21  *  along with Freedroid; see the file COPYING. If not, write to the
22  *  Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
23  *  MA  02111-1307  USA
24  *
25  */
26 /* ----------------------------------------------------------------------
27  * This file contains all the define-constants and macros
28  * ---------------------------------------------------------------------- */
29 #ifndef _defs_h
30 #define _defs_h
31 
32 //--------------------
33 // Some technical definitions...
34 //
35 #ifndef TRUE
36 #define TRUE (1)
37 #endif
38 #ifndef FALSE
39 #define FALSE (0)
40 #endif
41 
42 #define ERR -1
43 #define OK 0
44 
45 #ifndef max
46 #define max(x,y) ((x) < (y) ? (y) : (x) )
47 #endif
48 #ifndef min
49 #define min(x,y) ((x) > (y) ? (y) : (x) )
50 #endif
51 
52 // On Linux and MacOS, 'z' is the length modifier to be used in printf() for
53 // a size_t data. On Windows, 'I' is to be used.
54 #if __WIN32__
55 #define SIZE_T_F "%Iu"
56 #else
57 #define SIZE_T_F "%zu"
58 #endif
59 
60 //--------------------
61 // Here you can control the debug level for the various modules, or at least
62 // that's the way it is planned to be.  Turn on and off debugging as you like.
63 //
64 #define SAVE_LOAD_GAME_DEBUG 1
65 enum {
66 	NO_REPORT     = 0,
67 	PLEASE_INFORM = 1 << 1,   // Print a message inviting the user to inform us about the error
68 	IS_FATAL      = 1 << 2,   // Inform the user that the game will stop, and call Terminate()
69 	NO_TERMINATE  = 1 << 3,   // Do not call Terminate() (needed when things have to be cleaned before to call Terminate(), for instance)
70 	SILENT        = 1 << 4    // Special flag, used with find_file() to disable any output
71 };
72 
73 // Define how alert_once_window() has to remember for past alerts
74 enum {
75 	ONCE_PER_RUN  = 0,  // Never redisplay the alert.
76 	ONCE_PER_GAME = 1   // Redisplay the alert if a new savegame was loaded since last time.
77 };
78 
79 enum {
80 	COLLISION_TYPE_NONE = 1,
81 	COLLISION_TYPE_RECTANGLE = 2,
82 };
83 
84 enum {
85 	PART_GROUP_HEAD = 0,
86 	PART_GROUP_SHIELD = 1,
87 	PART_GROUP_TORSO = 2,
88 	PART_GROUP_FEET = 3,
89 	PART_GROUP_WEAPON = 4,
90 	PART_GROUP_WEAPONARM = 5,
91 	ALL_PART_GROUPS = 6
92 };
93 
94 enum {
95 	SOUND_OUTPUT_FMT_STEREO = 0,
96 	SOUND_OUTPUT_FMT_SURROUND40,
97 	SOUND_OUTPUT_FMT_SURROUND51,
98 	ALL_SOUND_OUTPUTS
99 };
100 
101 #define ENEMY_ROTATION_MODELS_AVAILABLE 43
102 #define ROTATION_ANGLES_PER_ROTATION_MODEL 8
103 
104 #define MAX_ENEMY_MOVEMENT_PHASES 999
105 #define WALK_ANIMATION 113
106 #define ATTACK_ANIMATION 114
107 #define GETHIT_ANIMATION 115
108 #define DEATH_ANIMATION 116
109 #define DEAD_ANIMATION 118
110 #define STAND_ANIMATION 117
111 
112 #define NUMBER_OF_SHADOW_IMAGES 20
113 
114 #define MAX_OBSTACLES_ON_MAP 4000
115 
116 #define FLOOR_TILES_VISIBLE_AROUND_TUX ((GameConfig . screen_width >= 1024 ? 13 : GameConfig . screen_width >= 800 ? 9 : 7))
117 #define MAX_ITEMS_PER_LEVEL 300
118 #define MAX_ITEMS_IN_INVENTORY 100
119 #define MAX_ITEMS_IN_NPC_SHOPLIST 200
120 #define INVENTORY_GRID_WIDTH 10
121 #define INVENTORY_GRID_HEIGHT 6
122 #define INV_SUBSQUARE_WIDTH (31)
123 #define INV_SUBSQUARE_HEIGHT 32
124 #define NUMBER_OF_MOUSE_CURSOR_PICTURES 2
125 
126 // Balancing of loot and items.
127 #define MAX_DROP_CLASS 9
128 #define MONEY_PER_BOT_CLASS 12
129 #define ITEM_DROP_PERCENTAGE 10
130 #define GOLD_DROP_PERCENTAGE 40
131 #define SOCKET_DROP_PERCENTAGE 20
132 #define ELECTRIC_SOCKET_COST 100
133 #define MECHANICAL_SOCKET_COST 100
134 #define UNIVERSAL_SOCKET_COST 400
135 #define ARMOUR_DURABILITYLOSS_PERCENTAGE_WHEN_HIT 30
136 #define WEAPON_DURABILITYLOSS_PERCENTAGE_WHEN_USED 10
137 
138 #define MAX_BIG_SCREEN_MESSAGES 10
139 
140 #define NUMBER_OF_SKILL_LEVELS 10
141 #define NUMBER_OF_SKILLS_PER_SKILL_PAGE 5
142 #define MAX_ACTIVE_SPELLS 100
143 #define MAX_NUMBER_OF_PROGRAMS 50
144 
145 enum upgrade_socket_types {
146 	UPGRADE_SOCKET_TYPE_MECHANICAL,
147 	UPGRADE_SOCKET_TYPE_ELECTRIC,
148 	UPGRADE_SOCKET_TYPE_UNIVERSAL
149 };
150 
151 enum skill_forms {
152 	PROGRAM_FORM_INSTANT = 10,	//instant hit whatever behind cursor
153 	PROGRAM_FORM_RADIAL,		//nova
154 	PROGRAM_FORM_BULLET,		//fire a bullet
155 	PROGRAM_FORM_SELF,			//instant hit player
156 	PROGRAM_FORM_SPECIAL,		//special effect
157 };
158 
159 enum _game_mouse_cursors {
160 	MOUSE_CURSOR_NORMAL = 7124,
161 	MOUSE_CURSOR_SCROLL_UP = 7127,
162 	MOUSE_CURSOR_SCROLL_DOWN = 7128,
163 	MOUSE_CURSOR_REPAIR = 7129,
164 	MOUSE_CURSOR_SELECT_TOOL = 7130,
165 	MOUSE_CURSOR_DRAGDROP_TOOL = 7131,
166 };
167 
168 enum _game_config_screen_visible_parameters {
169 	GAME_CONFIG_SCREEN_VISIBLE_INVENTORY = 8001,
170 	GAME_CONFIG_SCREEN_VISIBLE_SKILLS = 8002,
171 	GAME_CONFIG_SCREEN_VISIBLE_CHARACTER = 8003,
172 	GAME_CONFIG_SCREEN_VISIBLE_SKILL_EXPLANATION = 8004,
173 };
174 
175 enum _game_status {
176 	INSIDE_MENU = 0,
177 	INSIDE_GAME,
178 	INSIDE_LVLEDITOR
179 };
180 
181 #define END_OF_OFFSET_FILE_STRING "** End of iso_image offset file **"
182 #define OFFSET_FILE_OFFSETX_STRING "OffsetX="
183 #define OFFSET_FILE_OFFSETY_STRING "OffsetY="
184 
185 #define Set_Rect(rect, xx, yy, ww, hh) {\
186 (rect).x = (xx); (rect).y = (yy); (rect).w = (ww); (rect).h = (hh); }
187 
188 #define Copy_Rect(src, dst) {\
189 (dst).x = (src).x; (dst).y = (src).y; (dst).w = (src).w; (dst).h = (src).h; }
190 
191 #define UserCenter_x (User_Rect.x+User_Rect.w/2)
192 #define UserCenter_y (User_Rect.y+User_Rect.h/2)
193 
194 #define MAX_CHARACTER_NAME_LENGTH 13
195 
196 // The flags for AssembleCombatWindow are:
197 enum { ONLY_SHOW_MAP = 1, DO_SCREEN_UPDATE = 2, ONLY_SHOW_MAP_AND_TEXT = 4,
198 		SHOW_ITEMS = 8, OMIT_OBSTACLES = 16, OMIT_TUX = 32, OMIT_ENEMIES = 64, ZOOM_OUT = 128, OMIT_BLASTS = 256,
199 		SKIP_LIGHT_RADIUS = 512, NO_CURSOR = 1024, OMIT_ITEMS_LABEL = 2048 };
200 
201 // Flags for obstacles
202 enum {
203 	/* Obstacle groups */
204 	IS_WALL = 1,
205 
206 	/* Walls */
207 	IS_HORIZONTAL = 2,
208 	IS_VERTICAL = 4,
209 	CORNER_NE = 2048,
210 	CORNER_NW = 4096,
211 	CORNER_SE = 8192,
212 	CORNER_SW = 16384,
213 
214 	/* Obstacle specs */
215 	BLOCKS_VISION_TOO = 8,	/* Light will not pass through this obstacle */
216 	IS_SMASHABLE = 16,
217 	DROPS_RANDOM_TREASURE = 32,
218 	NEEDS_PRE_PUT = 64,
219 	GROUND_LEVEL = 128,	/* This obstacle has a small height */
220 	IS_WALKABLE = 256,	/* A bot can traverse this obstacle */
221 	IS_CLICKABLE = 512,	/* Player can click on this obstacle */
222 	IS_VOLATILE = 1024	/* This obstacle vanishes when level is respawned. */
223 };
224 
225 
226 //--------------------
227 // Constants for Paths and names of Data-files
228 // the root "FD_DATADIR" should be defined in the Makefile as $(pkgdatadir)
229 // if not, we set it here:
230 //
231 #ifndef FD_DATADIR
232 #define FD_DATADIR ".."		// our local fallback
233 #endif
234 
235 #if __WIN32__
236 #define ICON_FILE "paraicon_32x32.bmp"
237 #else
238 #define ICON_FILE "paraicon.bmp"
239 #endif
240 
241 //--------------------
242 #define SKILL_LEVEL_BUTTON_HEIGHT 32
243 #define SKILL_LEVEL_BUTTON_WIDTH 30
244 
245 
246 #define INITIAL_BLOCK_WIDTH	64
247 #define INITIAL_BLOCK_HEIGHT	64
248 
249 #define TABCHAR 'W'
250 #define TABWIDTH 8
251 //--------------------
252 // Startpos + dimensions of Banner-Texts
253 //
254 #define LEFT_INFO_X 	(13*2)
255 #define LEFT_INFO_Y	(10*2)
256 #define RIGHT_INFO_X	(242*2)
257 #define RIGHT_INFO_Y	(8*2)
258 #define LEFT_TEXT_LEN 20
259 #define RIGHT_TEXT_LEN 6
260 
261 #define BACKGROUND_TEXT_RECT_ALPHA 110
262 #define TEXT_BANNER_HORIZONTAL_MARGIN 4
263 
264 //--------------------
265 // dimensions of the droids as required for functions NotPassable() and CheckEnemyCollsion() )
266 //
267 #define DROIDRADIUSXY	        (7*2/64.0)
268 
269 #define SILENCE (NULL)
270 
271 //--------------------
272 // The sounds when the influencers energy is low or when he is in transfer mode
273 // occur periodically.  These constants specify which intervals are to be used
274 // for these periodic happenings...
275 
276 #define MAX_DIALOGUE_OPTIONS_IN_ROSTER 100
277 #define CHAT_TOPIC_STACK_SIZE 10
278 #define CHAT_CONTEXT_STACK_SIZE 10
279 
280 enum {
281 	UP_BUTTON,
282 	DOWN_BUTTON,
283 	ITEM_BROWSER_LEFT_BUTTON,
284 	ITEM_BROWSER_RIGHT_BUTTON,
285 	ITEM_BROWSER_EXIT_BUTTON,
286 
287 	LEFT_SHOP_BUTTON,
288 	RIGHT_SHOP_BUTTON,
289 	LEFT_TUX_SHOP_BUTTON,
290 	RIGHT_TUX_SHOP_BUTTON,
291 	LEFT_LEVEL_EDITOR_BUTTON,
292 	LEFT_LEVEL_EDITOR_BUTTON_PUSHED,
293 	RIGHT_LEVEL_EDITOR_BUTTON,
294 	RIGHT_LEVEL_EDITOR_BUTTON_PUSHED,
295 
296 	NUMBER_SELECTOR_OK_BUTTON,
297 	NUMBER_SELECTOR_LEFT_BUTTON,
298 	NUMBER_SELECTOR_RIGHT_BUTTON,
299 
300 	BUY_BUTTON,
301 	SELL_BUTTON,
302 	REPAIR_BUTTON,
303 
304 	OPEN_CLOSE_SKILL_EXPLANATION_BUTTON,
305 
306 	EXPORT_THIS_LEVEL_BUTTON,
307 	EXPORT_THIS_LEVEL_BUTTON_PUSHED,
308 	LEVEL_EDITOR_SAVE_SHIP_BUTTON,
309 	LEVEL_EDITOR_SAVE_SHIP_BUTTON_PUSHED,
310 	LEVEL_EDITOR_SAVE_SHIP_BUTTON_OFF,
311 	LEVEL_EDITOR_SAVE_SHIP_BUTTON_OFF_PUSHED,
312 
313 	LEVEL_EDITOR_DELETE_OBSTACLE_BUTTON,
314 	LEVEL_EDITOR_DELETE_OBSTACLE_BUTTON_PUSHED,
315 	LEVEL_EDITOR_NEXT_OBJECT_BUTTON,
316 	LEVEL_EDITOR_NEXT_OBJECT_BUTTON_PUSHED,
317 
318 	LEVEL_EDITOR_TYPESELECT_OBSTACLE_BUTTON,
319 	LEVEL_EDITOR_TYPESELECT_OBSTACLE_BUTTON_PUSHED,
320 	LEVEL_EDITOR_TYPESELECT_OBSTACLE_BUTTON_OFF,
321 	LEVEL_EDITOR_TYPESELECT_OBSTACLE_BUTTON_OFF_PUSHED,
322 	LEVEL_EDITOR_TYPESELECT_ENEMY_BUTTON,
323 	LEVEL_EDITOR_TYPESELECT_ENEMY_BUTTON_PUSHED,
324 	LEVEL_EDITOR_TYPESELECT_ENEMY_BUTTON_OFF,
325 	LEVEL_EDITOR_TYPESELECT_ENEMY_BUTTON_OFF_PUSHED,
326 	LEVEL_EDITOR_TYPESELECT_FLOOR_BUTTON,
327 	LEVEL_EDITOR_TYPESELECT_FLOOR_BUTTON_PUSHED,
328 	LEVEL_EDITOR_TYPESELECT_FLOOR_BUTTON_OFF,
329 	LEVEL_EDITOR_TYPESELECT_FLOOR_BUTTON_OFF_PUSHED,
330 	LEVEL_EDITOR_TYPESELECT_ITEM_BUTTON,
331 	LEVEL_EDITOR_TYPESELECT_ITEM_BUTTON_PUSHED,
332 	LEVEL_EDITOR_TYPESELECT_ITEM_BUTTON_OFF,
333 	LEVEL_EDITOR_TYPESELECT_ITEM_BUTTON_OFF_PUSHED,
334 	LEVEL_EDITOR_TYPESELECT_WAYPOINT_BUTTON,
335 	LEVEL_EDITOR_TYPESELECT_WAYPOINT_BUTTON_PUSHED,
336 	LEVEL_EDITOR_TYPESELECT_WAYPOINT_BUTTON_OFF,
337 	LEVEL_EDITOR_TYPESELECT_WAYPOINT_BUTTON_OFF_PUSHED,
338 
339 	LEVEL_EDITOR_TYPESELECT_MAP_LABEL_BUTTON,
340 	LEVEL_EDITOR_TYPESELECT_MAP_LABEL_BUTTON_PUSHED,
341 	LEVEL_EDITOR_TYPESELECT_MAP_LABEL_BUTTON_OFF,
342 	LEVEL_EDITOR_TYPESELECT_MAP_LABEL_BUTTON_OFF_PUSHED,
343 
344 	LEVEL_EDITOR_BEAUTIFY_GRASS_BUTTON,
345 	LEVEL_EDITOR_BEAUTIFY_GRASS_BUTTON_PUSHED,
346 	LEVEL_EDITOR_ZOOM_IN_BUTTON,
347 	LEVEL_EDITOR_ZOOM_IN_BUTTON_PUSHED,
348 	LEVEL_EDITOR_ZOOM_OUT_BUTTON,
349 	LEVEL_EDITOR_ZOOM_OUT_BUTTON_PUSHED,
350 	LEVEL_EDITOR_NEW_OBSTACLE_LABEL_BUTTON,
351 	LEVEL_EDITOR_NEW_OBSTACLE_LABEL_BUTTON_PUSHED,
352 	LEVEL_EDITOR_EDIT_CHEST_BUTTON,
353 	LEVEL_EDITOR_EDIT_CHEST_BUTTON_PUSHED,
354 	LEVEL_EDITOR_QUIT_BUTTON,
355 	LEVEL_EDITOR_QUIT_BUTTON_PUSHED,
356 	LEVEL_EDITOR_TOGGLE_ENEMIES_BUTTON,
357 	LEVEL_EDITOR_TOGGLE_ENEMIES_BUTTON_PUSHED,
358 	LEVEL_EDITOR_TOGGLE_ENEMIES_BUTTON_OFF,
359 	LEVEL_EDITOR_TOGGLE_ENEMIES_BUTTON_OFF_PUSHED,
360 	LEVEL_EDITOR_TOGGLE_OBSTACLES_BUTTON,
361 	LEVEL_EDITOR_TOGGLE_OBSTACLES_BUTTON_PUSHED,
362 	LEVEL_EDITOR_TOGGLE_OBSTACLES_BUTTON_OFF,
363 	LEVEL_EDITOR_TOGGLE_OBSTACLES_BUTTON_OFF_PUSHED,
364 	LEVEL_EDITOR_TOGGLE_MAP_LABELS_BUTTON,
365 	LEVEL_EDITOR_TOGGLE_MAP_LABELS_BUTTON_PUSHED,
366 	LEVEL_EDITOR_TOGGLE_MAP_LABELS_BUTTON_OFF,
367 	LEVEL_EDITOR_TOGGLE_MAP_LABELS_BUTTON_OFF_PUSHED,
368 	LEVEL_EDITOR_TOGGLE_TOOLTIPS_BUTTON,
369 	LEVEL_EDITOR_TOGGLE_TOOLTIPS_BUTTON_PUSHED,
370 	LEVEL_EDITOR_TOGGLE_TOOLTIPS_BUTTON_OFF,
371 	LEVEL_EDITOR_TOGGLE_TOOLTIPS_BUTTON_OFF_PUSHED,
372 	LEVEL_EDITOR_TOGGLE_COLLISION_RECTS_BUTTON,
373 	LEVEL_EDITOR_TOGGLE_COLLISION_RECTS_BUTTON_PUSHED,
374 	LEVEL_EDITOR_TOGGLE_COLLISION_RECTS_BUTTON_OFF,
375 	LEVEL_EDITOR_TOGGLE_COLLISION_RECTS_BUTTON_OFF_PUSHED,
376 	LEVEL_EDITOR_TOGGLE_GRID_BUTTON_OFF,
377 	LEVEL_EDITOR_TOGGLE_GRID_BUTTON_OFF_PUSHED,
378 	LEVEL_EDITOR_TOGGLE_GRID_BUTTON,
379 	LEVEL_EDITOR_TOGGLE_GRID_BUTTON_PUSHED,
380 	LEVEL_EDITOR_TOGGLE_GRID_BUTTON_FULL,
381 	LEVEL_EDITOR_TOGGLE_GRID_BUTTON_FULL_PUSHED,
382 	LEVEL_EDITOR_TOGGLE_WAYPOINT_CONNECTIONS_BUTTON,
383 	LEVEL_EDITOR_TOGGLE_WAYPOINT_CONNECTIONS_BUTTON_PUSHED,
384 	LEVEL_EDITOR_TOGGLE_WAYPOINT_CONNECTIONS_BUTTON_OFF,
385 	LEVEL_EDITOR_TOGGLE_WAYPOINT_CONNECTIONS_BUTTON_OFF_PUSHED,
386 	LEVEL_EDITOR_ALL_FLOOR_LAYERS_BUTTON,
387 	LEVEL_EDITOR_ALL_FLOOR_LAYERS_BUTTON_PUSHED,
388 	LEVEL_EDITOR_SINGLE_FLOOR_LAYER_BUTTON,
389 	LEVEL_EDITOR_SINGLE_FLOOR_LAYER_BUTTON_PUSHED,
390 
391 	LEVEL_EDITOR_NEXT_ITEM_GROUP_BUTTON,
392 	LEVEL_EDITOR_PREV_ITEM_GROUP_BUTTON,
393 	LEVEL_EDITOR_CANCEL_ITEM_DROP_BUTTON,
394 	LEVEL_EDITOR_UNDO_BUTTON,
395 	LEVEL_EDITOR_UNDO_BUTTON_PUSHED,
396 	LEVEL_EDITOR_REDO_BUTTON,
397 	LEVEL_EDITOR_REDO_BUTTON_PUSHED,
398 
399 	WEAPON_RECT_BUTTON,
400 	DRIVE_RECT_BUTTON,
401 	SHIELD_RECT_BUTTON,
402 	HELMET_RECT_BUTTON,
403 	ARMOUR_RECT_BUTTON,
404 
405 	MORE_STR_BUTTON,
406 	MORE_MAG_BUTTON,
407 	MORE_DEX_BUTTON,
408 	MORE_VIT_BUTTON,
409 
410 	SCROLL_TEXT_UP_BUTTON,
411 	SCROLL_TEXT_DOWN_BUTTON,
412 
413 	DESCRIPTION_WINDOW_UP_BUTTON,
414 	DESCRIPTION_WINDOW_DOWN_BUTTON,
415 
416 	DROID_SHOW_EXIT_BUTTON,
417 
418 	QUEST_BROWSER_ITEM_SHORT_BUTTON,
419 	QUEST_BROWSER_ITEM_LONG_BUTTON,
420 
421 	TAKEOVER_HELP_BUTTON,
422 
423 	WEAPON_MODE_BUTTON,
424 	SKI_ICON_BUTTON,
425 
426 	ITEM_UPGRADE_APPLY_BUTTON,
427 	ITEM_UPGRADE_APPLY_BUTTON_DISABLED,
428 	ITEM_UPGRADE_CLOSE_BUTTON,
429 
430 	ADDON_CRAFTING_APPLY_BUTTON,
431 	ADDON_CRAFTING_APPLY_BUTTON_DISABLED,
432 	ADDON_CRAFTING_CLOSE_BUTTON,
433 	ADDON_CRAFTING_SCROLL_UP_BUTTON,
434 	ADDON_CRAFTING_SCROLL_DOWN_BUTTON,
435 	ADDON_CRAFTING_SCROLL_DESC_UP_BUTTON,
436 	ADDON_CRAFTING_SCROLL_DESC_DOWN_BUTTON,
437 
438 	//--------------------
439 	// Please leave this here as the last entry, since it conveniently and
440 	// automatically counts the number of buttons defined.  Other buttons
441 	// can be inserted above.
442 	//
443 	MAX_MOUSE_PRESS_BUTTONS
444 };
445 
446 
447 #define STR_X 90
448 #define STR_Y 140
449 #define DEX_Y 165
450 #define VIT_Y 190
451 #define MAG_Y 215
452 
453 #define BUTTON_WIDTH 35
454 #define BUTTON_HEIGHT 19
455 #define ENERGYBAR_MAXWIDTH 50
456 
457 #define DEFAULT_SCREEN_WIDTH  (800)
458 #define DEFAULT_SCREEN_HEIGHT (600)
459 #define CHARACTERRECT_X (GameConfig.screen_width - 320)
460 #define CHARACTERRECT_W (320)
461 #define CHARACTERRECT_H (480)
462 
463 #define ITEM_UPGRADE_RECT_X 320
464 #define ITEM_UPGRADE_RECT_Y 0
465 #define ITEM_UPGRADE_RECT_W 320
466 #define ITEM_UPGRADE_RECT_H 480
467 
468 #define ADDON_CRAFTING_RECT_X 0
469 #define ADDON_CRAFTING_RECT_Y 0
470 #define ADDON_CRAFTING_RECT_W 320
471 #define ADDON_CRAFTING_RECT_H 480
472 
473 // Number of keyframes in Tux image_archive files
474 #define TUX_TOTAL_PHASES 35
475 
476 // The speed is measured in tiles per second.
477 #define TUX_RUNNING_SPEED 5.5
478 #define TUX_WALKING_SPEED 2.5
479 
480 #define MAX_TUX_DIRECTIONS      16
481 #define RADIAL_SPELL_DIRECTIONS 16
482 #define BULLET_DIRECTIONS       16
483 
484 #define WAIT_AFTER_KILLED	3.0	// time to wait and still display pictures after the destruction of
485 				     // the players droid.  This is now measured in seconds and can be a float
486 #define WAIT_AFTER_GAME_WON	5.0	// how long to show tux after the game is won
487 #define WAIT_COLLISION		1	// after a little collision with Tux or another enemy, hold position for a while
488 				    // this variable describes the amount of time in SECONDS
489 #define WAIT_BEFORE_ROTATE 0.7 // Wait a bit to avoid jittering between two rotation angles
490 
491 #define ALLBLASTTYPES		3	/* number of different explosions */
492 
493 #define MAX_MELEE_SHOTS		100
494 #define MAXBULLETS		100	/* maximum possible Bullets in the air */
495 #define MAXBLASTS		100	/* max. possible Blasts visible */
496 #define ATTACK_MOVE_RATE 0.2	// Minimum number of seconds between to displacement computation
497 			     // during attack
498 
499 #define DEFAULT_BULLET_LIFETIME 5.0	// prevent bullets to infinitely move (this is merely a protection against bugs)
500 
501 //--------------------
502 // Map- and levelrelated defines
503 // WARNING leave them here, they are required in struct.h
504 //
505 
506 #define MIN_MAP_LINES		30
507 #define MAX_MAP_LINES 		100
508 #define MAX_INTERMEDIATE_WAYPOINTS_FOR_TUX 100
509 
510 #define EW_WALL_BIT 1
511 #define NS_WALL_BIT 2
512 #define VISIBLE_EVENT_BIT 4
513 #define SQUARE_SEEN_AT_ALL_BIT 8
514 #define UPDATE_SQUARE_BIT 16
515 
516 #define MAX_SAVED_CHARACTERS_ON_DISK 7	// Not actually amount of chars, but amount "per page"
517 
518 #define MAX_INFLU_POSITION_HISTORY 500
519 #define MAX_MISSIONS_IN_GAME 50	// how many missions can there be at most in FreedroidRPG
520 #define MAX_MISSION_DESCRIPTION_TEXTS 25
521 
522 #define MAX_LEVELS		100	// how many map levels are allowed in one ship
523 
524 #define MAX_PHASES_IN_A_BULLET 12
525 
526 #define UNIVERSAL_COORD_W(W) (int)((float)(W) * ((float)(GameConfig . screen_width) / 640.0))
527 #define UNIVERSAL_COORD_H(H) (int)((float)(H) * ((float)(GameConfig . screen_height) / 480.0))
528 
529 //--------------------
530 // Rectangle definitions
531 
532 // the inventory rect is the rectangle inside the inventory screen,
533 // where all the items "in the backpack" including the quick inventory
534 // are displayed.  it's relative to the top left corner, as always.
535 //
536 
537 #define INVENTORY_RECT_Y 260
538 #define INVENTORY_RECT_X 8
539 
540 // 388 is the maximum y size to fit items up to 6 inventory squares high
541 // 398 is the maximum y size to fit items up to 5 inventory squares high
542 
543 //--------------------
544 // The weapon rectangle is of course for the weapon the Tux is
545 // using.  When using a 2-handed weapon, the 'shield' rectangle
546 // will ALSO be used to show this weapon, since the shield-hand
547 // is also needed to wield such a thing.
548 //
549 // 31 is the minimum x size to fit items up to 4 inventory squares wide
550 #define WEAPON_RECT_WIDTH 67
551 #define WEAPON_RECT_HEIGHT 112
552 #define WEAPON_RECT_X 31
553 #define WEAPON_RECT_Y 117
554 
555 //--------------------
556 // The armor rectangle is where you can place some armor
557 // for the body of the Tux.
558 //
559 #define ARMOUR_RECT_WIDTH 66
560 #define ARMOUR_RECT_HEIGHT 92
561 #define ARMOUR_RECT_X 130
562 #define ARMOUR_RECT_Y 70
563 
564 //--------------------
565 // The shield rectangle is obviously for the shields, but not only
566 // that:  when using a 2-handed weapon, its also good for the weapon
567 // again, to indicate, that no shield can be used in conjunction with
568 // such a 2-handed weapon.
569 //
570 #define SHIELD_RECT_WIDTH 70
571 #define SHIELD_RECT_HEIGHT 112
572 #define SHIELD_RECT_X 230
573 #define SHIELD_RECT_Y 116
574 
575 //--------------------
576 // The 'drive' rectangle is actually for the footwear.
577 //
578 #define DRIVE_RECT_WIDTH 64
579 #define DRIVE_RECT_HEIGHT 64
580 #define DRIVE_RECT_X 130
581 #define DRIVE_RECT_Y 175
582 
583 //--------------------
584 // Now this is the 'helmet' rectangle.
585 //
586 #define HELMET_RECT_WIDTH 64
587 #define HELMET_RECT_HEIGHT 64
588 #define HELMET_RECT_X 25
589 #define HELMET_RECT_Y 22
590 
591 // Flags for thrown items. see PutItem function in view.c
592 #define PUT_ONLY_THROWN_ITEMS 3
593 #define PUT_NO_THROWN_ITEMS 4
594 
595 //--------------------
596 // item qualities
597 enum item_quality {
598 	NORMAL_QUALITY = 0,
599 	BAD_QUALITY = 1,
600 	GOOD_QUALITY = 2
601 };
602 
603 
604 //--------------------
605 // explosion types
606 //
607 enum _explosions {
608 	BULLETBLAST = 0,
609 	DROIDBLAST,
610 	EXTERMINATORBLAST,
611 };
612 
613 enum _status {
614 	INFOUT = -30,
615 };
616 
617 enum _busytype {
618 	NONE = 0,
619 	DRINKING_POTION = 1,
620 	WEAPON_FIREWAIT,
621 	WEAPON_RELOAD,
622 	THROWING_GRENADE,
623 	RUNNING_PROGRAM,
624 	TAKING_PILL,
625 };
626 
627 enum _attackhit {
628 	ATTACK_HIT_BOTS = 1,
629 	ATTACK_HIT_HUMANS = 2,
630 	ATTACK_HIT_ALL = 3,
631 };
632 
633 // possible directions for a line of walls
634 // We use 1 et -1, because north is the opposite of south.
635 enum _level_editor_directions {
636 	UNDEFINED = 0,
637 	NORTH = 1,
638 	EAST = 2,
639 	SOUTH = -1,
640 	WEST = -2
641 };
642 
643 enum _enemy_combat_state_machine_states {
644 	MOVE_ALONG_RANDOM_WAYPOINTS = 0,
645 	STOP_AND_EYE_TARGET = 1,
646 	ATTACK = 2,
647 	PARALYZED = 3,
648 	COMPLETELY_FIXED = 4,
649 	FOLLOW_TUX = 5,
650 	RETURNING_HOME = 6,
651 	SELECT_NEW_WAYPOINT = 7,
652 	TURN_TOWARDS_NEXT_WAYPOINT = 8,
653 	RUSH_TUX_AND_OPEN_TALK = 9,
654 	WAYPOINTLESS_WANDERING = 10,
655 	UNDEFINED_STATE = 100
656 };
657 enum _enemy_combat_target_codes {
658 	ATTACK_TARGET_IS_ENEMY = 101,
659 	ATTACK_TARGET_IS_PLAYER = 102,
660 	ATTACK_TARGET_IS_NOTHING = 103
661 };
662 
663 enum {
664 	TRANSPARENCY_NONE = 0,
665 	TRANSPARENCY_FOR_WALLS = 10
666 };
667 
668 //--------------------
669 // It is possible, that the Tux must fist move somewhere AND
670 // then open a chest or move somewhere AND then pick something up
671 // or the like.  These are called 'combo_actions' and some definition
672 // has to be made about the type of current combo_action.
673 //
674 enum _combo_action_types {
675 	NO_COMBO_ACTION_SET = -10,
676 	COMBO_ACTION_OBSTACLE = 15,
677 	COMBO_ACTION_PICK_UP_ITEM = 16,
678 };
679 
680 //--------------------
681 // For shop interfaces and chest interfaces we need some constants to
682 // transmit the intended shop/chest action.
683 //
684 enum {
685 	DO_NOTHING = -1,
686 	BUY_1_ITEM = 1,
687 	SELL_1_ITEM = 4,
688 	REPAIR_ITEM = 12,
689 };
690 
691 enum obstacle_types {
692 
693 	ISO_TREE_4 = 0,
694 
695 	ISO_V_WALL = 1,
696 	ISO_H_WALL = 2,
697 	ISO_V_WALL_WITH_DOT = 3,
698 	ISO_H_WALL_WITH_DOT = 4,
699 
700 	ISO_TREE_5 = 5,
701 
702 	ISO_H_DOOR_000_OPEN = 6,
703 	ISO_H_DOOR_025_OPEN = 7,
704 	ISO_H_DOOR_050_OPEN = 8,
705 	ISO_H_DOOR_075_OPEN = 9,
706 	ISO_H_DOOR_100_OPEN = 10,
707 	ISO_V_DOOR_000_OPEN = 11,
708 	ISO_V_DOOR_025_OPEN = 12,
709 	ISO_V_DOOR_050_OPEN = 13,
710 	ISO_V_DOOR_075_OPEN = 14,
711 	ISO_V_DOOR_100_OPEN = 15,
712 
713 	ISO_TELEPORTER_1 = 16,
714 	ISO_TELEPORTER_2 = 17,
715 
716 	ISO_DROID_NEST_RED = 18,
717 	ISO_DROID_NEST_BLUE,
718 	ISO_DROID_NEST_YELLOW,
719 	ISO_DROID_NEST_GREEN,
720 
721 	ISO_H_DOOR_LOCKED = 26,
722 	ISO_V_DOOR_LOCKED = 27,
723 
724 	ISO_H_CHEST_CLOSED = 28,
725 	ISO_V_CHEST_CLOSED = 29,
726 	ISO_H_CHEST_OPEN = 30,
727 	ISO_V_CHEST_OPEN = 31,
728 
729 	ISO_AUTOGUN_W = 32,
730 	ISO_AUTOGUN_N = 33,
731 	ISO_AUTOGUN_E = 34,
732 	ISO_AUTOGUN_S = 35,
733 	//see at the end for disabled autoguns
734 
735 	ISO_CAVE_WALL_H = 36,
736 	ISO_CAVE_WALL_V = 37,
737 	ISO_CAVE_CORNER_NE = 38,
738 	ISO_CAVE_CORNER_SE = 39,
739 	ISO_CAVE_CORNER_NW = 40,
740 	ISO_CAVE_CORNER_SW = 41,
741 
742 	ISO_COOKING_POT = 42,
743 
744 	ISO_CONSOLE_S = 43,
745 	ISO_CONSOLE_E = 44,
746 	ISO_CONSOLE_N = 45,
747 	ISO_CONSOLE_W = 46,
748 
749 	ISO_PILLAR_TALL = 47,
750 	ISO_PILLAR_SHORT = 48,
751 	ISO_TV_PILLAR_W = 49,
752 
753 	ISO_BARREL_1 = 50,
754 	ISO_BARREL_2 = 51,
755 	ISO_BARREL_3 = 52,
756 	ISO_BARREL_4 = 53,
757 
758 	ISO_LAMP_S,
759 
760 	ISO_ENHANCER_RU = 57,
761 	ISO_ENHANCER_LU = 56,
762 	ISO_ENHANCER_RD = 58,
763 	ISO_ENHANCER_LD = 55,
764 
765 	ISO_V_WOOD_FENCE = 59,
766 	ISO_H_WOOD_FENCE = 60,
767 
768 	ISO_V_MESH_FENCE = 63,
769 	ISO_H_MESH_FENCE = 64,
770 	ISO_V_WIRE_FENCE = 65,
771 	ISO_H_WIRE_FENCE = 66,
772 
773 	//--------------------
774 	// These obstacles are generated from 'commercial_models_for_furniture.blend' file
775 	// which is currently not in the cvs rep. for licensing issues, but I'll send a
776 	// version to any FreedroidRPG co-worker involved with the graphics
777 	//
778 	ISO_N_TOILET_SMALL = 67,
779 	ISO_E_TOILET_SMALL,
780 	ISO_S_TOILET_WHITE_SMALL,
781 	ISO_W_TOILET_WHITE_SMALL,
782 	ISO_N_TOILET_BIG,
783 	ISO_E_TOILET_BIG,
784 	ISO_S_TOILET_BIG,
785 	ISO_W_TOILET_BIG,
786 	ISO_N_CHAIR,
787 	ISO_E_CHAIR,
788 	ISO_S_CHAIR,
789 	ISO_W_CHAIR,
790 	ISO_N_DESK,
791 	ISO_E_DESK,
792 	ISO_S_DESK,
793 	ISO_W_DESK,
794 	ISO_N_SCHOOL_CHAIR,
795 	ISO_E_SCHOOL_CHAIR,
796 	ISO_S_SCHOOL_CHAIR,
797 	ISO_W_SCHOOL_CHAIR,
798 
799 	//--------------------
800 	// These obstacles are generated from 'commercial_models_for_furniture2.blend' file
801 	// which is currently not in the cvs rep. for licensing issues, but I'll send a
802 	// version to any FreedroidRPG co-worker involved with the graphics
803 	//
804 	ISO_N_BED = 87,
805 	ISO_E_BED,
806 	ISO_S_BED,
807 	ISO_W_BED,
808 
809 	// Except these ones which were done by Basse :)
810 	ISO_SHELF_FULL_V,
811 	ISO_SHELF_FULL_H,
812 	ISO_SHELF_EMPTY_V,
813 	ISO_SHELF_EMPTY_H,
814 	ISO_SHELF_SMALL_FULL_V,
815 	ISO_SHELF_SMALL_FULL_H,
816 	ISO_SHELF_SMALL_EMPTY_V,
817 	ISO_SHELF_SMALL_EMPTY_H,
818 
819 	ISO_N_FULL_PARK_BENCH,
820 	ISO_E_FULL_PARK_BENCH,
821 	ISO_S_FULL_PARK_BENCH,
822 	ISO_W_FULL_PARK_BENCH,
823 
824 	//--------------------
825 	// These obstacles are generated from 'commercial_models_for_furniture3.blend' file
826 	// which is currently not in the cvs rep. for licensing issues, but I'll send a
827 	// version to any FreedroidRPG co-worker involved with the graphics
828 	//
829 	ISO_H_BATHTUB = 103,
830 	ISO_V_BATHTUB,
831 	ISO_H_WASHTUB,
832 	ISO_V_WASHTUB,
833 	ISO_V_CURTAIN,
834 	ISO_H_CURTAIN,
835 	ISO_E_SOFA,
836 	ISO_S_SOFA,
837 	ISO_W_SOFA,
838 	ISO_N_SOFA,
839 
840 	//--------------------
841 	// Here we insert a few trees generated with the LSystem python script.  wow!
842 	//
843 	ISO_TREE_1,		// = 113  ,
844 	ISO_TREE_2,
845 	ISO_TREE_3,
846 
847 	ISO_THICK_WALL_H,	// = 116 ,
848 	ISO_THICK_WALL_V,
849 	ISO_THICK_WALL_CORNER_NE,
850 	ISO_THICK_WALL_CORNER_SE,
851 	ISO_THICK_WALL_CORNER_NW,
852 	ISO_THICK_WALL_CORNER_SW,
853 	ISO_THICK_WALL_T_N,
854 	ISO_THICK_WALL_T_E,
855 	ISO_THICK_WALL_T_S,
856 	ISO_THICK_WALL_T_W,
857 
858 	ISO_CAVE_WALL_END_W,	// = 126 ,
859 	ISO_CAVE_WALL_END_N,
860 	ISO_CAVE_WALL_END_E,
861 	ISO_CAVE_WALL_END_S,
862 
863 	ISO_GREY_WALL_END_W,	// = 130 ,
864 	ISO_GREY_WALL_END_N,
865 	ISO_GREY_WALL_END_E,
866 	ISO_GREY_WALL_END_S,
867 
868 	ISO_BRICK_WALL_H,	// = 134 ,
869 	ISO_BRICK_WALL_V,
870 	ISO_BRICK_WALL_END,
871 
872 	ISO_BRICK_WALL_CORNER_NE,	// = 137 ,
873 	ISO_BRICK_WALL_CORNER_SW,
874 	ISO_BRICK_WALL_CORNER_NW,
875 	ISO_BRICK_WALL_CORNER_SE,
876 
877 	ISO_BLOOD_1,		// = 141 ,
878 	ISO_BLOOD_2,
879 	ISO_BLOOD_3,
880 	ISO_BLOOD_4,
881 	ISO_BLOOD_5,
882 	ISO_BLOOD_6,
883 	ISO_BLOOD_7,
884 	ISO_BLOOD_8,
885 
886 	ISO_EXIT_1,		// = 149 ,
887 	ISO_EXIT_2,
888 
889 	ISO_ROCKS_N_PLANTS_1,	// = 151 ,
890 	ISO_ROCKS_N_PLANTS_2,
891 	ISO_ROCKS_N_PLANTS_3,
892 	ISO_ROCKS_N_PLANTS_4,
893 
894 	ISO_ROOM_WALL_V_RED,	// = 155 ,
895 	ISO_ROOM_WALL_H_RED,
896 	ISO_ROOM_WALL_V_GREEN,
897 	ISO_ROOM_WALL_H_GREEN,
898 
899 	ISO_SHOP_FURNITURE_1,	// = 159 ,
900 	ISO_SHOP_FURNITURE_2,
901 	ISO_SHOP_FURNITURE_3,
902 	ISO_SHOP_FURNITURE_4,
903 	ISO_SHOP_FURNITURE_5,
904 	ISO_SHOP_FURNITURE_6,
905 
906 	ISO_OUTER_WALL_N1,	// = 165 ,
907 	ISO_OUTER_WALL_N2,
908 	ISO_OUTER_WALL_N3,
909 	ISO_OUTER_WALL_S1,
910 	ISO_OUTER_WALL_S2,
911 	ISO_OUTER_WALL_S3,
912 	ISO_OUTER_WALL_E1,
913 	ISO_OUTER_WALL_E2,
914 	ISO_OUTER_WALL_E3,
915 	ISO_OUTER_WALL_W1,
916 	ISO_OUTER_WALL_W2,
917 	ISO_OUTER_WALL_W3,
918 
919 	ISO_OUTER_WALL_CORNER_NW,	// = 177 ,
920 	ISO_OUTER_WALL_CORNER_SW,
921 	ISO_OUTER_WALL_CORNER_SE,
922 	ISO_OUTER_WALL_CORNER_NE,
923 
924 	ISO_OUTER_DOOR_V_00,	// = 181 ,
925 	ISO_OUTER_DOOR_V_25,
926 	ISO_OUTER_DOOR_V_50,
927 	ISO_OUTER_DOOR_V_75,
928 	ISO_OUTER_DOOR_V_100,
929 
930 	ISO_OUTER_DOOR_H_00,
931 	ISO_OUTER_DOOR_H_25,
932 	ISO_OUTER_DOOR_H_50,
933 	ISO_OUTER_DOOR_H_75,
934 	ISO_OUTER_DOOR_H_100,
935 
936 	ISO_OUTER_DOOR_V_LOCKED,	// =191
937 	ISO_OUTER_DOOR_H_LOCKED,
938 
939 	ISO_TV_PILLAR_N,	// =193,
940 	ISO_TV_PILLAR_E,
941 	ISO_TV_PILLAR_S,
942 
943 	ISO_YELLOW_CHAIR_N,	// = 196
944 	ISO_YELLOW_CHAIR_E,
945 	ISO_YELLOW_CHAIR_S,
946 	ISO_YELLOW_CHAIR_W,
947 	ISO_RED_CHAIR_N,	// = 200
948 	ISO_RED_CHAIR_E,
949 	ISO_RED_CHAIR_S,
950 	ISO_RED_CHAIR_W,
951 
952 	ISO_BODY_RED_GUARD_N,	// 204
953 	ISO_BODY_RED_GUARD_E,
954 	ISO_BODY_RED_GUARD_S,
955 	ISO_BODY_RED_GUARD_W,
956 
957 	ISO_CONFERENCE_TABLE_N,	//208
958 	ISO_CONFERENCE_TABLE_E,
959 	ISO_CONFERENCE_TABLE_S,
960 	ISO_CONFERENCE_TABLE_W,
961 
962 	ISO_RED_FENCE_V,	//212
963 	ISO_RED_FENCE_H,
964 	ISO_BED_1,
965 	ISO_BED_2,
966 	ISO_BED_3,
967 	ISO_BED_4,
968 	ISO_BED_5,
969 	ISO_BED_6,
970 	ISO_BED_7,
971 	ISO_BED_8,
972 	ISO_PROJECTOR_E,	// 222
973 	ISO_PROJECTOR_W,
974 
975 	ISO_LAMP_E,
976 	ISO_LAMP_N,
977 	ISO_LAMP_W,
978 
979 	ISO_ROCKS_N_PLANTS_5,	//227
980 	ISO_ROCKS_N_PLANTS_6,
981 	ISO_ROCKS_N_PLANTS_7,
982 	ISO_ROCKS_N_PLANTS_8,
983 
984 	ISO_BRICK_WALL_JUNCTION_1,	//231
985 	ISO_BRICK_WALL_JUNCTION_2,
986 	ISO_BRICK_WALL_JUNCTION_3,
987 	ISO_BRICK_WALL_JUNCTION_4,
988 	ISO_BRICK_WALL_CRACKED_1,
989 	ISO_BRICK_WALL_CRACKED_2,
990 	ISO_BRICK_WALL_RUBBLE_1,
991 	ISO_BRICK_WALL_RUBBLE_2,
992 
993 	ISO_PROJECTOR_SCREEN_N,	// 239
994 	ISO_PROJECTOR_SCREEN_E,
995 	ISO_PROJECTOR_SCREEN_S,
996 	ISO_PROJECTOR_SCREEN_W,
997 
998 	ISO_PROJECTOR_N,	// 243
999 	ISO_PROJECTOR_S,
1000 
1001 	ISO_SIGN_1,		//245
1002 	ISO_SIGN_2,
1003 	ISO_SIGN_3,
1004 
1005 	ISO_LIGHT_GREEN_WALL_1,	// 248
1006 	ISO_LIGHT_GREEN_WALL_2,
1007 	ISO_FUNKY_WALL_1,
1008 	ISO_FUNKY_WALL_2,
1009 	ISO_FUNKY_WALL_3,
1010 	ISO_FUNKY_WALL_4,
1011 
1012 	ISO_COUNTER_MIDDLE_1,
1013 	ISO_COUNTER_MIDDLE_2,
1014 	ISO_COUNTER_MIDDLE_3,
1015 	ISO_COUNTER_MIDDLE_4,
1016 
1017 	ISO_COUNTER_CORNER_ROUND_1,
1018 	ISO_COUNTER_CORNER_ROUND_2,
1019 	ISO_COUNTER_CORNER_ROUND_3,
1020 	ISO_COUNTER_CORNER_ROUND_4,
1021 
1022 	ISO_COUNTER_CORNER_SHARP_1,
1023 	ISO_COUNTER_CORNER_SHARP_2,
1024 	ISO_COUNTER_CORNER_SHARP_3,
1025 	ISO_COUNTER_CORNER_SHARP_4,
1026 
1027 	ISO_LIBRARY_FURNITURE_1,
1028 	ISO_LIBRARY_FURNITURE_2,
1029 
1030 	ISO_3_BATHTUB,
1031 	ISO_4_BATHTUB,
1032 	ISO_BAR_TABLE,
1033 
1034 	ISO_EXIT_3,
1035 	ISO_EXIT_4,
1036 
1037 	ISO_OUTER_WALL_SMALL_CORNER_1,
1038 	ISO_OUTER_WALL_SMALL_CORNER_2,
1039 	ISO_OUTER_WALL_SMALL_CORNER_3,
1040 	ISO_OUTER_WALL_SMALL_CORNER_4,
1041 
1042 	ISO_TABLE_OVAL_1,
1043 	ISO_TABLE_OVAL_2,
1044 	ISO_TABLE_GLASS_1,
1045 	ISO_TABLE_GLASS_2,
1046 
1047 	ISO_GLASS_WALL_1,
1048 	ISO_GLASS_WALL_2,
1049 
1050 	ISO_CYAN_WALL_WINDOW_1,
1051 	ISO_CYAN_WALL_WINDOW_2,
1052 	ISO_RED_WALL_WINDOW_1,
1053 	ISO_RED_WALL_WINDOW_2,
1054 	ISO_FLOWER_WALL_WINDOW_1,
1055 	ISO_FLOWER_WALL_WINDOW_2,
1056 	ISO_FUNKY_WALL_WINDOW_1,
1057 	ISO_FUNKY_WALL_WINDOW_2,
1058 
1059 	ISO_RESTAURANT_SHELVES_1,
1060 	ISO_RESTAURANT_SHELVES_2,
1061 	ISO_RESTAURANT_SHELVES_3,
1062 	ISO_RESTAURANT_SHELVES_4,
1063 	ISO_RESTAURANT_SHELVES_5,
1064 	ISO_RESTAURANT_SHELVES_6,
1065 	ISO_RESTAURANT_SHELVES_7,
1066 	ISO_RESTAURANT_SHELVES_8,
1067 	ISO_RESTAURANT_SHELVES_9,
1068 	ISO_RESTAURANT_SHELVES_10,
1069 
1070 	ISO_SOFFA_1,
1071 	ISO_SOFFA_2,
1072 	ISO_SOFFA_3,
1073 	ISO_SOFFA_4,
1074 	ISO_SOFFA_CORNER_1,
1075 	ISO_SOFFA_CORNER_2,
1076 	ISO_SOFFA_CORNER_3,
1077 	ISO_SOFFA_CORNER_4,
1078 	ISO_SOFFA_CORNER_PLANT_1,
1079 	ISO_SOFFA_CORNER_PLANT_2,
1080 	ISO_SOFFA_CORNER_PLANT_3,
1081 	ISO_SOFFA_CORNER_PLANT_4,
1082 
1083 	ISO_OIL_STAINS_1,
1084 	ISO_OIL_STAINS_2,
1085 	ISO_OIL_STAINS_3,
1086 	ISO_OIL_STAINS_4,
1087 	ISO_OIL_STAINS_5,
1088 	ISO_OIL_STAINS_6,
1089 	ISO_OIL_STAINS_7,
1090 	ISO_OIL_STAINS_8,
1091 
1092 	ISO_TRANSP_FOR_WATER,
1093 
1094 	ISO_BRICK_WALL_EH,	// = 322 ,
1095 	ISO_BRICK_WALL_EV,
1096 
1097 	ISO_DIS_AUTOGUN_W,
1098 	ISO_DIS_AUTOGUN_N,
1099 	ISO_DIS_AUTOGUN_E,
1100 	ISO_DIS_AUTOGUN_S,
1101 
1102 	ISO_BRICK_WALL_CABLES_H,
1103 	ISO_BRICK_WALL_CABLES_V,
1104 
1105 	ISO_BRICK_WALL_CABLES_CORNER_NE,
1106 	ISO_BRICK_WALL_CABLES_CORNER_SW,
1107 	ISO_BRICK_WALL_CABLES_CORNER_NW,
1108 	ISO_BRICK_WALL_CABLES_CORNER_SE,
1109 
1110 	ISO_RESTAURANT_DESK_1,
1111 	ISO_RESTAURANT_DESK_2,
1112 	ISO_RESTAURANT_BIGSHELF_1,
1113 	ISO_RESTAURANT_BIGSHELF_2,
1114 
1115 	ISO_CRYSTALS_1,
1116 	ISO_CRYSTALS_2,
1117 	ISO_CRYSTALS_3,
1118 	ISO_CRYSTALS_4,
1119 	ISO_CRYSTALS_5,
1120 	ISO_CRYSTALS_6,
1121 
1122 	ISO_GREY_WALL_CORNER_1,
1123 	ISO_GREY_WALL_CORNER_2,
1124 	ISO_GREY_WALL_CORNER_3,
1125 	ISO_GREY_WALL_CORNER_4,	// = 347
1126 
1127 	ISO_BROKEN_GLASS_WALL_1,
1128 	ISO_OUTER_DOOR_V_OFFLINE,
1129 	ISO_OUTER_DOOR_H_OFFLINE,
1130 	ISO_DH_DOOR_LOCKED,
1131 	ISO_DV_DOOR_LOCKED,
1132 
1133 	ISO_DH_DOOR_000_OPEN,
1134 	ISO_DH_DOOR_025_OPEN,
1135 	ISO_DH_DOOR_050_OPEN,
1136 	ISO_DH_DOOR_075_OPEN,
1137 	ISO_DH_DOOR_100_OPEN,
1138 
1139 	ISO_DV_DOOR_000_OPEN,
1140 	ISO_DV_DOOR_025_OPEN,
1141 	ISO_DV_DOOR_050_OPEN,
1142 	ISO_DV_DOOR_075_OPEN,
1143 	ISO_DV_DOOR_100_OPEN,	// = 362
1144 
1145 	ISO_BASIN_1,
1146 	ISO_BASIN_2,
1147 	ISO_BASIN_3,
1148 	ISO_BASIN_4,
1149 
1150 	ISO_DESKCHAIR_1,
1151 	ISO_DESKCHAIR_2,
1152 	ISO_DESKCHAIR_3,
1153 
1154 	ISO_EXIT_5,
1155 	ISO_EXIT_6,
1156 
1157 	ISO_E_CHEST2_CLOSED,  // = 372
1158 	ISO_S_CHEST2_CLOSED,
1159 	ISO_E_CHEST2_OPEN,
1160 	ISO_S_CHEST2_OPEN,
1161 	ISO_N_CHEST2_CLOSED, // = 376
1162 	ISO_W_CHEST2_CLOSED,
1163 	ISO_N_CHEST2_OPEN,
1164 	ISO_W_CHEST2_OPEN, // = 379
1165 
1166 	ISO_SECURITY_GATE_GREEN_E,
1167 	ISO_SECURITY_GATE_GREEN_S,
1168 	ISO_SECURITY_GATE_RED_E,
1169 	ISO_SECURITY_GATE_RED_S,
1170 	ISO_SECURITY_GATE_OPEN_E,
1171 	ISO_SECURITY_GATE_OPEN_S,
1172 	ISO_SECURITY_GATE_CLOSED_E,
1173 	ISO_SECURITY_GATE_CLOSED_S,
1174 	ISO_SOLAR_PANEL_E,
1175 	ISO_BOTLINE_01_N,
1176 	ISO_BOTLINE_01_E,
1177 	ISO_BOTLINE_02_E,
1178 	ISO_BOTLINE_02_N,
1179 	ISO_BOTLINE_02_W,
1180 	ISO_BOTLINE_02_S,
1181 	ISO_BOTLINE_06_N,
1182 	ISO_BOTLINE_06_W,
1183 	ISO_BOTLINE_06_S,
1184 	ISO_BOTLINE_06_E,
1185 	ISO_BOTLINE_07_N,
1186 	ISO_BOTLINE_07_W,
1187 	ISO_FREIGHTER_RAILWAY_01_N,
1188 	ISO_FREIGHTER_RAILWAY_01_E,
1189 	ISO_FREIGHTER_RAILWAY_02_S,
1190 	ISO_FREIGHTER_RAILWAY_02_E,
1191 	ISO_FREIGHTER_RAILWAY_02_N,
1192 	ISO_FREIGHTER_RAILWAY_02_W,
1193 	ISO_SOLAR_PANEL_BROKEN,
1194 	ISO_BARREL_5,
1195 	ISO_REACTOR_S,
1196 	ISO_REACTOR_E,
1197 	ISO_REACTOR_N,
1198 	ISO_REACTOR_W,
1199 	ISO_WALL_TERMINAL_S,
1200 	ISO_WALL_TERMINAL_E,
1201 	ISO_WALL_TERMINAL_N,
1202 	ISO_WALL_TERMINAL_W,
1203 	ISO_TURBINES_SMALL_W,
1204 	ISO_TURBINES_SMALL_N,
1205 	ISO_TURBINES_SMALL_E,
1206 	ISO_TURBINES_SMALL_S,
1207 	ISO_WEAPON_CRATE,
1208 	ISO_DEFAULT_DEAD_BODY_0_1,
1209 	ISO_DEFAULT_DEAD_BODY_1_1,
1210 	ISO_DEFAULT_DEAD_BODY_2_1,
1211 	ISO_DEFAULT_DEAD_BODY_3_1,
1212 	ISO_DEFAULT_DEAD_BODY_4_1,
1213 	ISO_DEFAULT_DEAD_BODY_5_1,
1214 	ISO_DEFAULT_DEAD_BODY_6_1,
1215 	ISO_DEFAULT_DEAD_BODY_7_1,
1216 	ISO_DEFAULT_DEAD_BODY_0_2,
1217 	ISO_LADDER_1,
1218 	ISO_LADDER_2,
1219 	ISO_WRECKED_CAR_1,
1220 	ISO_WRECKED_CAR_2,
1221 	ISO_WRECKED_CAR_3,
1222 	ISO_WRECKED_CAR_4,
1223 	ISO_N_TOILET_WHITE_SMALL,
1224 	ISO_E_TOILET_WHITE_SMALL,
1225 	ISO_BOTLINE_07_S,
1226 	ISO_BOTLINE_07_E,
1227 	ISO_BOTLINE_08_N,
1228 	ISO_BOTLINE_08_W,
1229 	ISO_BOTLINE_08_S,
1230 	ISO_BOTLINE_08_E,
1231 	ISO_CRUSHED_476,
1232 	ISO_BROKEN_GLASS_WALL_2,
1233 	ISO_SIGN_1_FLASH,
1234 	ISO_SIGN_2_FLASH,
1235 	ISO_SIGN_3_FLASH,
1236 	ISO_BARREL_RADIOACTIVE,
1237 	ISO_VENDING_MACHINE_1_W,
1238 	ISO_VENDING_MACHINE_1_S,
1239 	ISO_VENDING_MACHINE_1_E,
1240 	ISO_VENDING_MACHINE_1_N,
1241 	ISO_VENDING_MACHINE_2_W,
1242 	ISO_VENDING_MACHINE_2_S,
1243 	ISO_VENDING_MACHINE_2_E,
1244 	ISO_VENDING_MACHINE_2_N,
1245 	ISO_VENDING_MACHINE_3_W,
1246 	ISO_VENDING_MACHINE_3_S,
1247 	ISO_VENDING_MACHINE_3_E,
1248 	ISO_VENDING_MACHINE_3_N,
1249 
1250 	ISO_TRANSFORMER_1,
1251 	ISO_TRANSFORMER_2,
1252 	ISO_TRANSFORMER_3,
1253 
1254 	ISO_BOOKSHELF_LOOTABLE_E, // = 466
1255 	ISO_BOOKSHELF_LOOTED_E,
1256 	ISO_BOOKSHELF_LOOTABLE_S,
1257 	ISO_BOOKSHELF_LOOTED_S,
1258 	ISO_BOOKSHELF_LOOTABLE_W,
1259 	ISO_BOOKSHELF_LOOTED_W,
1260 	ISO_BOOKSHELF_LOOTABLE_N,
1261 	ISO_BOOKSHELF_LOOTED_N,
1262 	ISO_BOOKSHELF_LONG_LOOTABLE_E, // = 474
1263 	ISO_BOOKSHELF_LONG_LOOTED_E,
1264 	ISO_BOOKSHELF_LONG_LOOTABLE_S,
1265 	ISO_BOOKSHELF_LONG_LOOTED_S,
1266 	ISO_BOOKSHELF_LONG_LOOTABLE_W,
1267 	ISO_BOOKSHELF_LONG_LOOTED_W,
1268 	ISO_BOOKSHELF_LONG_LOOTABLE_N,
1269 	ISO_BOOKSHELF_LONG_LOOTED_N,
1270 	ISO_COLLAPSINGFLOOR_VISIBLE, // = 482
1271 
1272 	ISO_CONSOLE_SECURE_E = 492,
1273 	ISO_CONSOLE_SECURE_S = 493,
1274 	ISO_CONSOLE_SECURE_W = 494,
1275 	ISO_CONSOLE_SECURE_N = 495
1276 };
1277 
1278 enum {
1279 	ISO_FLOOR_EMPTY,
1280 	ISO_FLOOR_ERROR_TILE,
1281 	ISO_FLOOR_STONE_FLOOR,
1282 	ISO_FLOOR_STONE_FLOOR_WITH_DOT,
1283 	ISO_FLOOR_STONE_FLOOR_WITH_GRATE,
1284 	ISO_FLOOR_HOUSE_FLOOR,
1285 
1286 	ISO_RED_WAREHOUSE_FLOOR,
1287 
1288 	ISO_MISCELLANEOUS_FLOOR_9,
1289 	ISO_MISCELLANEOUS_FLOOR_10,
1290 	ISO_MISCELLANEOUS_FLOOR_11,
1291 	ISO_MISCELLANEOUS_FLOOR_12,
1292 	ISO_MISCELLANEOUS_FLOOR_13,
1293 	ISO_MISCELLANEOUS_FLOOR_14,
1294 	ISO_MISCELLANEOUS_FLOOR_15,
1295 	ISO_MISCELLANEOUS_FLOOR_16,
1296 	ISO_MISCELLANEOUS_FLOOR_17,
1297 	ISO_MISCELLANEOUS_FLOOR_18,
1298 	ISO_MISCELLANEOUS_FLOOR_19,
1299 	ISO_MISCELLANEOUS_FLOOR_20,
1300 	ISO_MISCELLANEOUS_FLOOR_21,
1301 	ISO_MISCELLANEOUS_FLOOR_22,
1302 	ISO_MISCELLANEOUS_FLOOR_23,
1303 
1304 	ISO_SIDEWALK_0,
1305 	ISO_SIDEWALK_1,
1306 	ISO_SIDEWALK_2,
1307 	ISO_SIDEWALK_3,
1308 	ISO_SIDEWALK_4,
1309 	ISO_SIDEWALK_5,
1310 	ISO_SIDEWALK_6,
1311 	ISO_SIDEWALK_7,
1312 	ISO_SIDEWALK_8,
1313 	ISO_SIDEWALK_9,
1314 	ISO_SIDEWALK_10,
1315 	ISO_SIDEWALK_11,
1316 	ISO_SIDEWALK_12,
1317 	ISO_SIDEWALK_13,
1318 	ISO_SIDEWALK_14,
1319 	ISO_SIDEWALK_15,
1320 	ISO_SIDEWALK_16,
1321 	ISO_SIDEWALK_17,
1322 	ISO_SIDEWALK_18,
1323 	ISO_SIDEWALK_19,
1324 	ISO_SIDEWALK_20,
1325 	ISO_SIDEWALK_21,
1326 	ISO_SIDEWALK_22,
1327 	ISO_SIDEWALK_23,
1328 	ISO_SIDEWALK_24,
1329 
1330 	ISO_FLOOR_SAND,
1331 	ISO_SAND_FLOOR_1,
1332 	ISO_SAND_FLOOR_2,
1333 	ISO_SAND_FLOOR_3,
1334 	ISO_SAND_FLOOR_4,
1335 	ISO_SAND_FLOOR_5,
1336 	ISO_SAND_FLOOR_6,
1337 
1338 	ISO_WATER,
1339 	ISO_WATER_EDGE_1,
1340 	ISO_WATER_EDGE_2,
1341 	ISO_WATER_EDGE_3,
1342 	ISO_WATER_EDGE_4,
1343 	ISO_WATER_EDGE_5,
1344 	ISO_WATER_EDGE_6,
1345 	ISO_WATER_EDGE_7,
1346 	ISO_WATER_EDGE_8,
1347 	ISO_WATER_EDGE_9,
1348 	ISO_WATER_EDGE_10,
1349 	ISO_WATER_EDGE_11,
1350 	ISO_WATER_EDGE_12,
1351 	ISO_WATER_EDGE_13,
1352 	ISO_WATER_EDGE_14,
1353 	ISO_WATER_SIDEWALK_01,
1354 	ISO_WATER_SIDEWALK_02,
1355 	ISO_WATER_SIDEWALK_03,
1356 	ISO_WATER_SIDEWALK_04,
1357 
1358 	ISO_CARPET_TILE_0001,
1359 	ISO_CARPET_TILE_0002,
1360 	ISO_CARPET_TILE_0003,
1361 	ISO_CARPET_TILE_0004,
1362 	ISO_LARGE_SQUARE_BBB,
1363 	ISO_LARGE_SQUARE_BRB,
1364 	ISO_LARGE_SQUARE_BRR,
1365 	ISO_LARGE_SQUARE_GBB,
1366 	ISO_LARGE_SQUARE_GRB,
1367 	ISO_LARGE_SQUARE_GRR,
1368 	ISO_LARGE_SQUARE_RBB,
1369 	ISO_LARGE_SQUARE_RRB,
1370 	ISO_LARGE_SQUARE_RRR,
1371 	ISO_MINI_SQUARE_0001,
1372 	ISO_MINI_SQUARE_0002,
1373 	ISO_MINI_SQUARE_0003,
1374 	ISO_MINI_SQUARE_0004,
1375 	ISO_MINI_SQUARE_0005,
1376 	ISO_MINI_SQUARE_0006,
1377 	ISO_MINI_SQUARE_0007,
1378 	ISO_MINI_SQUARE_0008,
1379 	ISO_SQUARE_TILE_AAB,
1380 	ISO_SQUARE_TILE_ACB2,
1381 	ISO_SQUARE_TILE_ACB,
1382 	ISO_SQUARE_TILE_ADB2,
1383 	ISO_SQUARE_TILE_ADB,
1384 	ISO_SQUARE_TILE_CAB2,
1385 	ISO_SQUARE_TILE_CAB,
1386 	ISO_SQUARE_TILE_CCB,
1387 	ISO_SQUARE_TILE_DAB2,
1388 	ISO_SQUARE_TILE_DAB,
1389 	ISO_SQUARE_TILE_DDB,
1390 
1391 	ISO_COMPLICATED_CMM,
1392 	ISO_COMPLICATED_CMM2,
1393 	ISO_COMPLICATED_P4,
1394 	ISO_COMPLICATED_PMG,
1395 	ISO_COMPLICATED_PMG2,
1396 	ISO_COMPLICATED_PMM,
1397 
1398 	ISO_TWOSQUARE_0001,
1399 	ISO_TWOSQUARE_0002,
1400 	ISO_TWOSQUARE_0003,
1401 
1402 	ISO_WATER_ANIMATED_SHALLOW,
1403 	ISO_WATER_ANIMATED_DARK,
1404 	ISO_DISCO
1405 };
1406 
1407 #define MAX_UNDERLAY_FLOOR_TILES 500
1408 #define MAX_OVERLAY_FLOOR_TILES  500
1409 #define MAX_FLOOR_TILES (MAX_UNDERLAY_FLOOR_TILES + MAX_OVERLAY_FLOOR_TILES)
1410 
1411 /*
1412  * Underlay and overlay floor tiles share the same namespace.
1413  * Underlay floor tiles are numbered from 0 to MAX_UNDERLAY_FLOOR_TILES - 1.
1414  * Overlay floor tiles are numbered from MAX_UNDERLAY_FLOOR_TILES
1415  * to MAX_FLOOR_TILES - 1.
1416  */
1417 enum {
1418 	ISO_OVERLAY_GRASS_01 = MAX_UNDERLAY_FLOOR_TILES,
1419 	ISO_OVERLAY_GRASS_02,
1420 	ISO_OVERLAY_GRASS_03,
1421 	ISO_OVERLAY_GRASS_04,
1422 	ISO_OVERLAY_GRASS_05,
1423 	ISO_OVERLAY_GRASS_06,
1424 	ISO_OVERLAY_GRASS_07,
1425 	ISO_OVERLAY_GRASS_08,
1426 	ISO_OVERLAY_GRASS_09,
1427 	ISO_OVERLAY_GRASS_10,
1428 	ISO_OVERLAY_GRASS_11,
1429 	ISO_OVERLAY_GRASS_12,
1430 	ISO_OVERLAY_GRASS_13,
1431 	ISO_OVERLAY_GRASS_14,
1432 	ISO_OVERLAY_GRASS_15,
1433 	ISO_OVERLAY_GRASS_16,
1434 	ISO_OVERLAY_GRASS_17,
1435 	ISO_OVERLAY_GRASS_18,
1436 	ISO_OVERLAY_GRASS_19,
1437 	ISO_OVERLAY_GRASS_20,
1438 	ISO_OVERLAY_GRASS_21,
1439 
1440 	ISO_OVERLAY_FLOOR_SAND_WITH_GRASS_1,
1441 	ISO_OVERLAY_FLOOR_SAND_WITH_GRASS_2,
1442 	ISO_OVERLAY_FLOOR_SAND_WITH_GRASS_3,
1443 	ISO_OVERLAY_FLOOR_SAND_WITH_GRASS_4,
1444 	ISO_OVERLAY_FLOOR_SAND_WITH_GRASS_5,
1445 
1446 	ISO_OVERLAY_FLOOR_SAND_WITH_GRASS_25,
1447 	ISO_OVERLAY_FLOOR_SAND_WITH_GRASS_26,
1448 	ISO_OVERLAY_FLOOR_SAND_WITH_GRASS_27,
1449 
1450 	ISO_GROUNDMARKER_BLUE_1,
1451 	ISO_GROUNDMARKER_BLUE_2,
1452 	ISO_GROUNDMARKER_BLUE_3,
1453 	ISO_GROUNDMARKER_BLUE_4,
1454 	ISO_GROUNDMARKER_BLUE_5,
1455 	ISO_GROUNDMARKER_BLUE_6,
1456 	ISO_GROUNDMARKER_BLUE_7,
1457 	ISO_GROUNDMARKER_BLUE_8,
1458 	ISO_GROUNDMARKER_RED_1,
1459 	ISO_GROUNDMARKER_RED_2,
1460 	ISO_GROUNDMARKER_RED_3,
1461 	ISO_GROUNDMARKER_RED_4,
1462 	ISO_GROUNDMARKER_RED_5,
1463 	ISO_GROUNDMARKER_RED_6,
1464 	ISO_GROUNDMARKER_RED_7,
1465 	ISO_GROUNDMARKER_RED_8,
1466 	ISO_GROUNDMARKER_BLUE_Y_1,
1467 	ISO_GROUNDMARKER_BLUE_Y_2,
1468 	ISO_GROUNDMARKER_BLUE_Y_3,
1469 	ISO_GROUNDMARKER_BLUE_Y_4,
1470 	ISO_GROUNDMARKER_BLUE_X_1,
1471 	ISO_GROUNDMARKER_RED_Y_1,
1472 	ISO_GROUNDMARKER_RED_Y_2,
1473 	ISO_GROUNDMARKER_RED_Y_3,
1474 	ISO_GROUNDMARKER_RED_Y_4,
1475 	ISO_GROUNDMARKER_RED_X_1,
1476 	ISO_SAND_EDGE_0001,
1477 	ISO_SAND_EDGE_0002,
1478 	ISO_SAND_EDGE_0003,
1479 	ISO_SAND_EDGE_0004,
1480 	ISO_SAND_EDGE_0005,
1481 	ISO_SAND_EDGE_0006,
1482 	ISO_SAND_EDGE_0007,
1483 	ISO_SAND_EDGE_0008,
1484 	ISO_SAND_EDGE_0009,
1485 	ISO_SAND_EDGE_0010,
1486 	ISO_SAND_EDGE_0011,
1487 	ISO_SAND_EDGE_0012,
1488 	ISO_SAND_EDGE_0013,
1489 	ISO_SAND_EDGE_0014
1490 };
1491 
1492 #define MAX_FLOOR_LAYERS 2
1493 
1494 // Maximum distance for both taking and dropping items
1495 #define ITEM_TAKE_DIST (0.7)
1496 // Maximum and minimum distance for a melee fight
1497 #define SQUARED_MELEE_MAX_DIST (2.25)
1498 #define MELEE_MIN_DIST (1.0)
1499 // Distance at which a bot with a melee weapon will start to find
1500 // a free place around its target
1501 #define SQUARED_MELEE_APPROACH_DIST (16.0)
1502 // Minimum distance to shoot with a range weapon
1503 #define SQUARED_RANGE_SHOOT_MIN_DIST (7.0)
1504 
1505 // Margins added to obstacles size when an item is being dropped.
1506 #define COLLDET_DROP_ITEM_MARGIN (0.2)
1507 // Margin's size added to obstacles size when colldet is called by the pathfinder.
1508 // Also used to validate the walkability of a path between 2 waypoints.
1509 #define COLLDET_WALKABLE_MARGIN (0.04)
1510 // Distance to next intermediate point before to follow the next subpath.
1511 // Also used as the distance to next waypoint before to choose a new one.
1512 // It has to be smaller than COLLDET_WALKABLE_MARGIN. Near half of
1513 // COLLDET_WALKABLE_MARGIN is a good candidate
1514 #define DIST_TO_INTERM_POINT (0.02)
1515 
1516 //-----
1517 // Pathfinder constants
1518 #define DEBUG_TUX_PATHFINDING 1	// debug level for tux pathfinding...
1519 
1520 enum {
1521 	DIFFICULTY_EASY,
1522 	DIFFICULTY_NORMAL,
1523 	DIFFICULTY_HARD
1524 };
1525 
1526 enum faction_id {
1527 	FACTION_SELF = 0,
1528 	FACTION_BOTS,
1529 	FACTION_REDGUARD,
1530 	FACTION_RESISTANCE,
1531 	FACTION_CIVILIAN,
1532 	FACTION_CRAZY,
1533 	FACTION_SINGULARITY,
1534 	FACTION_NEUTRAL,
1535 	FACTION_TEST,
1536 
1537 	FACTION_NUMBER_OF_FACTIONS, //keep this last
1538 };
1539 
1540 enum faction_state {
1541 	HOSTILE = 0,
1542 	FRIENDLY,
1543 };
1544 
1545 #define ACCESS_OBSTACLE_EXTENSION(X,Y) ((struct obstacle_extension *)(X.arr))[Y]
1546 #define ACCESS_MAP_LABEL(X,Y) ((struct map_label *)(X.arr))[Y]
1547 
1548 enum obstacle_extension_type {
1549 	OBSTACLE_EXTENSION_LABEL = 30,  // This extension indicates an obstacle label. The associated data is a const char * containing the label.
1550 	OBSTACLE_EXTENSION_CHEST_ITEMS, // This extension indicates an item list. The associated data is a struct dynarray containing struct item.
1551 	OBSTACLE_EXTENSION_DIALOGFILE,  // This extension indicates the dialog filename associated to an interactive obstacle. Contains the dialog basename.
1552 	OBSTACLE_EXTENSION_SIGNMESSAGE  // This extension contains the message written on a signpost.
1553 };
1554 
1555 enum lua_target {
1556 	LUA_CONFIG,
1557 	LUA_DIALOG
1558 };
1559 
1560 enum slot_type {
1561 	NO_SLOT = 0,
1562 	WEAPON_SLOT = 1,
1563 	SHIELD_SLOT = 2,
1564 	HELM_SLOT = 4,
1565 	ARMOR_SLOT = 8,
1566 	BOOT_SLOT = 16,
1567 };
1568 
1569 // These are flags to change the level's environment
1570 enum level_flags {
1571 	TELEPORT_BLOCKED 	= 1 << 0,
1572 	NO_RESPAWN 			= 1 << 1,
1573 };
1574 
1575 // Current step of the dialog Finite state Machine
1576 enum chat_context_state {
1577 	LOAD_INIT_SCRIPT = 0,
1578 	RUN_INIT_SCRIPT = 1,
1579 	LOAD_STARTUP_SCRIPT = 2,
1580 	RUN_STARTUP_SCRIPT = 3,
1581 	SELECT_NEXT_NODE = 4,
1582 	RUN_NODE_SCRIPT = 5
1583 };
1584 
1585 // Indexes of known data dirs (used in conjunction with data_dirs[])
1586 enum data_dir_handle {
1587 	GRAPHICS_DIR = 0,
1588 	FONT_DIR,
1589 	SOUND_DIR,
1590 	MUSIC_DIR,
1591 	MAP_DIR,
1592 	TITLES_DIR,
1593 	DIALOG_DIR,
1594 #ifdef ENABLE_NLS
1595 	LOCALE_DIR,
1596 #endif
1597 	LUA_MOD_DIR,
1598 	LAST_DATA_DIR
1599 };
1600 
1601 // Add the sensor features (for droids).
1602 enum sensor_features {
1603     SENSOR_FEATURELESS = 0,		// Any sensor without any feature, featureless.
1604     SENSOR_DETECT_INVISIBLE = 1 << 1,	// Sensor that allows the droid to see invisible tux.
1605     SENSOR_THROUGH_WALLS = 1 << 2	// Sensor that allows the droid to see through walls.
1606 };
1607 
1608 // Flags defining the type of the 'hardware' texture in a struct image
1609 enum texture_type {
1610 	NO_TEXTURE = 0,
1611 	TEXTURE_CREATED = 1 << 1,
1612 	IS_SUBTEXTURE = 1 << 2
1613 };
1614 
1615 // ORed flags defining the modifications to apply when loading an image (used by load_image())
1616 enum load_image_mod_flags {
1617 	NO_MOD = 0,
1618 	USE_OFFSET = 1 << 1,  // Use the offset file to translate the image
1619 	USE_WIDE   = 1 << 2   // Use the wide version of the file (if it exists)
1620 };
1621 
1622 // Draw quads borders (OpenGL only)
1623 #define DEBUG_QUAD_BORDER 0
1624 
1625 #endif
1626