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