X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=3f88801ccdb440ae79b8d6671371a41cebb798b2;hb=695b9e3d2e2ee94c93d2e804aa3c23dd34f68a25;hp=1e62cc61186a8ab658c32be77c43875a7ff6d2ab;hpb=872cf2d86e73d185fcad1fac7b389e7d1dfcb839;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 1e62cc61..3f88801c 100644 --- a/src/main.h +++ b/src/main.h @@ -108,6 +108,7 @@ #define EP_THROWABLE 28 #define EP_CAN_EXPLODE 29 #define EP_GRAVITY_REACHABLE 30 +#define EP_DONT_GET_HIT_BY 31 /* values for pre-defined properties */ /* (from here on, values can be changed by inserting new values) */ @@ -548,6 +549,7 @@ #define IS_THROWABLE(e) HAS_PROPERTY(e, EP_THROWABLE) #define CAN_EXPLODE(e) HAS_PROPERTY(e, EP_CAN_EXPLODE) #define IS_GRAVITY_REACHABLE(e) HAS_PROPERTY(e, EP_GRAVITY_REACHABLE) +#define DONT_GET_HIT_BY(e) HAS_PROPERTY(e, EP_DONT_GET_HIT_BY) /* macros for special configurable properties */ #define IS_EM_SLIPPERY_WALL(e) HAS_PROPERTY(e, EP_EM_SLIPPERY_WALL) @@ -625,6 +627,18 @@ #define IS_OBSOLETE(e) HAS_PROPERTY(e, EP_OBSOLETE) /* special macros used in game engine */ +#define IS_FILE_ELEMENT(e) ((e) >= 0 && \ + (e) <= NUM_FILE_ELEMENTS) + +#define IS_DRAWABLE_ELEMENT(e) ((e) >= 0 && \ + (e) <= NUM_DRAWABLE_ELEMENTS) + +#define IS_RUNTIME_ELEMENT(e) ((e) >= 0 && \ + (e) <= NUM_RUNTIME_ELEMENTS) + +#define IS_VALID_ELEMENT(e) ((e) >= 0 && \ + (e) <= MAX_NUM_ELEMENTS) + #define IS_CUSTOM_ELEMENT(e) ((e) >= EL_CUSTOM_START && \ (e) <= EL_CUSTOM_END) @@ -839,7 +853,7 @@ (d) == MV_DOWN ? "MV_DOWN" : "(various)") #define ELEMENT_ACTIVE(e) (ActiveElement[e]) - +#define BUTTON_ACTIVE(b) (ActiveButton[b]) #define FONT_ACTIVE(f) (ActiveFont[f]) @@ -917,6 +931,12 @@ #define MICROLABEL1_YPOS (MICROLEVEL_YPOS - 36) #define MICROLABEL2_YPOS (MICROLEVEL_YPOS + MICROLEVEL_YSIZE + 7) +/* values for GfxRedraw */ +#define GFX_REDRAW_NONE (0) +#define GFX_REDRAW_TILE (1 << 0) +#define GFX_REDRAW_TILE_CRUMBLED (1 << 1) +#define GFX_REDRAW_TILE_CRUMBLED_NEIGHBOURS (1 << 2) +#define GFX_REDRAW_TILE_TWINKLED (1 << 3) /* score for elements */ #define SC_EMERALD 0 @@ -1526,8 +1546,10 @@ #define EL_EMC_DRIPPER_ACTIVE (EL_FIRST_RUNTIME_REAL + 70) #define EL_EMC_SPRING_BUMPER_ACTIVE (EL_FIRST_RUNTIME_REAL + 71) +#define NUM_DRAWABLE_ELEMENTS (EL_FIRST_RUNTIME_REAL + 72) + /* "unreal" (and therefore not drawable) runtime elements */ -#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 72) +#define EL_FIRST_RUNTIME_UNREAL (NUM_DRAWABLE_ELEMENTS) #define EL_BLOCKED (EL_FIRST_RUNTIME_UNREAL + 0) #define EL_EXPLOSION (EL_FIRST_RUNTIME_UNREAL + 1) @@ -1584,9 +1606,17 @@ #define EL_BD_DEFAULT (EL_FIRST_DUMMY + 22) #define EL_SP_DEFAULT (EL_FIRST_DUMMY + 23) #define EL_SB_DEFAULT (EL_FIRST_DUMMY + 24) +#define EL_GRAPHIC_1 (EL_FIRST_DUMMY + 25) +#define EL_GRAPHIC_2 (EL_FIRST_DUMMY + 26) +#define EL_GRAPHIC_3 (EL_FIRST_DUMMY + 27) +#define EL_GRAPHIC_4 (EL_FIRST_DUMMY + 28) +#define EL_GRAPHIC_5 (EL_FIRST_DUMMY + 29) +#define EL_GRAPHIC_6 (EL_FIRST_DUMMY + 30) +#define EL_GRAPHIC_7 (EL_FIRST_DUMMY + 31) +#define EL_GRAPHIC_8 (EL_FIRST_DUMMY + 32) /* internal elements (only used for internal purposes like copying) */ -#define EL_FIRST_INTERNAL (EL_FIRST_DUMMY + 25) +#define EL_FIRST_INTERNAL (EL_FIRST_DUMMY + 33) #define EL_INTERNAL_CLIPBOARD_CUSTOM (EL_FIRST_INTERNAL + 0) #define EL_INTERNAL_CLIPBOARD_CHANGE (EL_FIRST_INTERNAL + 1) @@ -1727,21 +1757,22 @@ /* values for special image configuration suffixes (must match game mode) */ #define GFX_SPECIAL_ARG_DEFAULT 0 -#define GFX_SPECIAL_ARG_TITLE_INITIAL 1 -#define GFX_SPECIAL_ARG_TITLE 2 -#define GFX_SPECIAL_ARG_MAIN 3 -#define GFX_SPECIAL_ARG_LEVELS 4 -#define GFX_SPECIAL_ARG_SCORES 5 -#define GFX_SPECIAL_ARG_EDITOR 6 -#define GFX_SPECIAL_ARG_INFO 7 -#define GFX_SPECIAL_ARG_SETUP 8 -#define GFX_SPECIAL_ARG_PLAYING 9 -#define GFX_SPECIAL_ARG_DOOR 10 -#define GFX_SPECIAL_ARG_PANEL 11 -#define GFX_SPECIAL_ARG_PREVIEW 12 -#define GFX_SPECIAL_ARG_CRUMBLED 13 - -#define NUM_SPECIAL_GFX_ARGS 14 +#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_SCORES 6 +#define GFX_SPECIAL_ARG_EDITOR 7 +#define GFX_SPECIAL_ARG_INFO 8 +#define GFX_SPECIAL_ARG_SETUP 9 +#define GFX_SPECIAL_ARG_PLAYING 10 +#define GFX_SPECIAL_ARG_DOOR 11 +#define GFX_SPECIAL_ARG_PANEL 12 +#define GFX_SPECIAL_ARG_PREVIEW 13 +#define GFX_SPECIAL_ARG_CRUMBLED 14 + +#define NUM_SPECIAL_GFX_ARGS 15 /* these additional definitions are currently only used for draw offsets */ #define GFX_SPECIAL_ARG_INFO_MAIN 0 @@ -1755,6 +1786,21 @@ #define NUM_SPECIAL_GFX_INFO_ARGS 8 +/* these additional definitions are currently only used for draw offsets */ +#define GFX_SPECIAL_ARG_SETUP_MAIN 0 +#define GFX_SPECIAL_ARG_SETUP_GAME 1 +#define GFX_SPECIAL_ARG_SETUP_EDITOR 2 +#define GFX_SPECIAL_ARG_SETUP_GRAPHICS 3 +#define GFX_SPECIAL_ARG_SETUP_SOUND 4 +#define GFX_SPECIAL_ARG_SETUP_ARTWORK 5 +#define GFX_SPECIAL_ARG_SETUP_INPUT 6 +#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_1 7 +#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_2 8 +#define GFX_SPECIAL_ARG_SETUP_CHOOSE_ARTWORK 9 +#define GFX_SPECIAL_ARG_SETUP_CHOOSE_OTHER 10 + +#define NUM_SPECIAL_GFX_SETUP_ARGS 11 + /* values for image configuration suffixes */ #define GFX_ARG_X 0 @@ -1879,23 +1925,24 @@ /* values for game_status (must match special image configuration suffixes) */ #define GAME_MODE_DEFAULT 0 -#define GAME_MODE_TITLE_INITIAL 1 -#define GAME_MODE_TITLE 2 -#define GAME_MODE_MAIN 3 -#define GAME_MODE_LEVELS 4 -#define GAME_MODE_SCORES 5 -#define GAME_MODE_EDITOR 6 -#define GAME_MODE_INFO 7 -#define GAME_MODE_SETUP 8 -#define GAME_MODE_PLAYING 9 -#define GAME_MODE_PSEUDO_DOOR 10 -#define GAME_MODE_PSEUDO_PANEL 11 -#define GAME_MODE_PSEUDO_PREVIEW 12 -#define GAME_MODE_PSEUDO_CRUMBLED 13 +#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_SCORES 6 +#define GAME_MODE_EDITOR 7 +#define GAME_MODE_INFO 8 +#define GAME_MODE_SETUP 9 +#define GAME_MODE_PLAYING 10 +#define GAME_MODE_PSEUDO_DOOR 11 +#define GAME_MODE_PSEUDO_PANEL 12 +#define GAME_MODE_PSEUDO_PREVIEW 13 +#define GAME_MODE_PSEUDO_CRUMBLED 14 /* there are no special config file suffixes for these modes */ -#define GAME_MODE_PSEUDO_TYPENAME 14 -#define GAME_MODE_QUIT 15 +#define GAME_MODE_PSEUDO_TYPENAME 15 +#define GAME_MODE_QUIT 16 /* special definitions currently only used for custom artwork configuration */ #define MUSIC_PREFIX_BACKGROUND 0 @@ -1910,15 +1957,23 @@ /* program information and versioning definitions */ #define PROGRAM_VERSION_MAJOR 3 #define PROGRAM_VERSION_MINOR 2 -#define PROGRAM_VERSION_PATCH 4 +#define PROGRAM_VERSION_PATCH 5 #define PROGRAM_VERSION_BUILD 0 #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" -#define PROGRAM_COPYRIGHT_STRING "Copyright ©1995-2006 by Holger Schemel" +#define PROGRAM_COPYRIGHT_STRING "Copyright ©1995-2008 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 ICON_TITLE_STRING PROGRAM_TITLE_STRING #define COOKIE_PREFIX "ROCKSNDIAMONDS" @@ -1926,7 +1981,7 @@ #define USERDATA_DIRECTORY_WIN32 PROGRAM_TITLE_STRING #define USERDATA_DIRECTORY_MACOSX PROGRAM_TITLE_STRING -#define USERDATA_DIRECTORY_UNIX ".rocksndiamonds" +#define USERDATA_DIRECTORY_UNIX PROGRAM_UNIX_DATADIR_STRING #define USERDATA_DIRECTORY_DOS "userdata" #if defined(PLATFORM_WIN32) @@ -2002,6 +2057,7 @@ struct BorderInfo { boolean draw_masked[NUM_SPECIAL_GFX_ARGS]; + boolean draw_masked_when_fading; }; struct MenuMainButtonInfo @@ -2084,12 +2140,19 @@ struct TitleMessageInfo int auto_delay; }; +struct InitInfo +{ + struct MenuPosInfo busy; +}; + struct MenuInfo { int draw_xoffset[NUM_SPECIAL_GFX_ARGS]; int draw_yoffset[NUM_SPECIAL_GFX_ARGS]; int draw_xoffset_info[NUM_SPECIAL_GFX_INFO_ARGS]; int draw_yoffset_info[NUM_SPECIAL_GFX_INFO_ARGS]; + int draw_xoffset_setup[NUM_SPECIAL_GFX_SETUP_ARGS]; + int draw_yoffset_setup[NUM_SPECIAL_GFX_SETUP_ARGS]; int scrollbar_xoffset; @@ -2099,6 +2162,7 @@ struct MenuInfo struct TitleFadingInfo leave_menu; struct TitleFadingInfo enter_screen[NUM_SPECIAL_GFX_ARGS]; struct TitleFadingInfo leave_screen[NUM_SPECIAL_GFX_ARGS]; + struct TitleFadingInfo next_screen; int sound[NUM_SPECIAL_GFX_ARGS]; int music[NUM_SPECIAL_GFX_ARGS]; @@ -2290,11 +2354,20 @@ struct GlobalInfo char *convert_leveldir; int convert_level_nr; + char *create_images_dir; + 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 }; struct ElementChangeInfo @@ -2313,7 +2386,7 @@ struct ElementChangeInfo int delay_random; /* added frame delay before changed (random) */ int delay_frames; /* either 1 (frames) or 50 (seconds; 50 fps) */ - int trigger_element; /* element triggering change */ + int initial_trigger_element; /* initial element triggering change */ struct Content target_content;/* elements for extended change target */ boolean use_target_content; /* use extended change target */ @@ -2331,6 +2404,8 @@ struct ElementChangeInfo /* ---------- internal values used at runtime when playing ---------- */ + int trigger_element; /* element triggering change */ + /* functions that are called before, while and after the change of an element -- currently only used for non-custom elements */ void (*pre_change_function)(int x, int y); @@ -2340,6 +2415,7 @@ struct ElementChangeInfo short actual_trigger_element; /* element that actually triggered change */ int actual_trigger_side; /* element side that triggered the change */ int actual_trigger_player; /* player which actually triggered change */ + int actual_trigger_player_bits; /* player bits of triggering players */ int actual_trigger_ce_value; /* CE value of element that triggered change */ int actual_trigger_ce_score; /* CE score of element that triggered change */ @@ -2460,6 +2536,9 @@ struct ElementInfo int collect_score; /* runtime score value for collecting */ + /* count of this element on playfield, calculated after each frame */ + int element_count; + /* ---------- internal values used in level editor ---------- */ int access_type; /* walkable or passable */ @@ -2619,6 +2698,7 @@ extern Bitmap *bitmap_db_cross; extern Bitmap *bitmap_db_field; extern Bitmap *bitmap_db_panel; extern Bitmap *bitmap_db_door; +extern Bitmap *bitmap_db_toons; extern Pixmap tile_clipmask[]; extern DrawBuffer *fieldbuffer; extern DrawBuffer *drawto_field; @@ -2670,8 +2750,10 @@ extern int GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int GfxDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern int GfxRedraw[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int ActiveElement[MAX_NUM_ELEMENTS]; +extern int ActiveButton[NUM_IMAGE_FILES]; extern int ActiveFont[NUM_FONTS]; extern int lev_fieldx, lev_fieldy; @@ -2712,6 +2794,7 @@ extern struct TitleMessageInfo titlemessage_initial[]; extern struct TitleMessageInfo titlemessage_default; extern struct TitleMessageInfo titlemessage[]; extern struct TitleMessageInfo readme; +extern struct InitInfo init; extern struct MenuInfo menu; extern struct DoorInfo door_1, door_2; extern struct PreviewInfo preview; @@ -2729,6 +2812,10 @@ extern struct MusicInfo *music_info; extern struct MusicFileInfo *music_file_info; extern struct HelpAnimInfo *helpanim_info; extern SetupFileHash *helptext_info; +extern SetupFileHash *image_config_hash; +extern SetupFileHash *element_token_hash; +extern SetupFileHash *graphic_token_hash; +extern SetupFileHash *font_token_hash; extern struct ConfigTypeInfo image_config_suffix[]; extern struct ConfigTypeInfo sound_config_suffix[]; extern struct ConfigTypeInfo music_config_suffix[];