X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fmain.h;h=83fbd7caeb97b57299a483f3f7d8bd9f5dbe5b70;hp=29f84f2f5ee393b46b710c5caff3a39c39a69432;hb=aacdde073e6952de513366dc50f2a21bd043a65d;hpb=e863b9777df452d4d666e63b4dca8ae957cddd6b diff --git a/src/main.h b/src/main.h index 29f84f2f..83fbd7ca 100644 --- a/src/main.h +++ b/src/main.h @@ -1,15 +1,13 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2006 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* main.h * -***********************************************************/ +// ============================================================================ +// Rocks'n'Diamonds - McDuffin Strikes Back! +// ---------------------------------------------------------------------------- +// (c) 1995-2014 by Artsoft Entertainment +// Holger Schemel +// info@artsoft.org +// http://www.artsoft.org/ +// ---------------------------------------------------------------------------- +// main.h +// ============================================================================ #ifndef MAIN_H #define MAIN_H @@ -31,9 +29,6 @@ #include "conf_mus.h" /* include auto-generated data structure definitions */ -#define NEW_TILESIZE 1 -#define NEW_SCROLL 1 - #define IMG_UNDEFINED (-1) #define IMG_EMPTY IMG_EMPTY_SPACE #define IMG_SP_EMPTY IMG_EMPTY_SPACE @@ -46,17 +41,15 @@ #define SND_UNDEFINED (-1) #define MUS_UNDEFINED (-1) -#if 0 -#define WIN_XSIZE 672 -#define WIN_YSIZE 560 -#endif +#define WIN_XSIZE_DEFAULT 672 +#define WIN_YSIZE_DEFAULT 560 -#define DEFAULT_FULLSCREEN_MODE "800x600" +#define SCR_FIELDX_DEFAULT 17 +#define SCR_FIELDY_DEFAULT 17 + +#define SXSIZE_DEFAULT (SCR_FIELDX_DEFAULT * TILEX) +#define SYSIZE_DEFAULT (SCR_FIELDY_DEFAULT * TILEY) -#if 0 -#define SCR_FIELDX 17 -#define SCR_FIELDY 17 -#endif #define MAX_BUF_XSIZE (SCR_FIELDX + 2) #define MAX_BUF_YSIZE (SCR_FIELDY + 2) #define MIN_LEV_FIELDX 3 @@ -769,27 +762,7 @@ #define IS_DC_STEELWALL_2(e) ((e) >= EL_DC_STEELWALL_2_LEFT && \ (e) <= EL_DC_STEELWALL_2_SINGLE) -#if 1 - -#if 1 #define GFX_ELEMENT(e) (element_info[e].gfx_element) -#else -#define GFX_ELEMENT(e) (element_info[e].gfx_element == \ - (element_info[e].use_gfx_element ? \ - element_info[e].gfx_element : e) ? \ - element_info[e].gfx_element : \ - element_info[e].gfx_element + \ - 0 * printf("::: %d: %d <-> %d\n", \ - e, \ - element_info[e].gfx_element, \ - element_info[e].use_gfx_element ? \ - element_info[e].gfx_element : e)) -#endif - -#else -#define GFX_ELEMENT(e) (element_info[e].use_gfx_element ? \ - element_info[e].gfx_element : e) -#endif /* !!! CHECK THIS !!! */ #if 1 @@ -895,6 +868,8 @@ #define IS_SPECIAL_GFX_ARG(a) ((a) >= 0 && (a) < NUM_SPECIAL_GFX_ARGS) +#define IS_GLOBAL_ANIM_PART(a) ((a) >= 0 && (a) < NUM_GLOBAL_ANIM_PARTS) + #define EL_CASCADE_ACTIVE(e) (IS_EDITOR_CASCADE_INACTIVE(e) ? (e) + 1 : (e)) #define EL_CASCADE_INACTIVE(e) (IS_EDITOR_CASCADE_ACTIVE(e) ? (e) - 1 : (e)) #define EL_CASCADE_TOGGLE(e) (IS_EDITOR_CASCADE_INACTIVE(e) ? (e) + 1 : \ @@ -911,7 +886,6 @@ #define BUTTON_ACTIVE(b) (ActiveButton[b]) #define FONT_ACTIVE(f) (ActiveFont[f]) - /* fundamental game speed values */ #define MICROLEVEL_SCROLL_DELAY 50 /* delay for scrolling micro level */ #define MICROLEVEL_LABEL_DELAY 250 /* delay for micro level label */ @@ -950,18 +924,6 @@ #define MAX_INITIAL_INVENTORY_SIZE 8 /* often used screen positions */ -#if 0 -#define SX 8 -#define SY 8 -#define REAL_SX (SX - 2) -#define REAL_SY (SY - 2) -#define DX 566 -#define DY 60 -#define VX DX -#define VY 400 -#define EX DX -#define EY (VY - 44) -#endif #define TILESIZE 32 #define TILEX TILESIZE #define TILEY TILESIZE @@ -975,53 +937,9 @@ #define MICRO_TILEY MICRO_TILESIZE #define MIDPOSX (SCR_FIELDX / 2) #define MIDPOSY (SCR_FIELDY / 2) -#if NEW_TILESIZE -#if NEW_SCROLL -#if 0 -#define SXSIZE (SCR_FIELDX * TILEX_VAR) -#define SYSIZE (SCR_FIELDY * TILEY_VAR) -#endif #define FXSIZE ((2 + SCR_FIELDX + 2) * TILEX_VAR) #define FYSIZE ((2 + SCR_FIELDY + 2) * TILEY_VAR) -#else -#if 0 -#define SXSIZE (SCR_FIELDX * TILEX_VAR) -#define SYSIZE (SCR_FIELDY * TILEY_VAR) -#endif -#define FXSIZE ((SCR_FIELDX + 2) * TILEX_VAR) -#define FYSIZE ((SCR_FIELDY + 2) * TILEY_VAR) -#endif -#else -#if NEW_SCROLL -#if 0 -#define SXSIZE (SCR_FIELDX * TILEX) -#define SYSIZE (SCR_FIELDY * TILEY) -#endif -#define FXSIZE ((2 + SCR_FIELDX + 2) * TILEX) -#define FYSIZE ((2 + SCR_FIELDY + 2) * TILEY) -#else -#if 0 -#define SXSIZE (SCR_FIELDX * TILEX) -#define SYSIZE (SCR_FIELDY * TILEY) -#endif -#define FXSIZE ((SCR_FIELDX + 2) * TILEX) -#define FYSIZE ((SCR_FIELDY + 2) * TILEY) -#endif -#endif - -#if 0 -#define DXSIZE 100 -#define DYSIZE 280 -#define VXSIZE DXSIZE -#define VYSIZE 100 -#define EXSIZE DXSIZE -#define EYSIZE (VYSIZE + 44) -#endif -#if 0 -#define FULL_SXSIZE (2 + SXSIZE + 2) -#define FULL_SYSIZE (2 + SYSIZE + 2) -#endif #define MICROLEVEL_XSIZE ((STD_LEV_FIELDX + 2) * MICRO_TILEX) #define MICROLEVEL_YSIZE ((STD_LEV_FIELDY + 2) * MICRO_TILEY) #define MICROLEVEL_XPOS (SX + (SXSIZE - MICROLEVEL_XSIZE) / 2) @@ -1847,9 +1765,17 @@ #define ACTION_PAGE_30 81 #define ACTION_PAGE_31 82 #define ACTION_PAGE_32 83 -#define ACTION_OTHER 84 - -#define NUM_ACTIONS 85 +#define ACTION_PART_1 84 +#define ACTION_PART_2 85 +#define ACTION_PART_3 86 +#define ACTION_PART_4 87 +#define ACTION_PART_5 88 +#define ACTION_PART_6 89 +#define ACTION_PART_7 90 +#define ACTION_PART_8 91 +#define ACTION_OTHER 92 + +#define NUM_ACTIONS 93 #define ACTION_BORING_LAST ACTION_BORING_10 #define ACTION_SLEEPING_LAST ACTION_SLEEPING_3 @@ -1859,22 +1785,39 @@ #define GFX_SPECIAL_ARG_DEFAULT 0 #define GFX_SPECIAL_ARG_LOADING 1 #define GFX_SPECIAL_ARG_TITLE_INITIAL 2 -#define GFX_SPECIAL_ARG_TITLE 3 -#define GFX_SPECIAL_ARG_MAIN 4 -#define GFX_SPECIAL_ARG_LEVELS 5 -#define GFX_SPECIAL_ARG_LEVELNR 6 -#define GFX_SPECIAL_ARG_SCORES 7 -#define GFX_SPECIAL_ARG_EDITOR 8 -#define GFX_SPECIAL_ARG_INFO 9 -#define GFX_SPECIAL_ARG_SETUP 10 -#define GFX_SPECIAL_ARG_PLAYING 11 -#define GFX_SPECIAL_ARG_DOOR 12 -#define GFX_SPECIAL_ARG_TAPE 13 -#define GFX_SPECIAL_ARG_PANEL 14 -#define GFX_SPECIAL_ARG_PREVIEW 15 -#define GFX_SPECIAL_ARG_CRUMBLED 16 - -#define NUM_SPECIAL_GFX_ARGS 17 +#define GFX_SPECIAL_ARG_TITLE_INITIAL_1 3 +#define GFX_SPECIAL_ARG_TITLE_INITIAL_2 4 +#define GFX_SPECIAL_ARG_TITLE_INITIAL_3 5 +#define GFX_SPECIAL_ARG_TITLE_INITIAL_4 6 +#define GFX_SPECIAL_ARG_TITLE_INITIAL_5 7 +#define GFX_SPECIAL_ARG_TITLE 8 +#define GFX_SPECIAL_ARG_TITLE_1 9 +#define GFX_SPECIAL_ARG_TITLE_2 10 +#define GFX_SPECIAL_ARG_TITLE_3 11 +#define GFX_SPECIAL_ARG_TITLE_4 12 +#define GFX_SPECIAL_ARG_TITLE_5 13 +#define GFX_SPECIAL_ARG_MAIN 14 +#define GFX_SPECIAL_ARG_LEVELS 15 +#define GFX_SPECIAL_ARG_LEVELNR 16 +#define GFX_SPECIAL_ARG_SCORES 17 +#define GFX_SPECIAL_ARG_EDITOR 18 +#define GFX_SPECIAL_ARG_INFO 19 +#define GFX_SPECIAL_ARG_SETUP 20 +#define GFX_SPECIAL_ARG_PLAYING 21 +#define GFX_SPECIAL_ARG_DOOR 22 +#define GFX_SPECIAL_ARG_TAPE 23 +#define GFX_SPECIAL_ARG_PANEL 24 +#define GFX_SPECIAL_ARG_PREVIEW 25 +#define GFX_SPECIAL_ARG_CRUMBLED 26 +#define GFX_SPECIAL_ARG_MAINONLY 27 +#define GFX_SPECIAL_ARG_TYPENAME 28 +#define GFX_SPECIAL_ARG_SUBMENU 29 +#define GFX_SPECIAL_ARG_MENU 30 +#define GFX_SPECIAL_ARG_TOONS 31 +#define GFX_SPECIAL_ARG_FADING 32 +#define GFX_SPECIAL_ARG_QUIT 33 + +#define NUM_SPECIAL_GFX_ARGS 34 /* these additional definitions are currently only used for draw offsets */ #define GFX_SPECIAL_ARG_INFO_MAIN 0 @@ -1938,34 +1881,40 @@ #define GFX_ARG_DIGGABLE_LIKE 23 #define GFX_ARG_BORDER_SIZE 24 #define GFX_ARG_STEP_OFFSET 25 -#define GFX_ARG_STEP_DELAY 26 -#define GFX_ARG_DIRECTION 27 -#define GFX_ARG_POSITION 28 -#define GFX_ARG_DRAW_XOFFSET 29 -#define GFX_ARG_DRAW_YOFFSET 30 -#define GFX_ARG_DRAW_MASKED 31 -#define GFX_ARG_ANIM_DELAY_FIXED 32 -#define GFX_ARG_ANIM_DELAY_RANDOM 33 -#define GFX_ARG_POST_DELAY_FIXED 34 -#define GFX_ARG_POST_DELAY_RANDOM 35 -#define GFX_ARG_NAME 36 -#define GFX_ARG_SCALE_UP_FACTOR 37 -#define GFX_ARG_CLONE_FROM 38 -#define GFX_ARG_FADE_MODE 39 -#define GFX_ARG_FADE_DELAY 40 -#define GFX_ARG_POST_DELAY 41 -#define GFX_ARG_AUTO_DELAY 42 -#define GFX_ARG_ALIGN 43 -#define GFX_ARG_VALIGN 44 -#define GFX_ARG_SORT_PRIORITY 45 -#define GFX_ARG_CLASS 46 -#define GFX_ARG_STYLE 47 -#define GFX_ARG_ACTIVE_XOFFSET 48 -#define GFX_ARG_ACTIVE_YOFFSET 49 -#define GFX_ARG_PRESSED_XOFFSET 50 -#define GFX_ARG_PRESSED_YOFFSET 51 - -#define NUM_GFX_ARGS 52 +#define GFX_ARG_STEP_XOFFSET 26 +#define GFX_ARG_STEP_YOFFSET 27 +#define GFX_ARG_STEP_DELAY 28 +#define GFX_ARG_DIRECTION 29 +#define GFX_ARG_POSITION 30 +#define GFX_ARG_DRAW_XOFFSET 31 +#define GFX_ARG_DRAW_YOFFSET 32 +#define GFX_ARG_DRAW_MASKED 33 +#define GFX_ARG_DRAW_ORDER 34 +#define GFX_ARG_INIT_DELAY_FIXED 35 +#define GFX_ARG_INIT_DELAY_RANDOM 36 +#define GFX_ARG_ANIM_DELAY_FIXED 37 +#define GFX_ARG_ANIM_DELAY_RANDOM 38 +#define GFX_ARG_POST_DELAY_FIXED 39 +#define GFX_ARG_POST_DELAY_RANDOM 40 +#define GFX_ARG_NAME 41 +#define GFX_ARG_SCALE_UP_FACTOR 42 +#define GFX_ARG_TILE_SIZE 43 +#define GFX_ARG_CLONE_FROM 44 +#define GFX_ARG_FADE_MODE 45 +#define GFX_ARG_FADE_DELAY 46 +#define GFX_ARG_POST_DELAY 47 +#define GFX_ARG_AUTO_DELAY 48 +#define GFX_ARG_ALIGN 49 +#define GFX_ARG_VALIGN 50 +#define GFX_ARG_SORT_PRIORITY 51 +#define GFX_ARG_CLASS 52 +#define GFX_ARG_STYLE 53 +#define GFX_ARG_ACTIVE_XOFFSET 54 +#define GFX_ARG_ACTIVE_YOFFSET 55 +#define GFX_ARG_PRESSED_XOFFSET 56 +#define GFX_ARG_PRESSED_YOFFSET 57 + +#define NUM_GFX_ARGS 58 /* values for sound configuration suffixes */ @@ -2010,57 +1959,83 @@ #define FONT_INPUT_2_ACTIVE 24 #define FONT_INPUT_1 25 #define FONT_INPUT_2 26 -#define FONT_OPTION_OFF 27 -#define FONT_OPTION_ON 28 -#define FONT_VALUE_1 29 -#define FONT_VALUE_2 30 -#define FONT_VALUE_OLD 31 -#define FONT_LEVEL_NUMBER_ACTIVE 32 -#define FONT_LEVEL_NUMBER 33 -#define FONT_TAPE_RECORDER 34 -#define FONT_GAME_INFO 35 -#define FONT_INFO_ELEMENTS 36 -#define FONT_INFO_LEVELSET 37 - -#define NUM_FONTS 38 +#define FONT_OPTION_OFF_NARROW 27 +#define FONT_OPTION_OFF 28 +#define FONT_OPTION_ON_NARROW 29 +#define FONT_OPTION_ON 30 +#define FONT_VALUE_1 31 +#define FONT_VALUE_2 32 +#define FONT_VALUE_OLD 33 +#define FONT_VALUE_NARROW 34 +#define FONT_LEVEL_NUMBER_ACTIVE 35 +#define FONT_LEVEL_NUMBER 36 +#define FONT_TAPE_RECORDER 37 +#define FONT_GAME_INFO 38 +#define FONT_INFO_ELEMENTS 39 +#define FONT_INFO_LEVELSET 40 + +#define NUM_FONTS 41 #define NUM_INITIAL_FONTS 4 -#if 0 -#define FONT_ACTIVE(f) \ - ((f) == FONT_MENU_1 ? FONT_MENU_1_ACTIVE : \ - (f) == FONT_MENU_2 ? FONT_MENU_2_ACTIVE : \ - (f) == FONT_TEXT_1 ? FONT_TEXT_1_ACTIVE : \ - (f) == FONT_TEXT_2 ? FONT_TEXT_2_ACTIVE : \ - (f) == FONT_TEXT_3 ? FONT_TEXT_3_ACTIVE : \ - (f) == FONT_TEXT_4 ? FONT_TEXT_4_ACTIVE : \ - (f) == FONT_INPUT_1 ? FONT_INPUT_1_ACTIVE : \ - (f) == FONT_INPUT_2 ? FONT_INPUT_2_ACTIVE : \ - (f) == FONT_LEVEL_NUMBER ? FONT_LEVEL_NUMBER_ACTIVE : \ - (f)) -#endif +/* values for toon animation configuration */ +#define MAX_NUM_TOONS 20 + +/* values for global animation configuration (must match those from main.c) */ +#define NUM_GLOBAL_ANIMS 8 +#define NUM_GLOBAL_ANIM_PARTS 8 +#define NUM_GLOBAL_ANIM_PARTS_ALL (NUM_GLOBAL_ANIM_PARTS + 1) +#define NUM_GLOBAL_ANIM_TOKENS (2 * NUM_GLOBAL_ANIMS) + +#define GLOBAL_ANIM_ID_GRAPHIC_FIRST 0 +#define GLOBAL_ANIM_ID_GRAPHIC_LAST 7 +#define GLOBAL_ANIM_ID_CONTROL_FIRST (NUM_GLOBAL_ANIMS + 0) +#define GLOBAL_ANIM_ID_CONTROL_LAST (NUM_GLOBAL_ANIMS + 7) + +#define GLOBAL_ANIM_ID_PART_FIRST 0 +#define GLOBAL_ANIM_ID_PART_LAST 7 +#define GLOBAL_ANIM_ID_PART_BASE 8 + +/* values for global border graphics */ +#define IMG_GLOBAL_BORDER_FIRST IMG_GLOBAL_BORDER +#define IMG_GLOBAL_BORDER_LAST IMG_GLOBAL_BORDER_PLAYING /* values for game_status (must match special image configuration suffixes) */ #define GAME_MODE_DEFAULT 0 #define GAME_MODE_LOADING 1 #define GAME_MODE_TITLE_INITIAL 2 -#define GAME_MODE_TITLE 3 -#define GAME_MODE_MAIN 4 -#define GAME_MODE_LEVELS 5 -#define GAME_MODE_LEVELNR 6 -#define GAME_MODE_SCORES 7 -#define GAME_MODE_EDITOR 8 -#define GAME_MODE_INFO 9 -#define GAME_MODE_SETUP 10 -#define GAME_MODE_PLAYING 11 -#define GAME_MODE_PSEUDO_DOOR 12 -#define GAME_MODE_PSEUDO_TAPE 13 -#define GAME_MODE_PSEUDO_PANEL 14 -#define GAME_MODE_PSEUDO_PREVIEW 15 -#define GAME_MODE_PSEUDO_CRUMBLED 16 - -/* there are no special config file suffixes for these modes */ -#define GAME_MODE_PSEUDO_TYPENAME 17 -#define GAME_MODE_QUIT 18 +#define GAME_MODE_TITLE_INITIAL_1 3 +#define GAME_MODE_TITLE_INITIAL_2 4 +#define GAME_MODE_TITLE_INITIAL_3 5 +#define GAME_MODE_TITLE_INITIAL_4 6 +#define GAME_MODE_TITLE_INITIAL_5 7 +#define GAME_MODE_TITLE 8 +#define GAME_MODE_TITLE_1 9 +#define GAME_MODE_TITLE_2 10 +#define GAME_MODE_TITLE_3 11 +#define GAME_MODE_TITLE_4 12 +#define GAME_MODE_TITLE_5 13 +#define GAME_MODE_MAIN 14 +#define GAME_MODE_LEVELS 15 +#define GAME_MODE_LEVELNR 16 +#define GAME_MODE_SCORES 17 +#define GAME_MODE_EDITOR 18 +#define GAME_MODE_INFO 19 +#define GAME_MODE_SETUP 20 +#define GAME_MODE_PLAYING 21 +#define GAME_MODE_PSEUDO_DOOR 22 +#define GAME_MODE_PSEUDO_TAPE 23 +#define GAME_MODE_PSEUDO_PANEL 24 +#define GAME_MODE_PSEUDO_PREVIEW 25 +#define GAME_MODE_PSEUDO_CRUMBLED 26 +#define GAME_MODE_PSEUDO_MAINONLY 27 +#define GAME_MODE_PSEUDO_TYPENAME 28 +#define GAME_MODE_PSEUDO_SUBMENU 29 +#define GAME_MODE_PSEUDO_MENU 30 +#define GAME_MODE_PSEUDO_TOONS 31 +#define GAME_MODE_PSEUDO_FADING 32 +#define GAME_MODE_QUIT 33 + +#define NUM_GAME_MODES 34 /* special definitions currently only used for custom artwork configuration */ #define MUSIC_PREFIX_BACKGROUND 0 @@ -2072,49 +2047,24 @@ /* program information and versioning definitions */ -#define PROGRAM_VERSION_MAJOR 3 -#define PROGRAM_VERSION_MINOR 3 -#define PROGRAM_VERSION_PATCH 1 -#define PROGRAM_VERSION_BUILD 3 +#define PROGRAM_VERSION_MAJOR 4 +#define PROGRAM_VERSION_MINOR 0 +#define PROGRAM_VERSION_PATCH 0 +#define PROGRAM_VERSION_BUILD 0 +#define PROGRAM_VERSION_EXTRA "" #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" -#define PROGRAM_COPYRIGHT_STRING "Copyright ©1995-2014 by Holger Schemel" #define PROGRAM_EMAIL_STRING "info@artsoft.org" #define PROGRAM_WEBSITE_STRING "http://www.artsoft.org/" -#define PROGRAM_GAME_BY_STRING "A Game by Artsoft Entertainment" -#define PROGRAM_UNIX_DATADIR_STRING ".rocksndiamonds" - -#if defined(CREATE_SPECIAL_EDITION_RND_JUE) -#undef PROGRAM_TITLE_STRING -#define PROGRAM_TITLE_STRING "R'n'D jue" -#undef PROGRAM_UNIX_DATADIR_STRING -#define PROGRAM_UNIX_DATADIR_STRING ".rnd_jue" -#endif +#define PROGRAM_COPYRIGHT_STRING "Copyright \xa9""1995-2016 by Holger Schemel" +#define PROGRAM_COMPANY_STRING "A Game by Artsoft Entertainment" + +#define PROGRAM_ICON_FILENAME "RocksIcon32x32.png" -#define ICON_TITLE_STRING PROGRAM_TITLE_STRING #define COOKIE_PREFIX "ROCKSNDIAMONDS" -#define FILENAME_PREFIX "Rocks" - -#define USERDATA_DIRECTORY_WIN32 PROGRAM_TITLE_STRING -#define USERDATA_DIRECTORY_MACOSX PROGRAM_TITLE_STRING -#define USERDATA_DIRECTORY_UNIX PROGRAM_UNIX_DATADIR_STRING -#define USERDATA_DIRECTORY_DOS "userdata" - -#if defined(PLATFORM_WIN32) -#define USERDATA_DIRECTORY USERDATA_DIRECTORY_WIN32 -#elif defined(PLATFORM_MACOSX) -#define USERDATA_DIRECTORY USERDATA_DIRECTORY_MACOSX -#elif defined(PLATFORM_UNIX) -#define USERDATA_DIRECTORY USERDATA_DIRECTORY_UNIX -#else -#define USERDATA_DIRECTORY USERDATA_DIRECTORY_DOS -#endif -#define X11_ICON_FILENAME "rocks_icon.xbm" -#define X11_ICONMASK_FILENAME "rocks_iconmask.xbm" -#define SDL_ICON_FILENAME "RocksIcon32x32.png" -#define MSDOS_POINTER_FILENAME "mouse.pcx" +#define USERDATA_DIRECTORY_OTHER "userdata" /* file version numbers for resource files (levels, tapes, score, setup, etc.) ** currently supported/known file version numbers: @@ -2171,6 +2121,21 @@ #define NUM_ENGINE_TYPES 4 +/* values for automatically playing tapes */ +#define AUTOPLAY_NONE 0 +#define AUTOPLAY_PLAY (1 << 0) +#define AUTOPLAY_FFWD (1 << 1) +#define AUTOPLAY_WARP (1 << 2) +#define AUTOPLAY_TEST (1 << 3) +#define AUTOPLAY_WARP_NO_DISPLAY AUTOPLAY_TEST + +#define AUTOPLAY_MODE_NONE 0 +#define AUTOPLAY_MODE_PLAY (AUTOPLAY_MODE_NONE | AUTOPLAY_PLAY) +#define AUTOPLAY_MODE_FFWD (AUTOPLAY_MODE_PLAY | AUTOPLAY_FFWD) +#define AUTOPLAY_MODE_WARP (AUTOPLAY_MODE_FFWD | AUTOPLAY_WARP) +#define AUTOPLAY_MODE_TEST (AUTOPLAY_MODE_WARP | AUTOPLAY_TEST) +#define AUTOPLAY_MODE_WARP_NO_DISPLAY AUTOPLAY_MODE_TEST + struct BorderInfo { @@ -2286,12 +2251,13 @@ struct MenuInfo int scrollbar_xoffset; int list_size[NUM_SPECIAL_GFX_ARGS]; + int list_size_info[NUM_SPECIAL_GFX_INFO_ARGS]; struct TitleFadingInfo enter_menu; struct TitleFadingInfo leave_menu; struct TitleFadingInfo enter_screen[NUM_SPECIAL_GFX_ARGS]; struct TitleFadingInfo leave_screen[NUM_SPECIAL_GFX_ARGS]; - struct TitleFadingInfo next_screen; + struct TitleFadingInfo next_screen[NUM_SPECIAL_GFX_ARGS]; int sound[NUM_SPECIAL_GFX_ARGS]; int music[NUM_SPECIAL_GFX_ARGS]; @@ -2329,6 +2295,8 @@ struct RequestInfo int step_offset; int step_delay; int anim_mode; + int align; + int valign; boolean autowrap; boolean centered; boolean wrap_single_words; @@ -2346,24 +2314,117 @@ struct PreviewInfo int anim_mode; }; +struct EditorTabsInfo +{ + int x; + int y; + int yoffset2; + int width; + int height; + int draw_xoffset; + int draw_yoffset; +}; + +struct EditorSettingsInfo +{ + struct MenuPosInfo headline; + + struct XY element_graphic; + struct XY element_name; + + struct EditorTabsInfo tabs; +}; + +struct EditorGadgetInfo +{ + int normal_spacing; + int small_spacing; + int tiny_spacing; + int line_spacing; + int text_spacing; + int tab_spacing; + + struct Rect separator_line; +}; + +struct EditorButtonInfo +{ + struct XYTileSize prev_level; + struct XYTileSize next_level; + + struct XYTileSize properties; + struct XYTileSize element_left; + struct XYTileSize element_middle; + struct XYTileSize element_right; + struct XYTileSize palette; + + struct XYTileSize draw_single; + struct XYTileSize draw_connected; + struct XYTileSize draw_line; + struct XYTileSize draw_arc; + struct XYTileSize draw_rectangle; + struct XYTileSize draw_filled_box; + struct XYTileSize rotate_up; + struct XYTileSize draw_text; + struct XYTileSize flood_fill; + struct XYTileSize rotate_left; + struct XYTileSize zoom_level; + struct XYTileSize rotate_right; + struct XYTileSize draw_random; + struct XYTileSize grab_brush; + struct XYTileSize rotate_down; + struct XYTileSize pick_element; + + struct XYTileSize ce_copy_from; + struct XYTileSize ce_copy_to; + struct XYTileSize ce_swap; + struct XYTileSize ce_copy; + struct XYTileSize ce_paste; + + struct XYTileSize undo; + struct XYTileSize conf; + struct XYTileSize save; + struct XYTileSize clear; + struct XYTileSize test; + struct XYTileSize exit; +}; + +struct EditorInputInfo +{ + struct XY level_number; +}; + struct EditorPaletteInfo { int x, y; int cols, rows; + int tile_size; + boolean show_as_separate_screen; + boolean show_on_element_buttons; - struct XY element_left; - struct XY element_middle; - struct XY element_right; + struct XYTileSize element_left; + struct XYTileSize element_middle; + struct XYTileSize element_right; +}; + +struct EditorDrawingAreaInfo +{ + int tile_size; }; struct EditorInfo { + struct EditorSettingsInfo settings; + struct EditorGadgetInfo gadget; + struct EditorButtonInfo button; + struct EditorInputInfo input; struct EditorPaletteInfo palette; + struct EditorDrawingAreaInfo drawingarea; }; struct ViewportInfo { - struct RectWithBorder window; + struct RectWithBorder window[NUM_SPECIAL_GFX_ARGS]; struct RectWithBorder playfield[NUM_SPECIAL_GFX_ARGS]; struct RectWithBorder door_1[NUM_SPECIAL_GFX_ARGS]; struct RectWithBorder door_2[NUM_SPECIAL_GFX_ARGS]; @@ -2517,6 +2578,7 @@ struct LevelInfo boolean use_time_orb_bug; /* for compatibility with old levels */ boolean instant_relocation; /* no visual delay when relocating player */ boolean shifted_relocation; /* no level centering when relocating player */ + boolean lazy_relocation; /* only redraw off-screen player relocation */ boolean can_pass_to_walkable; /* player can pass to empty or walkable tile */ boolean grow_into_diggable; /* amoeba can grow into anything diggable */ boolean auto_exit_sokoban; /* automatically finish solved Sokoban levels */ @@ -2546,6 +2608,7 @@ struct GlobalInfo char *autoplay_leveldir; int autoplay_level[MAX_TAPES_PER_SET]; boolean autoplay_all; + boolean autoplay_mode; char *convert_leveldir; int convert_level_nr; @@ -2555,15 +2618,13 @@ struct GlobalInfo int num_toons; float frames_per_second; - boolean fps_slowdown; - int fps_slowdown_factor; /* global values for fading screens and masking borders */ int border_status; -#if 0 - int fading_status; - int fading_type; -#endif + + /* values for global animations */ + int anim_status; + int anim_status_next; boolean use_envelope_request; }; @@ -2767,9 +2828,23 @@ struct FontInfo /* internal bitmap ID for special graphics */ }; +struct GlobalAnimInfo +{ + char *token_name; /* global animation token in config files */ + + /* global animation graphic and control definitions */ + int graphic[NUM_GLOBAL_ANIM_PARTS_ALL][NUM_SPECIAL_GFX_ARGS]; + + /* global animation sound and music definitions */ + int sound[NUM_GLOBAL_ANIM_PARTS_ALL][NUM_SPECIAL_GFX_ARGS]; + int music[NUM_GLOBAL_ANIM_PARTS_ALL][NUM_SPECIAL_GFX_ARGS]; +}; + struct GraphicInfo { - Bitmap *bitmap; + Bitmap **bitmaps; /* bitmaps in all required sizes */ + Bitmap *bitmap; /* bitmap in default size */ + int src_image_width; /* scaled bitmap size, but w/o small images */ int src_image_height; /* scaled bitmap size, but w/o small images */ @@ -2796,21 +2871,31 @@ struct GraphicInfo int border_size; /* border size for "crumbled" graphics */ int scale_up_factor; /* optional factor for scaling image up */ + int tile_size; /* optional explicitly defined tile size */ int clone_from; /* graphic for cloning *all* settings */ - int anim_delay_fixed; /* optional delay values for bored and */ - int anim_delay_random; /* sleeping player animations (animation */ - int post_delay_fixed; /* intervall and following pause before */ - int post_delay_random; /* next intervall (bored animation only) */ + int init_delay_fixed; /* optional initial delay values for global */ + int init_delay_random; /* animations (pause interval before start) */ + int anim_delay_fixed; /* optional delay values for bored/sleeping */ + int anim_delay_random; /* and global animations (animation length) */ + int post_delay_fixed; /* optional delay values after bored/global */ + int post_delay_random; /* animations (pause before next animation) */ int step_offset; /* optional step offset of toon animations */ + int step_xoffset; /* optional step offset of toon animations */ + int step_yoffset; /* optional step offset of toon animations */ int step_delay; /* optional step delay of toon animations */ + int direction; /* optional move direction of toon animations */ + int position; /* optional draw position of toon animations */ + int x; /* optional draw position of toon animations */ + int y; /* optional draw position of toon animations */ int draw_xoffset; /* optional offset for drawing font chars */ int draw_yoffset; /* optional offset for drawing font chars */ int draw_masked; /* optional setting for drawing envelope gfx */ + int draw_order; /* optional draw order for global animations */ int fade_mode; /* optional setting for drawing title screens */ int fade_delay; /* optional setting for drawing title screens */ @@ -2828,11 +2913,6 @@ struct GraphicInfo int pressed_yoffset; boolean use_image_size; /* use image size as default width and height */ - -#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) - Pixmap clip_mask; /* single-graphic-only clip mask for X11 */ - GC clip_gc; /* single-graphic-only clip gc for X11 */ -#endif }; struct SoundInfo @@ -2903,21 +2983,17 @@ struct HelpAnimInfo }; -extern Bitmap *bitmap_db_store; -extern Bitmap *bitmap_db_cross; extern Bitmap *bitmap_db_field; extern Bitmap *bitmap_db_panel; -#if 0 -extern Bitmap *bitmap_db_door; -#endif extern Bitmap *bitmap_db_door_1; extern Bitmap *bitmap_db_door_2; -extern Bitmap *bitmap_db_toons; -extern Pixmap tile_clipmask[]; +extern Bitmap *bitmap_db_store_1; +extern Bitmap *bitmap_db_store_2; extern DrawBuffer *fieldbuffer; extern DrawBuffer *drawto_field; extern int game_status; +extern boolean game_status_last_screen; extern boolean level_editor_test_game; extern boolean network_playing; @@ -2928,17 +3004,6 @@ extern SDL_Thread *server_thread; extern int key_joystick_mapping; -#if 1 -#if NEW_SCROLL -extern boolean redraw[2 + MAX_LEV_FIELDX + 2][2 + MAX_LEV_FIELDY + 2]; -#else -extern boolean redraw[MAX_LEV_FIELDX + 2][MAX_LEV_FIELDY + 2]; -#endif -#else -extern boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; -#endif -extern int redraw_x1, redraw_y1; - extern short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -2996,10 +3061,14 @@ extern int VXSIZE, VYSIZE; extern int EXSIZE, EYSIZE; extern int TILESIZE_VAR; +extern int FADE_SX, FADE_SY; +extern int FADE_SXSIZE, FADE_SYSIZE; + extern int FX, FY; extern int ScrollStepSize; extern int ScreenMovDir, ScreenMovPos, ScreenGfxPos; extern int BorderElement; +extern int MenuFrameDelay; extern int GameFrameDelay; extern int FfwdFrameDelay; extern int BX1, BY1; @@ -3025,10 +3094,24 @@ extern struct BorderInfo border; extern struct ViewportInfo viewport; extern struct TitleFadingInfo fading; extern struct TitleFadingInfo fading_none; +extern struct TitleFadingInfo title_initial_first_default; extern struct TitleFadingInfo title_initial_default; +extern struct TitleFadingInfo title_first_default; extern struct TitleFadingInfo title_default; +extern struct TitleMessageInfo titlescreen_initial_first_default; +extern struct TitleMessageInfo titlescreen_initial_first[]; +extern struct TitleMessageInfo titlescreen_initial_default; +extern struct TitleMessageInfo titlescreen_initial[]; +extern struct TitleMessageInfo titlescreen_first_default; +extern struct TitleMessageInfo titlescreen_first[]; +extern struct TitleMessageInfo titlescreen_default; +extern struct TitleMessageInfo titlescreen[]; +extern struct TitleMessageInfo titlemessage_initial_first_default; +extern struct TitleMessageInfo titlemessage_initial_first[]; extern struct TitleMessageInfo titlemessage_initial_default; extern struct TitleMessageInfo titlemessage_initial[]; +extern struct TitleMessageInfo titlemessage_first_default; +extern struct TitleMessageInfo titlemessage_first[]; extern struct TitleMessageInfo titlemessage_default; extern struct TitleMessageInfo titlemessage[]; extern struct TitleMessageInfo readme; @@ -3045,6 +3128,7 @@ extern struct ElementDirectionInfo element_direction_info[]; extern struct SpecialSuffixInfo special_suffix_info[]; extern struct TokenIntPtrInfo image_config_vars[]; extern struct FontInfo font_info[]; +extern struct GlobalAnimInfo global_anim_info[]; extern struct MusicPrefixInfo music_prefix_info[]; extern struct GraphicInfo *graphic_info; extern struct SoundInfo *sound_info;