1 /*********************************************************** 2 * Artsoft Retro-Game Library * 3 *----------------------------------------------------------* 4 * (c) 1994-2006 Artsoft Entertainment * 5 * Holger Schemel * 6 * Detmolder Strasse 189 * 7 * 33604 Bielefeld * 8 * Germany * 9 * e-mail: info@artsoft.org * 10 *----------------------------------------------------------* 11 * system.h * 12 ***********************************************************/ 13 14 #ifndef SYSTEM_H 15 #define SYSTEM_H 16 17 #include "platform.h" 18 #include "types.h" 19 20 21 #if defined(PLATFORM_MACOSX) 22 #include "macosx.h" 23 #elif defined(PLATFORM_WIN32) 24 #include "windows.h" 25 #elif defined(PLATFORM_MSDOS) 26 #include "msdos.h" 27 #endif 28 29 #if defined(TARGET_SDL) 30 #include "sdl.h" 31 #elif defined(TARGET_X11) 32 #include "x11.h" 33 #endif 34 35 36 /* the additional 'b' is needed for Win32 to open files in binary mode */ 37 #define MODE_READ "rb" 38 #define MODE_WRITE "wb" 39 #define MODE_APPEND "ab" 40 41 #define DEFAULT_DEPTH 0 42 43 #define BLIT_OPAQUE 0 44 #define BLIT_MASKED 1 45 #define BLIT_INVERSE 2 46 #define BLIT_ON_BACKGROUND 3 47 48 #define FULLSCREEN_NOT_AVAILABLE FALSE 49 #define FULLSCREEN_AVAILABLE TRUE 50 51 /* default input keys */ 52 #define DEFAULT_KEY_LEFT KSYM_Left 53 #define DEFAULT_KEY_RIGHT KSYM_Right 54 #define DEFAULT_KEY_UP KSYM_Up 55 #define DEFAULT_KEY_DOWN KSYM_Down 56 #if defined(PLATFORM_MACOSX) 57 #define DEFAULT_KEY_SNAP KSYM_Control_L 58 #define DEFAULT_KEY_DROP KSYM_KP_Enter 59 #else 60 #define DEFAULT_KEY_SNAP KSYM_Control_L 61 #define DEFAULT_KEY_DROP KSYM_Control_R 62 #endif 63 #define DEFAULT_KEY_OKAY KSYM_Return 64 #define DEFAULT_KEY_CANCEL KSYM_Escape 65 66 /* default shortcut keys */ 67 #define DEFAULT_KEY_SAVE_GAME KSYM_F1 68 #define DEFAULT_KEY_LOAD_GAME KSYM_F2 69 #define DEFAULT_KEY_TOGGLE_PAUSE KSYM_space 70 #define DEFAULT_KEY_FOCUS_PLAYER_1 KSYM_F5 71 #define DEFAULT_KEY_FOCUS_PLAYER_2 KSYM_F6 72 #define DEFAULT_KEY_FOCUS_PLAYER_3 KSYM_F7 73 #define DEFAULT_KEY_FOCUS_PLAYER_4 KSYM_F8 74 #define DEFAULT_KEY_FOCUS_PLAYER_ALL KSYM_F9 75 #define DEFAULT_KEY_TAPE_EJECT KSYM_UNDEFINED 76 #define DEFAULT_KEY_TAPE_STOP KSYM_UNDEFINED 77 #define DEFAULT_KEY_TAPE_PAUSE KSYM_UNDEFINED 78 #define DEFAULT_KEY_TAPE_RECORD KSYM_UNDEFINED 79 #define DEFAULT_KEY_TAPE_PLAY KSYM_UNDEFINED 80 #define DEFAULT_KEY_SOUND_SIMPLE KSYM_UNDEFINED 81 #define DEFAULT_KEY_SOUND_LOOPS KSYM_UNDEFINED 82 #define DEFAULT_KEY_SOUND_MUSIC KSYM_UNDEFINED 83 84 /* values for key_status */ 85 #define KEY_NOT_PRESSED FALSE 86 #define KEY_RELEASED FALSE 87 #define KEY_PRESSED TRUE 88 89 /* values for button status */ 90 #define MB_NOT_PRESSED FALSE 91 #define MB_NOT_RELEASED TRUE 92 #define MB_RELEASED FALSE 93 #define MB_PRESSED TRUE 94 #define MB_MENU_CHOICE FALSE 95 #define MB_MENU_MARK TRUE 96 #define MB_MENU_INITIALIZE (-1) 97 #define MB_MENU_LEAVE (-2) 98 #define MB_LEFTBUTTON 1 99 #define MB_MIDDLEBUTTON 2 100 #define MB_RIGHTBUTTON 3 101 #define MB_WHEEL_UP 4 102 #define MB_WHEEL_DOWN 5 103 #define MB_WHEEL_LEFT 6 104 #define MB_WHEEL_RIGHT 7 105 #define IS_WHEEL_BUTTON_VERTICAL(b) ((b) >= MB_WHEEL_UP && \ 106 (b) <= MB_WHEEL_DOWN) 107 #define IS_WHEEL_BUTTON_HORIZONTAL(b) ((b) >= MB_WHEEL_LEFT && \ 108 (b) <= MB_WHEEL_RIGHT) 109 #define IS_WHEEL_BUTTON(b) ((b) >= MB_WHEEL_UP && \ 110 (b) <= MB_WHEEL_DOWN) 111 #define DEFAULT_WHEEL_STEPS 3 112 113 /* values for move directions */ 114 #define MV_BIT_LEFT 0 115 #define MV_BIT_RIGHT 1 116 #define MV_BIT_UP 2 117 #define MV_BIT_DOWN 3 118 119 #define NUM_DIRECTIONS 4 120 121 /* diagonal movement directions are used in a different contect than buttons */ 122 #define MV_BIT_UPLEFT 4 123 #define MV_BIT_UPRIGHT 5 124 #define MV_BIT_DOWNLEFT 6 125 #define MV_BIT_DOWNRIGHT 7 126 127 #define NUM_DIRECTIONS_FULL 8 128 129 /* values for special "button" bitmasks */ 130 #define BUTTON_1 4 131 #define BUTTON_2 5 132 133 /* values for special "focus player" bitmasks */ 134 #define BIT_SET_FOCUS 6 135 136 /* values for move directions and special "button" key bitmasks */ 137 #define MV_NONE 0 138 #define MV_LEFT (1 << MV_BIT_LEFT) 139 #define MV_RIGHT (1 << MV_BIT_RIGHT) 140 #define MV_UP (1 << MV_BIT_UP) 141 #define MV_DOWN (1 << MV_BIT_DOWN) 142 143 #define MV_UPLEFT (MV_UP | MV_LEFT) 144 #define MV_UPRIGHT (MV_UP | MV_RIGHT) 145 #define MV_DOWNLEFT (MV_DOWN | MV_LEFT) 146 #define MV_DOWNRIGHT (MV_DOWN | MV_RIGHT) 147 148 #define MV_HORIZONTAL (MV_LEFT | MV_RIGHT) 149 #define MV_VERTICAL (MV_UP | MV_DOWN) 150 #define MV_ALL_DIRECTIONS (MV_LEFT | MV_RIGHT | MV_UP | MV_DOWN) 151 #define MV_ANY_DIRECTION (MV_ALL_DIRECTIONS) 152 #define MV_NO_DIRECTION (MV_NONE) 153 154 #define KEY_BUTTON_1 (1 << BUTTON_1) 155 #define KEY_BUTTON_2 (1 << BUTTON_2) 156 #define KEY_MOTION (MV_LEFT | MV_RIGHT | MV_UP | MV_DOWN) 157 #define KEY_BUTTON (KEY_BUTTON_1 | KEY_BUTTON_2) 158 #define KEY_ACTION (KEY_MOTION | KEY_BUTTON) 159 160 #define KEY_SET_FOCUS (1 << BIT_SET_FOCUS) 161 162 #define MV_DIR_FROM_BIT(x) ((x) < NUM_DIRECTIONS ? 1 << (x) : \ 163 (x) == MV_BIT_UPLEFT ? MV_UPLEFT : \ 164 (x) == MV_BIT_UPRIGHT ? MV_UPRIGHT : \ 165 (x) == MV_BIT_DOWNLEFT ? MV_DOWNLEFT : \ 166 (x) == MV_BIT_DOWNRIGHT ? MV_DOWNRIGHT : \ 167 MV_NONE) 168 169 #define MV_DIR_TO_BIT(x) ((x) == MV_LEFT ? MV_BIT_LEFT : \ 170 (x) == MV_RIGHT ? MV_BIT_RIGHT : \ 171 (x) == MV_UP ? MV_BIT_UP : \ 172 (x) == MV_DOWN ? MV_BIT_DOWN : \ 173 (x) == MV_UPLEFT ? MV_BIT_UPLEFT : \ 174 (x) == MV_UPRIGHT ? MV_BIT_UPRIGHT : \ 175 (x) == MV_DOWNLEFT ? MV_BIT_DOWNLEFT : \ 176 (x) == MV_DOWNRIGHT ? MV_BIT_DOWNRIGHT : \ 177 MV_BIT_DOWN) 178 179 #define MV_DIR_OPPOSITE(x) ((x) == MV_LEFT ? MV_RIGHT : \ 180 (x) == MV_RIGHT ? MV_LEFT : \ 181 (x) == MV_UP ? MV_DOWN : \ 182 (x) == MV_DOWN ? MV_UP : \ 183 (x) == MV_UPLEFT ? MV_DOWNRIGHT : \ 184 (x) == MV_UPRIGHT ? MV_DOWNLEFT : \ 185 (x) == MV_DOWNLEFT ? MV_UPRIGHT : \ 186 (x) == MV_DOWNRIGHT ? MV_UPLEFT : \ 187 MV_NONE) 188 189 /* values for animation mode (frame order and direction) */ 190 #define ANIM_NONE 0 191 #define ANIM_LOOP (1 << 0) 192 #define ANIM_LINEAR (1 << 1) 193 #define ANIM_PINGPONG (1 << 2) 194 #define ANIM_PINGPONG2 (1 << 3) 195 #define ANIM_RANDOM (1 << 4) 196 #define ANIM_CE_VALUE (1 << 5) 197 #define ANIM_CE_SCORE (1 << 6) 198 #define ANIM_CE_DELAY (1 << 7) 199 #define ANIM_REVERSE (1 << 8) 200 #define ANIM_OPAQUE_PLAYER (1 << 9) 201 202 /* values for special (non game element) animation modes */ 203 #define ANIM_HORIZONTAL (1 << 10) 204 #define ANIM_VERTICAL (1 << 11) 205 #define ANIM_CENTERED (1 << 12) 206 #define ANIM_STATIC_PANEL (1 << 13) 207 208 #define ANIM_DEFAULT ANIM_LOOP 209 210 /* values for special drawing styles (currently only for crumbled graphics) */ 211 #define STYLE_NONE 0 212 #define STYLE_ACCURATE_BORDERS (1 << 0) 213 #define STYLE_INNER_CORNERS (1 << 1) 214 215 #define STYLE_DEFAULT STYLE_NONE 216 217 /* values for fade mode */ 218 #define FADE_TYPE_NONE 0 219 #define FADE_TYPE_FADE_IN (1 << 0) 220 #define FADE_TYPE_FADE_OUT (1 << 1) 221 #define FADE_TYPE_TRANSFORM (1 << 2) 222 #define FADE_TYPE_CROSSFADE (1 << 3) 223 #define FADE_TYPE_MELT (1 << 4) 224 #define FADE_TYPE_SKIP (1 << 5) 225 226 #define FADE_MODE_NONE (FADE_TYPE_NONE) 227 #define FADE_MODE_FADE_IN (FADE_TYPE_FADE_IN) 228 #define FADE_MODE_FADE_OUT (FADE_TYPE_FADE_OUT) 229 #define FADE_MODE_FADE (FADE_TYPE_FADE_IN | FADE_TYPE_FADE_OUT) 230 #define FADE_MODE_TRANSFORM (FADE_TYPE_TRANSFORM | FADE_TYPE_FADE_IN) 231 #define FADE_MODE_CROSSFADE (FADE_MODE_TRANSFORM | FADE_TYPE_CROSSFADE) 232 #define FADE_MODE_MELT (FADE_MODE_TRANSFORM | FADE_TYPE_MELT) 233 #define FADE_MODE_SKIP_FADE_IN (FADE_TYPE_SKIP | FADE_TYPE_FADE_IN) 234 #define FADE_MODE_SKIP_FADE_OUT (FADE_TYPE_SKIP | FADE_TYPE_FADE_OUT) 235 236 #define FADE_MODE_DEFAULT FADE_MODE_FADE 237 238 /* values for text alignment */ 239 #define ALIGN_LEFT (1 << 0) 240 #define ALIGN_RIGHT (1 << 1) 241 #define ALIGN_CENTER (1 << 2) 242 #define ALIGN_DEFAULT ALIGN_LEFT 243 244 #define VALIGN_TOP (1 << 0) 245 #define VALIGN_BOTTOM (1 << 1) 246 #define VALIGN_MIDDLE (1 << 2) 247 #define VALIGN_DEFAULT VALIGN_TOP 248 249 #define ALIGNED_XPOS(x,w,a) ((a) == ALIGN_CENTER ? (x) - (w) / 2 : \ 250 (a) == ALIGN_RIGHT ? (x) - (w) : (x)) 251 #define ALIGNED_YPOS(y,h,v) ((v) == VALIGN_MIDDLE ? (y) - (h) / 2 : \ 252 (v) == VALIGN_BOTTOM ? (y) - (h) : (y)) 253 #define ALIGNED_TEXT_XPOS(p) ALIGNED_XPOS((p)->x, (p)->width, (p)->align) 254 #define ALIGNED_TEXT_YPOS(p) ALIGNED_YPOS((p)->y, (p)->height, (p)->valign) 255 256 /* values for redraw_mask */ 257 #define REDRAW_NONE (0) 258 #define REDRAW_ALL (1 << 0) 259 #define REDRAW_FIELD (1 << 1) 260 #define REDRAW_TILES (1 << 2) 261 #define REDRAW_DOOR_1 (1 << 3) 262 #define REDRAW_VIDEO_1 (1 << 4) 263 #define REDRAW_VIDEO_2 (1 << 5) 264 #define REDRAW_VIDEO_3 (1 << 6) 265 #define REDRAW_MICROLEVEL (1 << 7) 266 #define REDRAW_MICROLABEL (1 << 8) 267 #define REDRAW_FROM_BACKBUFFER (1 << 9) 268 #define REDRAW_DOOR_2 (REDRAW_VIDEO_1 | \ 269 REDRAW_VIDEO_2 | \ 270 REDRAW_VIDEO_3) 271 #define REDRAW_DOOR_3 (1 << 10) 272 #define REDRAW_DOORS (REDRAW_DOOR_1 | \ 273 REDRAW_DOOR_2 | \ 274 REDRAW_DOOR_3) 275 #define REDRAW_MAIN (REDRAW_FIELD | \ 276 REDRAW_TILES | \ 277 REDRAW_MICROLEVEL) 278 #define REDRAW_FPS (1 << 11) 279 #define REDRAWTILES_THRESHOLD (SCR_FIELDX * SCR_FIELDY / 2) 280 281 #define IN_GFX_SCREEN(x, y) (x >= gfx.sx && x < gfx.sx + gfx.sxsize && \ 282 y >= gfx.sy && y < gfx.sy + gfx.sysize) 283 #define IN_GFX_DOOR(x, y) (x >= gfx.dx && x < gfx.dx + gfx.dxsize && \ 284 y >= gfx.dy && y < gfx.dy + gfx.dysize) 285 #define IN_GFX_VIDEO(x, y) (x >= gfx.vx && x < gfx.vx + gfx.vxsize && \ 286 y >= gfx.vy && y < gfx.vy + gfx.vysize) 287 288 /* values for mouse cursor */ 289 #define CURSOR_DEFAULT 0 290 #define CURSOR_NONE 1 291 #define CURSOR_PLAYFIELD 2 292 293 /* fundamental game speed values */ 294 #define ONE_SECOND_DELAY 1000 /* delay value for one second */ 295 #define GAME_FRAME_DELAY 20 /* frame delay in milliseconds */ 296 #define FFWD_FRAME_DELAY 10 /* 200% speed for fast forward */ 297 #define FRAMES_PER_SECOND (ONE_SECOND_DELAY / GAME_FRAME_DELAY) 298 299 /* maximum playfield size supported by libgame functions */ 300 #define MAX_PLAYFIELD_WIDTH 128 301 #define MAX_PLAYFIELD_HEIGHT 128 302 303 /* maximum number of parallel players supported by libgame functions */ 304 #define MAX_PLAYERS 4 305 306 /* maximum allowed length of player name */ 307 #define MAX_PLAYER_NAME_LEN 10 308 309 /* default name for empty highscore entry */ 310 #define EMPTY_PLAYER_NAME "no name" 311 312 /* default name for unknown player names */ 313 #define ANONYMOUS_NAME "anonymous" 314 315 /* default for other unknown names */ 316 #define UNKNOWN_NAME "unknown" 317 318 /* default name for new levels */ 319 #define NAMELESS_LEVEL_NAME "nameless level" 320 321 /* default text for non-existant artwork */ 322 #define NOT_AVAILABLE "(not available)" 323 324 /* default value for undefined filename */ 325 #define UNDEFINED_FILENAME "[NONE]" 326 327 /* default value for undefined parameter */ 328 #define ARG_DEFAULT "[DEFAULT]" 329 330 /* default values for undefined configuration file parameters */ 331 #define ARG_UNDEFINED "-1000000" 332 #define ARG_UNDEFINED_VALUE (atoi(ARG_UNDEFINED)) 333 334 /* definitions for game sub-directories */ 335 #ifndef RO_GAME_DIR 336 #define RO_GAME_DIR "." 337 #endif 338 339 #ifndef RW_GAME_DIR 340 #define RW_GAME_DIR "." 341 #endif 342 343 #define RO_BASE_PATH RO_GAME_DIR 344 #define RW_BASE_PATH RW_GAME_DIR 345 346 /* directory names */ 347 #define GRAPHICS_DIRECTORY "graphics" 348 #define SOUNDS_DIRECTORY "sounds" 349 #define MUSIC_DIRECTORY "music" 350 #define LEVELS_DIRECTORY "levels" 351 #define TAPES_DIRECTORY "tapes" 352 #define SCORES_DIRECTORY "scores" 353 #define DOCS_DIRECTORY "docs" 354 #define CACHE_DIRECTORY "cache" 355 356 #if !defined(PLATFORM_MSDOS) 357 #define GFX_CLASSIC_SUBDIR "gfx_classic" 358 #define SND_CLASSIC_SUBDIR "snd_classic" 359 #define MUS_CLASSIC_SUBDIR "mus_classic" 360 #else 361 #define GFX_CLASSIC_SUBDIR "gfx_orig" 362 #define SND_CLASSIC_SUBDIR "snd_orig" 363 #define MUS_CLASSIC_SUBDIR "mus_orig" 364 #endif 365 366 #if defined(CREATE_SPECIAL_EDITION_RND_JUE) 367 #define GFX_DEFAULT_SUBDIR "jue0" 368 #define SND_DEFAULT_SUBDIR "jue0" 369 #define MUS_DEFAULT_SUBDIR "jue0" 370 #else 371 #define GFX_DEFAULT_SUBDIR GFX_CLASSIC_SUBDIR 372 #define SND_DEFAULT_SUBDIR SND_CLASSIC_SUBDIR 373 #define MUS_DEFAULT_SUBDIR MUS_CLASSIC_SUBDIR 374 #endif 375 376 #if defined(CREATE_SPECIAL_EDITION) 377 #define GFX_FALLBACK_FILENAME "fallback.pcx" 378 #define SND_FALLBACK_FILENAME "fallback.wav" 379 #define MUS_FALLBACK_FILENAME "fallback.wav" 380 #endif 381 382 /* file names and filename extensions */ 383 #if !defined(PLATFORM_MSDOS) 384 #define LEVELSETUP_DIRECTORY "levelsetup" 385 #define SETUP_FILENAME "setup.conf" 386 #define LEVELSETUP_FILENAME "levelsetup.conf" 387 #define EDITORSETUP_FILENAME "editorsetup.conf" 388 #define EDITORCASCADE_FILENAME "editorcascade.conf" 389 #define HELPANIM_FILENAME "helpanim.conf" 390 #define HELPTEXT_FILENAME "helptext.conf" 391 #define LEVELINFO_FILENAME "levelinfo.conf" 392 #define GRAPHICSINFO_FILENAME "graphicsinfo.conf" 393 #define SOUNDSINFO_FILENAME "soundsinfo.conf" 394 #define MUSICINFO_FILENAME "musicinfo.conf" 395 #define ARTWORKINFO_CACHE_FILE "artworkinfo.cache" 396 #define LEVELFILE_EXTENSION "level" 397 #define TAPEFILE_EXTENSION "tape" 398 #define SCOREFILE_EXTENSION "score" 399 #else 400 #define LEVELSETUP_DIRECTORY "lvlsetup" 401 #define SETUP_FILENAME "setup.cnf" 402 #define LEVELSETUP_FILENAME "lvlsetup.cnf" 403 #define EDITORSETUP_FILENAME "edsetup.cnf" 404 #define EDITORCASCADE_FILENAME "edcascad.conf" 405 #define HELPANIM_FILENAME "helpanim.cnf" 406 #define HELPTEXT_FILENAME "helptext.cnf" 407 #define LEVELINFO_FILENAME "lvlinfo.cnf" 408 #define GRAPHICSINFO_FILENAME "gfxinfo.cnf" 409 #define SOUNDSINFO_FILENAME "sndinfo.cnf" 410 #define MUSICINFO_FILENAME "musinfo.cnf" 411 #define ARTWORKINFO_CACHE_FILE "artinfo.cac" 412 #define LEVELFILE_EXTENSION "lvl" 413 #define TAPEFILE_EXTENSION "tap" 414 #define SCOREFILE_EXTENSION "sco" 415 #endif 416 417 #define ERROR_BASENAME "stderr.txt" 418 419 #define CHAR_PATH_SEPARATOR_UNIX '/' 420 #define CHAR_PATH_SEPARATOR_DOS '\\' 421 422 #define STRING_PATH_SEPARATOR_UNIX "/" 423 #define STRING_PATH_SEPARATOR_DOS "\\" 424 425 #define STRING_NEWLINE_UNIX "\n" 426 #define STRING_NEWLINE_DOS "\r\n" 427 428 #if defined(PLATFORM_WIN32) || defined(PLATFORM_MSDOS) 429 #define CHAR_PATH_SEPARATOR CHAR_PATH_SEPARATOR_DOS 430 #define STRING_PATH_SEPARATOR STRING_PATH_SEPARATOR_DOS 431 #define STRING_NEWLINE STRING_NEWLINE_DOS 432 #else 433 #define CHAR_PATH_SEPARATOR CHAR_PATH_SEPARATOR_UNIX 434 #define STRING_PATH_SEPARATOR STRING_PATH_SEPARATOR_UNIX 435 #define STRING_NEWLINE STRING_NEWLINE_UNIX 436 #endif 437 438 439 /* areas in bitmap PIX_DOOR */ 440 /* meaning in PIX_DB_DOOR: (3 PAGEs) 441 PAGEX1: 1. buffer for DOOR_1 442 PAGEX2: 2. buffer for DOOR_1 443 PAGEX3: buffer for animations 444 */ 445 446 /* these values are hard-coded to be able to use them in initialization */ 447 #define DOOR_GFX_PAGE_WIDTH 100 /* should be set to "gfx.dxsize" */ 448 #define DOOR_GFX_PAGE_HEIGHT 280 /* should be set to "gfx.dysize" */ 449 450 #define DOOR_GFX_PAGESIZE (DOOR_GFX_PAGE_WIDTH) 451 #define DOOR_GFX_PAGEX1 (0 * DOOR_GFX_PAGESIZE) 452 #define DOOR_GFX_PAGEX2 (1 * DOOR_GFX_PAGESIZE) 453 #define DOOR_GFX_PAGEX3 (2 * DOOR_GFX_PAGESIZE) 454 #define DOOR_GFX_PAGEX4 (3 * DOOR_GFX_PAGESIZE) 455 #define DOOR_GFX_PAGEX5 (4 * DOOR_GFX_PAGESIZE) 456 #define DOOR_GFX_PAGEX6 (5 * DOOR_GFX_PAGESIZE) 457 #define DOOR_GFX_PAGEX7 (6 * DOOR_GFX_PAGESIZE) 458 #define DOOR_GFX_PAGEX8 (7 * DOOR_GFX_PAGESIZE) 459 #define DOOR_GFX_PAGEY1 (0) 460 #define DOOR_GFX_PAGEY2 (DOOR_GFX_PAGE_HEIGHT) 461 462 463 /* macros for version handling */ 464 #define VERSION_MAJOR(x) ((x) / 1000000) 465 #define VERSION_MINOR(x) (((x) % 1000000) / 10000) 466 #define VERSION_PATCH(x) (((x) % 10000) / 100) 467 #define VERSION_BUILD(x) ((x) % 100) 468 #define VERSION_IDENT(a,b,c,d) ((a) * 1000000 + (b) * 10000 + (c) * 100 + (d)) 469 470 471 /* macros for parent/child process identification */ 472 #if defined(PLATFORM_UNIX) 473 #define IS_PARENT_PROCESS() (audio.mixer_pid != getpid()) 474 #define IS_CHILD_PROCESS() (audio.mixer_pid == getpid()) 475 #define HAS_CHILD_PROCESS() (audio.mixer_pid > 0) 476 #else 477 #define IS_PARENT_PROCESS() TRUE 478 #define IS_CHILD_PROCESS() FALSE 479 #define HAS_CHILD_PROCESS() FALSE 480 #endif 481 482 483 /* values for artwork type */ 484 #define ARTWORK_TYPE_GRAPHICS 0 485 #define ARTWORK_TYPE_SOUNDS 1 486 #define ARTWORK_TYPE_MUSIC 2 487 488 #define NUM_ARTWORK_TYPES 3 489 490 491 /* values for tree type (chosen to match artwork type) */ 492 #define TREE_TYPE_UNDEFINED -1 493 #define TREE_TYPE_GRAPHICS_DIR ARTWORK_TYPE_GRAPHICS 494 #define TREE_TYPE_SOUNDS_DIR ARTWORK_TYPE_SOUNDS 495 #define TREE_TYPE_MUSIC_DIR ARTWORK_TYPE_MUSIC 496 #define TREE_TYPE_LEVEL_DIR 3 497 498 #define NUM_TREE_TYPES 4 499 500 #define INFOTEXT_UNDEFINED "" 501 #define INFOTEXT_GRAPHICS_DIR "Custom Graphics" 502 #define INFOTEXT_SOUNDS_DIR "Custom Sounds" 503 #define INFOTEXT_MUSIC_DIR "Custom Music" 504 #define INFOTEXT_LEVEL_DIR "Level Sets" 505 506 #define TREE_INFOTEXT(t) ((t) == TREE_TYPE_LEVEL_DIR ? \ 507 INFOTEXT_LEVEL_DIR : \ 508 (t) == TREE_TYPE_GRAPHICS_DIR ? \ 509 INFOTEXT_GRAPHICS_DIR : \ 510 (t) == TREE_TYPE_SOUNDS_DIR ? \ 511 INFOTEXT_SOUNDS_DIR : \ 512 (t) == TREE_TYPE_MUSIC_DIR ? \ 513 INFOTEXT_MUSIC_DIR : \ 514 INFOTEXT_UNDEFINED) 515 516 /* values for artwork handling */ 517 #define LEVELDIR_ARTWORK_SET_PTR(leveldir, type) \ 518 ((type) == ARTWORK_TYPE_GRAPHICS ? \ 519 &(leveldir)->graphics_set : \ 520 (type) == ARTWORK_TYPE_SOUNDS ? \ 521 &(leveldir)->sounds_set : \ 522 &(leveldir)->music_set) 523 524 #define LEVELDIR_ARTWORK_SET(leveldir, type) \ 525 ((type) == ARTWORK_TYPE_GRAPHICS ? \ 526 (leveldir)->graphics_set : \ 527 (type) == ARTWORK_TYPE_SOUNDS ? \ 528 (leveldir)->sounds_set : \ 529 (leveldir)->music_set) 530 531 #define LEVELDIR_ARTWORK_PATH_PTR(leveldir, type) \ 532 ((type) == ARTWORK_TYPE_GRAPHICS ? \ 533 &(leveldir)->graphics_path : \ 534 (type) == ARTWORK_TYPE_SOUNDS ? \ 535 &(leveldir)->sounds_path : \ 536 &(leveldir)->music_path) 537 538 #define LEVELDIR_ARTWORK_PATH(leveldir, type) \ 539 ((type) == ARTWORK_TYPE_GRAPHICS ? \ 540 (leveldir)->graphics_path : \ 541 (type) == ARTWORK_TYPE_SOUNDS ? \ 542 (leveldir)->sounds_path : \ 543 (leveldir)->music_path) 544 545 #define SETUP_ARTWORK_SET(setup, type) \ 546 ((type) == ARTWORK_TYPE_GRAPHICS ? \ 547 (setup).graphics_set : \ 548 (type) == ARTWORK_TYPE_SOUNDS ? \ 549 (setup).sounds_set : \ 550 (setup).music_set) 551 552 #define SETUP_OVERRIDE_ARTWORK(setup, type) \ 553 ((type) == ARTWORK_TYPE_GRAPHICS ? \ 554 (setup).override_level_graphics : \ 555 (type) == ARTWORK_TYPE_SOUNDS ? \ 556 (setup).override_level_sounds : \ 557 (setup).override_level_music) 558 559 #define GFX_OVERRIDE_ARTWORK(type) \ 560 ((type) == ARTWORK_TYPE_GRAPHICS ? \ 561 gfx.override_level_graphics : \ 562 (type) == ARTWORK_TYPE_SOUNDS ? \ 563 gfx.override_level_sounds : \ 564 gfx.override_level_music) 565 566 #define ARTWORK_FIRST_NODE(artwork, type) \ 567 ((type) == ARTWORK_TYPE_GRAPHICS ? \ 568 (artwork).gfx_first : \ 569 (type) == ARTWORK_TYPE_SOUNDS ? \ 570 (artwork).snd_first : \ 571 (artwork).mus_first) 572 573 #define ARTWORK_CURRENT_IDENTIFIER_PTR(artwork, type) \ 574 ((type) == ARTWORK_TYPE_GRAPHICS ? \ 575 &(artwork).gfx_current_identifier : \ 576 (type) == ARTWORK_TYPE_SOUNDS ? \ 577 &(artwork).snd_current_identifier : \ 578 &(artwork).mus_current_identifier) 579 580 #define ARTWORK_CURRENT_IDENTIFIER(artwork, type) \ 581 ((type) == ARTWORK_TYPE_GRAPHICS ? \ 582 (artwork).gfx_current_identifier : \ 583 (type) == ARTWORK_TYPE_SOUNDS ? \ 584 (artwork).snd_current_identifier : \ 585 (artwork).mus_current_identifier) 586 587 #define ARTWORKINFO_FILENAME(type) \ 588 ((type) == ARTWORK_TYPE_GRAPHICS ? \ 589 GRAPHICSINFO_FILENAME : \ 590 (type) == ARTWORK_TYPE_SOUNDS ? \ 591 SOUNDSINFO_FILENAME : \ 592 (type) == ARTWORK_TYPE_MUSIC ? \ 593 MUSICINFO_FILENAME : "") 594 595 #define ARTWORK_DIRECTORY(type) \ 596 ((type) == ARTWORK_TYPE_GRAPHICS ? \ 597 GRAPHICS_DIRECTORY : \ 598 (type) == ARTWORK_TYPE_SOUNDS ? \ 599 SOUNDS_DIRECTORY : \ 600 (type) == ARTWORK_TYPE_MUSIC ? \ 601 MUSIC_DIRECTORY : "") 602 603 #define OPTIONS_ARTWORK_DIRECTORY(type) \ 604 ((type) == ARTWORK_TYPE_GRAPHICS ? \ 605 options.graphics_directory : \ 606 (type) == ARTWORK_TYPE_SOUNDS ? \ 607 options.sounds_directory : \ 608 (type) == ARTWORK_TYPE_MUSIC ? \ 609 options.music_directory : "") 610 611 #define UPDATE_BUSY_STATE() \ 612 { \ 613 if (gfx.draw_busy_anim_function != NULL) \ 614 gfx.draw_busy_anim_function(); \ 615 } 616 617 618 /* type definitions */ 619 typedef int (*EventFilter)(const Event *); 620 621 622 /* structure definitions */ 623 624 struct ProgramInfo 625 { 626 char *command_basepath; /* directory that contains the program */ 627 char *command_basename; /* base filename of the program binary */ 628 629 char *userdata_subdir; /* personal user game data directory */ 630 char *userdata_subdir_unix; /* personal user game data directory (Unix) */ 631 char *userdata_path; /* resulting full path to game data directory */ 632 633 char *program_title; 634 char *window_title; 635 char *icon_title; 636 637 char *x11_icon_filename; 638 char *x11_iconmask_filename; 639 char *sdl_icon_filename; 640 char *msdos_cursor_filename; 641 642 char *cookie_prefix; 643 char *filename_prefix; /* prefix to cut off from DOS filenames */ 644 645 char *error_filename; /* filename where to write error messages to */ 646 FILE *error_file; /* (used instead of 'stderr' on some systems) */ 647 648 int version_major; 649 int version_minor; 650 int version_patch; 651 652 void (*exit_function)(int); 653 }; 654 655 struct OptionInfo 656 { 657 char *display_name; 658 char *server_host; 659 int server_port; 660 661 char *ro_base_directory; 662 char *rw_base_directory; 663 char *level_directory; 664 char *graphics_directory; 665 char *sounds_directory; 666 char *music_directory; 667 char *docs_directory; 668 669 char *execute_command; 670 671 char *special_flags; 672 673 boolean serveronly; 674 boolean network; 675 boolean verbose; 676 boolean debug; 677 boolean debug_x11_sync; 678 }; 679 680 struct ScreenModeInfo 681 { 682 int width, height; 683 }; 684 685 struct VideoSystemInfo 686 { 687 int default_depth; 688 int width, height, depth; 689 690 boolean fullscreen_available; 691 boolean fullscreen_enabled; 692 struct ScreenModeInfo *fullscreen_modes; 693 char *fullscreen_mode_current; 694 }; 695 696 struct AudioSystemInfo 697 { 698 boolean sound_available; 699 boolean loops_available; 700 boolean music_available; 701 702 boolean sound_enabled; 703 boolean sound_deactivated; /* for temporarily disabling sound */ 704 705 int mixer_pipe[2]; 706 int mixer_pid; 707 char *device_name; 708 int device_fd; 709 710 int num_channels; 711 int music_channel; 712 int first_sound_channel; 713 }; 714 715 struct FontBitmapInfo 716 { 717 Bitmap *bitmap; 718 719 int src_x, src_y; /* start position of animation frames */ 720 int width, height; /* width/height of each animation frame */ 721 722 int draw_xoffset; /* offset for drawing font characters */ 723 int draw_yoffset; /* offset for drawing font characters */ 724 725 int num_chars; 726 int num_chars_per_line; 727 728 #if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) 729 Pixmap *clip_mask; /* single-char-only clip mask array for X11 */ 730 #endif 731 }; 732 733 struct GfxInfo 734 { 735 int sx, sy; 736 int sxsize, sysize; 737 int real_sx, real_sy; 738 int full_sxsize, full_sysize; 739 int scrollbuffer_width, scrollbuffer_height; 740 741 int dx, dy; 742 int dxsize, dysize; 743 744 int vx, vy; 745 int vxsize, vysize; 746 747 int win_xsize, win_ysize; 748 749 int draw_deactivation_mask; 750 int draw_background_mask; 751 752 Bitmap *field_save_buffer; 753 754 Bitmap *background_bitmap; 755 int background_bitmap_mask; 756 757 boolean clipping_enabled; 758 int clip_x, clip_y; 759 int clip_width, clip_height; 760 761 boolean override_level_graphics; 762 boolean override_level_sounds; 763 boolean override_level_music; 764 765 boolean draw_init_text; 766 767 int num_fonts; 768 struct FontBitmapInfo *font_bitmap_info; 769 int (*select_font_function)(int); 770 int (*get_font_from_token_function)(char *); 771 772 int anim_random_frame; 773 774 void (*draw_busy_anim_function)(void); 775 }; 776 777 struct JoystickInfo 778 { 779 int status; 780 int fd[MAX_PLAYERS]; /* file descriptor of player's joystick */ 781 }; 782 783 struct SetupJoystickInfo 784 { 785 char *device_name; /* device name of player's joystick */ 786 787 int xleft, xmiddle, xright; 788 int yupper, ymiddle, ylower; 789 int snap, drop; 790 }; 791 792 struct SetupKeyboardInfo 793 { 794 Key left, right, up, down; 795 Key snap, drop; 796 }; 797 798 struct SetupInputInfo 799 { 800 boolean use_joystick; 801 struct SetupJoystickInfo joy; 802 struct SetupKeyboardInfo key; 803 }; 804 805 struct SetupEditorInfo 806 { 807 boolean el_boulderdash; 808 boolean el_emerald_mine; 809 boolean el_emerald_mine_club; 810 boolean el_more; 811 boolean el_sokoban; 812 boolean el_supaplex; 813 boolean el_diamond_caves; 814 boolean el_dx_boulderdash; 815 boolean el_chars; 816 boolean el_steel_chars; 817 boolean el_custom; 818 boolean el_user_defined; 819 boolean el_dynamic; 820 821 boolean el_headlines; 822 823 boolean el_by_game; 824 boolean el_by_type; 825 826 boolean show_element_token; 827 }; 828 829 struct SetupEditorCascadeInfo 830 { 831 boolean el_bd; 832 boolean el_em; 833 boolean el_emc; 834 boolean el_rnd; 835 boolean el_sb; 836 boolean el_sp; 837 boolean el_dc; 838 boolean el_dx; 839 boolean el_chars; 840 boolean el_steel_chars; 841 boolean el_ce; 842 boolean el_ge; 843 boolean el_ref; 844 boolean el_user; 845 boolean el_dynamic; 846 }; 847 848 struct SetupShortcutInfo 849 { 850 Key save_game; 851 Key load_game; 852 Key toggle_pause; 853 854 Key focus_player[MAX_PLAYERS]; 855 Key focus_player_all; 856 857 Key tape_eject; 858 Key tape_stop; 859 Key tape_pause; 860 Key tape_record; 861 Key tape_play; 862 863 Key sound_simple; 864 Key sound_loops; 865 Key sound_music; 866 }; 867 868 struct SetupSystemInfo 869 { 870 char *sdl_videodriver; 871 char *sdl_audiodriver; 872 int audio_fragment_size; 873 }; 874 875 struct SetupInfo 876 { 877 char *player_name; 878 879 boolean sound; 880 boolean sound_loops; 881 boolean sound_music; 882 boolean sound_simple; 883 boolean toons; 884 boolean scroll_delay; 885 boolean scroll_delay_value; 886 boolean soft_scrolling; 887 boolean fade_screens; 888 boolean autorecord; 889 boolean show_titlescreen; 890 boolean quick_doors; 891 boolean team_mode; 892 boolean handicap; 893 boolean skip_levels; 894 boolean time_limit; 895 boolean fullscreen; 896 char *fullscreen_mode; 897 boolean ask_on_escape; 898 boolean ask_on_escape_editor; 899 boolean quick_switch; 900 boolean input_on_focus; 901 boolean prefer_aga_graphics; 902 int game_frame_delay; 903 boolean sp_show_border_elements; 904 905 char *graphics_set; 906 char *sounds_set; 907 char *music_set; 908 int override_level_graphics; /* not boolean -- can also be "AUTO" */ 909 int override_level_sounds; /* not boolean -- can also be "AUTO" */ 910 int override_level_music; /* not boolean -- can also be "AUTO" */ 911 912 struct SetupEditorInfo editor; 913 struct SetupEditorCascadeInfo editor_cascade; 914 struct SetupShortcutInfo shortcut; 915 struct SetupInputInfo input[MAX_PLAYERS]; 916 struct SetupSystemInfo system; 917 struct OptionInfo options; 918 }; 919 920 struct TreeInfo 921 { 922 struct TreeInfo **node_top; /* topmost node in tree */ 923 struct TreeInfo *node_parent; /* parent level directory info */ 924 struct TreeInfo *node_group; /* level group sub-directory info */ 925 struct TreeInfo *next; /* next level series structure node */ 926 927 int cl_first; /* internal control field for setup screen */ 928 int cl_cursor; /* internal control field for setup screen */ 929 930 int type; /* type of tree content */ 931 932 /* fields for "type == TREE_TYPE_LEVEL_DIR" */ 933 934 char *subdir; /* tree info sub-directory basename (may be ".") */ 935 char *fullpath; /* complete path relative to tree base directory */ 936 char *basepath; /* absolute base path of tree base directory */ 937 char *identifier; /* identifier string for configuration files */ 938 char *name; /* tree info name, as displayed in selection menues */ 939 char *name_sorting; /* optional sorting name for correct name sorting */ 940 char *author; /* level or artwork author name */ 941 char *year; /* optional year of creation for levels or artwork */ 942 char *imported_from; /* optional comment for imported levels or artwork */ 943 char *imported_by; /* optional comment for imported levels or artwork */ 944 char *tested_by; /* optional comment to name people who tested a set */ 945 946 char *graphics_set_ecs; /* special EMC custom graphics set (ECS graphics) */ 947 char *graphics_set_aga; /* special EMC custom graphics set (AGA graphics) */ 948 char *graphics_set; /* optional custom graphics set (level tree only) */ 949 char *sounds_set; /* optional custom sounds set (level tree only) */ 950 char *music_set; /* optional custom music set (level tree only) */ 951 char *graphics_path; /* path to optional custom graphics set (level only) */ 952 char *sounds_path; /* path to optional custom sounds set (level only) */ 953 char *music_path; /* path to optional custom music set (level only) */ 954 955 char *level_filename; /* filename of level file (for packed level file) */ 956 char *level_filetype; /* type of levels in level directory or level file */ 957 958 char *special_flags; /* flags for special actions performed on level file */ 959 960 int levels; /* number of levels in level series */ 961 int first_level; /* first level number (to allow start with 0 or 1) */ 962 int last_level; /* last level number (automatically calculated) */ 963 int sort_priority; /* sort levels by 'sort_priority' and then by name */ 964 965 boolean latest_engine;/* force level set to use the latest game engine */ 966 967 boolean level_group; /* directory contains more level series directories */ 968 boolean parent_link; /* entry links back to parent directory */ 969 boolean in_user_dir; /* user defined levels are stored in home directory */ 970 boolean user_defined; /* levels in user directory and marked as "private" */ 971 boolean readonly; /* readonly levels can not be changed with editor */ 972 boolean handicap; /* level set has no handicap when set to "false" */ 973 boolean skip_levels; /* levels can be skipped when set to "true" */ 974 975 int color; /* color to use on selection screen for this level */ 976 char *class_desc; /* description of level series class */ 977 int handicap_level; /* number of the lowest unsolved level */ 978 979 char *infotext; /* optional text to describe the tree type (headline) */ 980 }; 981 982 typedef struct TreeInfo TreeInfo; 983 typedef struct TreeInfo LevelDirTree; 984 typedef struct TreeInfo ArtworkDirTree; 985 typedef struct TreeInfo GraphicsDirTree; 986 typedef struct TreeInfo SoundsDirTree; 987 typedef struct TreeInfo MusicDirTree; 988 989 struct ArtworkInfo 990 { 991 GraphicsDirTree *gfx_first; 992 GraphicsDirTree *gfx_current; 993 SoundsDirTree *snd_first; 994 SoundsDirTree *snd_current; 995 MusicDirTree *mus_first; 996 MusicDirTree *mus_current; 997 998 char *gfx_current_identifier; 999 char *snd_current_identifier; 1000 char *mus_current_identifier; 1001 }; 1002 1003 struct ValueTextInfo 1004 { 1005 int value; 1006 char *text; 1007 }; 1008 1009 struct ConfigInfo 1010 { 1011 char *token; 1012 char *value; 1013 }; 1014 1015 struct ConfigTypeInfo 1016 { 1017 char *token; 1018 char *value; 1019 int type; 1020 }; 1021 1022 struct TokenIntPtrInfo 1023 { 1024 char *token; 1025 int *value; 1026 }; 1027 1028 struct FileInfo 1029 { 1030 char *token; 1031 1032 char *default_filename; 1033 char *filename; 1034 1035 char **default_parameter; /* array of file parameters */ 1036 char **parameter; /* array of file parameters */ 1037 1038 boolean redefined; 1039 boolean fallback_to_default; 1040 boolean default_is_cloned; 1041 }; 1042 1043 struct SetupFileList 1044 { 1045 char *token; 1046 char *value; 1047 1048 struct SetupFileList *next; 1049 }; 1050 1051 struct ListNodeInfo 1052 { 1053 char *source_filename; /* primary key for node list */ 1054 int num_references; 1055 }; 1056 1057 struct PropertyMapping 1058 { 1059 int base_index; 1060 int ext1_index; 1061 int ext2_index; 1062 int ext3_index; 1063 1064 int artwork_index; 1065 }; 1066 1067 struct ArtworkListInfo 1068 { 1069 int type; /* type of artwork */ 1070 1071 int num_file_list_entries; 1072 int num_dynamic_file_list_entries; 1073 struct FileInfo *file_list; /* static artwork file array */ 1074 struct FileInfo *dynamic_file_list; /* dynamic artwrk file array */ 1075 1076 int num_suffix_list_entries; 1077 struct ConfigTypeInfo *suffix_list; /* parameter suffixes array */ 1078 1079 int num_base_prefixes; 1080 int num_ext1_suffixes; 1081 int num_ext2_suffixes; 1082 int num_ext3_suffixes; 1083 char **base_prefixes; /* base token prefixes array */ 1084 char **ext1_suffixes; /* property suffixes array 1 */ 1085 char **ext2_suffixes; /* property suffixes array 2 */ 1086 char **ext3_suffixes; /* property suffixes array 3 */ 1087 1088 int num_ignore_tokens; 1089 char **ignore_tokens; /* file tokens to be ignored */ 1090 1091 int num_property_mapping_entries; 1092 struct PropertyMapping *property_mapping; /* mapping token -> artwork */ 1093 1094 int sizeof_artwork_list_entry; 1095 1096 struct ListNodeInfo **artwork_list; /* static artwork node array */ 1097 struct ListNodeInfo **dynamic_artwork_list; /* dynamic artwrk node array */ 1098 struct ListNode *content_list; /* dynamic artwork node list */ 1099 1100 void *(*load_artwork)(char *); /* constructor function */ 1101 void (*free_artwork)(void *); /* destructor function */ 1102 }; 1103 1104 struct XY 1105 { 1106 int x, y; 1107 }; 1108 1109 struct Rect 1110 { 1111 int x, y; 1112 int width, height; 1113 }; 1114 1115 struct RectWithBorder 1116 { 1117 int x, y; 1118 int width, height; 1119 int border_size; 1120 }; 1121 1122 struct MenuPosInfo 1123 { 1124 int x, y; 1125 int width, height; 1126 int align, valign; 1127 }; 1128 1129 struct TextPosInfo 1130 { 1131 int x, y; 1132 int width, height; 1133 int align, valign; 1134 int size; 1135 int font, font_alt; 1136 boolean draw_masked; 1137 int sort_priority; 1138 int id; 1139 }; 1140 1141 1142 /* ========================================================================= */ 1143 /* exported variables */ 1144 /* ========================================================================= */ 1145 1146 extern struct ProgramInfo program; 1147 extern struct OptionInfo options; 1148 extern struct VideoSystemInfo video; 1149 extern struct AudioSystemInfo audio; 1150 extern struct GfxInfo gfx; 1151 extern struct AnimInfo anim; 1152 extern struct ArtworkInfo artwork; 1153 extern struct JoystickInfo joystick; 1154 extern struct SetupInfo setup; 1155 1156 extern LevelDirTree *leveldir_first_all; 1157 extern LevelDirTree *leveldir_first; 1158 extern LevelDirTree *leveldir_current; 1159 extern int level_nr; 1160 1161 extern Display *display; 1162 extern Visual *visual; 1163 extern int screen; 1164 extern Colormap cmap; 1165 1166 extern DrawWindow *window; 1167 extern DrawBuffer *backbuffer; 1168 extern DrawBuffer *drawto; 1169 1170 extern int button_status; 1171 extern boolean motion_status; 1172 1173 extern int redraw_mask; 1174 extern int redraw_tiles; 1175 1176 extern int FrameCounter; 1177 1178 1179 /* function definitions */ 1180 1181 void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *, 1182 char *, char *, char *, char *, char *, int); 1183 1184 void InitExitFunction(void (*exit_function)(int)); 1185 void InitPlatformDependentStuff(void); 1186 void ClosePlatformDependentStuff(void); 1187 1188 void InitGfxFieldInfo(int, int, int, int, int, int, int, int, Bitmap *); 1189 void InitGfxDoor1Info(int, int, int, int); 1190 void InitGfxDoor2Info(int, int, int, int); 1191 void InitGfxWindowInfo(int, int); 1192 void InitGfxScrollbufferInfo(int, int); 1193 void InitGfxClipRegion(boolean, int, int, int, int); 1194 void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(void)); 1195 void InitGfxCustomArtworkInfo(); 1196 void SetDrawDeactivationMask(int); 1197 void SetDrawBackgroundMask(int); 1198 void SetWindowBackgroundBitmap(Bitmap *); 1199 void SetMainBackgroundBitmap(Bitmap *); 1200 void SetDoorBackgroundBitmap(Bitmap *); 1201 1202 void InitVideoDisplay(void); 1203 void CloseVideoDisplay(void); 1204 void InitVideoBuffer(int, int, int, boolean); 1205 Bitmap *CreateBitmapStruct(void); 1206 Bitmap *CreateBitmap(int, int, int); 1207 void ReCreateBitmap(Bitmap **, int, int, int); 1208 void FreeBitmap(Bitmap *); 1209 void BlitBitmap(Bitmap *, Bitmap *, int, int, int, int, int, int); 1210 void FadeRectangle(Bitmap *bitmap, int, int, int, int, int, int, int, 1211 void (*draw_border_function)(void)); 1212 void FillRectangle(Bitmap *, int, int, int, int, Pixel); 1213 void ClearRectangle(Bitmap *, int, int, int, int); 1214 void ClearRectangleOnBackground(Bitmap *, int, int, int, int); 1215 void SetClipMask(Bitmap *, GC, Pixmap); 1216 void SetClipOrigin(Bitmap *, GC, int, int); 1217 void BlitBitmapMasked(Bitmap *, Bitmap *, int, int, int, int, int, int); 1218 boolean DrawingOnBackground(int, int); 1219 void BlitBitmapOnBackground(Bitmap *, Bitmap *, int, int, int, int, int, int); 1220 void DrawSimpleBlackLine(Bitmap *, int, int, int, int); 1221 void DrawSimpleWhiteLine(Bitmap *, int, int, int, int); 1222 void DrawLines(Bitmap *, struct XY *, int, Pixel); 1223 Pixel GetPixel(Bitmap *, int, int); 1224 Pixel GetPixelFromRGB(Bitmap *, unsigned int,unsigned int,unsigned int); 1225 Pixel GetPixelFromRGBcompact(Bitmap *, unsigned int); 1226 1227 void FlushDisplay(void); 1228 void SyncDisplay(void); 1229 void KeyboardAutoRepeatOn(void); 1230 void KeyboardAutoRepeatOff(void); 1231 boolean PointerInWindow(DrawWindow *); 1232 boolean SetVideoMode(boolean); 1233 boolean ChangeVideoModeIfNeeded(boolean); 1234 1235 Bitmap *LoadImage(char *); 1236 Bitmap *LoadCustomImage(char *); 1237 void ReloadCustomImage(Bitmap *, char *); 1238 1239 Bitmap *ZoomBitmap(Bitmap *, int, int); 1240 void CreateBitmapWithSmallBitmaps(Bitmap *, int); 1241 void ScaleBitmap(Bitmap *, int); 1242 1243 void SetMouseCursor(int); 1244 1245 void OpenAudio(void); 1246 void CloseAudio(void); 1247 void SetAudioMode(boolean); 1248 1249 void InitEventFilter(EventFilter); 1250 boolean PendingEvent(void); 1251 void NextEvent(Event *event); 1252 void PeekEvent(Event *event); 1253 Key GetEventKey(KeyEvent *, boolean); 1254 KeyMod HandleKeyModState(Key, int); 1255 KeyMod GetKeyModState(); 1256 KeyMod GetKeyModStateFromEvents(); 1257 boolean CheckCloseWindowEvent(ClientMessageEvent *); 1258 1259 void InitJoysticks(); 1260 boolean ReadJoystick(int, int *, int *, boolean *, boolean *); 1261 1262 #endif /* SYSTEM_H */ 1263