X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=826d3d212b91f6c63441aad695167739eaf8d4a7;hb=166484d964e26008e82f3fea553d51288921bd96;hp=cf8cbe7f23fb599317602d1402e46b380a90c88f;hpb=b71346a299000d7005f8198fa63c89f3799dbc49;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index cf8cbe7f..826d3d21 100644 --- a/src/main.h +++ b/src/main.h @@ -674,9 +674,44 @@ #define IS_INTERNAL_ELEMENT(e) ((e) >= EL_INTERNAL_START && \ (e) <= EL_INTERNAL_END) +#define IS_MM_ELEMENT(e) ((e) >= EL_MM_START && \ + (e) <= EL_MM_END) + +#define IS_DF_ELEMENT(e) ((e) >= EL_DF_START && \ + (e) <= EL_DF_END) + +#define IS_MM_MCDUFFIN(e) ((e) >= EL_MM_MCDUFFIN_START && \ + (e) <= EL_MM_MCDUFFIN_END) + +#define IS_DF_LASER(e) ((e) >= EL_DF_LASER_START && \ + (e) <= EL_DF_LASER_END) + +#define IS_MM_WALL(e) (((e) >= EL_MM_WALL_START && \ + (e) <= EL_MM_WALL_END) || \ + ((e) >= EL_DF_WALL_START && \ + (e) <= EL_DF_WALL_END)) + +#define IS_DF_WALL(e) ((e) >= EL_DF_WALL_START && \ + (e) <= EL_DF_WALL_END) + +#define IS_MM_WALL_EDITOR(e) ((e) == EL_MM_STEEL_WALL || \ + (e) == EL_MM_WOODEN_WALL || \ + (e) == EL_MM_ICE_WALL || \ + (e) == EL_MM_AMOEBA_WALL || \ + (e) == EL_DF_STEEL_WALL || \ + (e) == EL_DF_WOODEN_WALL) + #define IS_ENVELOPE(e) ((e) >= EL_ENVELOPE_1 && \ (e) <= EL_ENVELOPE_4) +#define IS_BALLOON_ELEMENT(e) ((e) == EL_BALLOON || \ + (e) == EL_BALLOON_SWITCH_LEFT || \ + (e) == EL_BALLOON_SWITCH_RIGHT || \ + (e) == EL_BALLOON_SWITCH_UP || \ + (e) == EL_BALLOON_SWITCH_DOWN || \ + (e) == EL_BALLOON_SWITCH_ANY || \ + (e) == EL_BALLOON_SWITCH_NONE) + #define IS_RND_KEY(e) ((e) >= EL_KEY_1 && \ (e) <= EL_KEY_4) #define IS_EM_KEY(e) ((e) >= EL_EM_KEY_1 && \ @@ -763,6 +798,9 @@ #define IS_DC_STEELWALL_2(e) ((e) >= EL_DC_STEELWALL_2_LEFT && \ (e) <= EL_DC_STEELWALL_2_SINGLE) +#define MM_WALL_BASE(e) ((e) & 0xfff0) +#define MM_WALL_BITS(e) ((e) & 0x000f) + #define GFX_ELEMENT(e) (element_info[e].gfx_element) /* !!! CHECK THIS !!! */ @@ -1487,6 +1525,8 @@ #define EL_FROM_LEVEL_TEMPLATE 863 #define EL_MM_START 864 +#define EL_MM_START_1 EL_MM_START + #define EL_MM_EMPTY_SPACE (EL_MM_START + 0) #define EL_MM_EMPTY EL_MM_EMPTY_SPACE #define EL_MM_MIRROR_START (EL_MM_START + 1) @@ -1618,7 +1658,15 @@ #define EL_MM_WOODEN_GRID_FIXED_END EL_MM_WOODEN_GRID_FIXED_03 #define EL_MM_FUEL_EMPTY (EL_MM_START + 155) -#define EL_DF_START (EL_MM_START + 156) +#define EL_MM_UNUSED_156 (EL_MM_START + 156) +#define EL_MM_UNUSED_157 (EL_MM_START + 157) +#define EL_MM_UNUSED_158 (EL_MM_START + 158) +#define EL_MM_UNUSED_159 (EL_MM_START + 159) + +#define EL_MM_END_1 (EL_MM_START + 159) +#define EL_MM_START_2 (EL_MM_START + 160) + +#define EL_DF_START EL_MM_START_2 #define EL_DF_START2 (EL_DF_START - 240) #define EL_DF_MIRROR_START EL_DF_START @@ -1817,21 +1865,22 @@ #define EL_MM_BEAMER_BLUE_16 (EL_MM_BEAMER_BLUE_START + 15) #define EL_MM_BEAMER_BLUE_END EL_MM_BEAMER_BLUE_16 -#define EL_MM_MCDUFFIN 1200 -#define EL_MM_PACMAN 1201 -#define EL_MM_FUSE 1202 -#define EL_MM_STEEL_WALL 1203 -#define EL_MM_WOODEN_WALL 1204 -#define EL_MM_ICE_WALL 1205 -#define EL_MM_AMOEBA_WALL 1206 -#define EL_DF_LASER 1207 -#define EL_DF_RECEIVER 1208 -#define EL_DF_STEEL_WALL 1209 -#define EL_DF_WOODEN_WALL 1210 +#define EL_MM_MCDUFFIN 1204 +#define EL_MM_PACMAN 1205 +#define EL_MM_FUSE 1206 +#define EL_MM_STEEL_WALL 1207 +#define EL_MM_WOODEN_WALL 1208 +#define EL_MM_ICE_WALL 1209 +#define EL_MM_AMOEBA_WALL 1210 +#define EL_DF_LASER 1211 +#define EL_DF_RECEIVER 1212 +#define EL_DF_STEEL_WALL 1213 +#define EL_DF_WOODEN_WALL 1214 -#define EL_MM_END (EL_DF_START2 + 430) +#define EL_MM_END_2 (EL_DF_START2 + 430) +#define EL_MM_END EL_MM_END_2 -#define NUM_FILE_ELEMENTS 1211 +#define NUM_FILE_ELEMENTS 1215 /* "real" (and therefore drawable) runtime elements */ @@ -1914,8 +1963,12 @@ #define EL_MM_GRAY_BALL_OPENING (EL_FIRST_RUNTIME_REAL + 74) #define EL_MM_ICE_WALL_SHRINKING (EL_FIRST_RUNTIME_REAL + 75) #define EL_MM_AMOEBA_WALL_GROWING (EL_FIRST_RUNTIME_REAL + 76) +#define EL_MM_PACMAN_EATING_RIGHT (EL_FIRST_RUNTIME_REAL + 77) +#define EL_MM_PACMAN_EATING_UP (EL_FIRST_RUNTIME_REAL + 78) +#define EL_MM_PACMAN_EATING_LEFT (EL_FIRST_RUNTIME_REAL + 79) +#define EL_MM_PACMAN_EATING_DOWN (EL_FIRST_RUNTIME_REAL + 80) -#define NUM_DRAWABLE_ELEMENTS (EL_FIRST_RUNTIME_REAL + 77) +#define NUM_DRAWABLE_ELEMENTS (EL_FIRST_RUNTIME_REAL + 81) #define EL_MM_RUNTIME_START EL_MM_EXIT_OPENING #define EL_MM_RUNTIME_END EL_MM_AMOEBA_WALL_GROWING @@ -1974,35 +2027,38 @@ #define EL_SHIELD_NORMAL_ACTIVE (EL_FIRST_DUMMY + 18) #define EL_SHIELD_DEADLY_ACTIVE (EL_FIRST_DUMMY + 19) #define EL_AMOEBA (EL_FIRST_DUMMY + 20) -#define EL_MM_MASK_MCDUFFIN_RIGHT (EL_FIRST_DUMMY + 21) -#define EL_MM_MASK_MCDUFFIN_UP (EL_FIRST_DUMMY + 22) -#define EL_MM_MASK_MCDUFFIN_LEFT (EL_FIRST_DUMMY + 23) -#define EL_MM_MASK_MCDUFFIN_DOWN (EL_FIRST_DUMMY + 24) -#define EL_MM_MASK_GRID_1 (EL_FIRST_DUMMY + 25) -#define EL_MM_MASK_GRID_2 (EL_FIRST_DUMMY + 26) -#define EL_MM_MASK_GRID_3 (EL_FIRST_DUMMY + 27) -#define EL_MM_MASK_GRID_4 (EL_FIRST_DUMMY + 28) -#define EL_MM_MASK_RECTANGLE (EL_FIRST_DUMMY + 29) -#define EL_MM_MASK_CIRCLE (EL_FIRST_DUMMY + 30) -#define EL_DEFAULT (EL_FIRST_DUMMY + 31) -#define EL_BD_DEFAULT (EL_FIRST_DUMMY + 32) -#define EL_SP_DEFAULT (EL_FIRST_DUMMY + 33) -#define EL_SB_DEFAULT (EL_FIRST_DUMMY + 34) -#define EL_MM_DEFAULT (EL_FIRST_DUMMY + 35) -#define EL_GRAPHIC_1 (EL_FIRST_DUMMY + 36) -#define EL_GRAPHIC_2 (EL_FIRST_DUMMY + 37) -#define EL_GRAPHIC_3 (EL_FIRST_DUMMY + 38) -#define EL_GRAPHIC_4 (EL_FIRST_DUMMY + 39) -#define EL_GRAPHIC_5 (EL_FIRST_DUMMY + 40) -#define EL_GRAPHIC_6 (EL_FIRST_DUMMY + 41) -#define EL_GRAPHIC_7 (EL_FIRST_DUMMY + 42) -#define EL_GRAPHIC_8 (EL_FIRST_DUMMY + 43) +#define EL_MM_LIGHTBALL_RED (EL_FIRST_DUMMY + 21) +#define EL_MM_LIGHTBALL_BLUE (EL_FIRST_DUMMY + 22) +#define EL_MM_LIGHTBALL_YELLOW (EL_FIRST_DUMMY + 23) +#define EL_MM_MASK_MCDUFFIN_RIGHT (EL_FIRST_DUMMY + 24) +#define EL_MM_MASK_MCDUFFIN_UP (EL_FIRST_DUMMY + 25) +#define EL_MM_MASK_MCDUFFIN_LEFT (EL_FIRST_DUMMY + 26) +#define EL_MM_MASK_MCDUFFIN_DOWN (EL_FIRST_DUMMY + 27) +#define EL_MM_MASK_GRID_1 (EL_FIRST_DUMMY + 28) +#define EL_MM_MASK_GRID_2 (EL_FIRST_DUMMY + 29) +#define EL_MM_MASK_GRID_3 (EL_FIRST_DUMMY + 30) +#define EL_MM_MASK_GRID_4 (EL_FIRST_DUMMY + 31) +#define EL_MM_MASK_RECTANGLE (EL_FIRST_DUMMY + 32) +#define EL_MM_MASK_CIRCLE (EL_FIRST_DUMMY + 33) +#define EL_DEFAULT (EL_FIRST_DUMMY + 34) +#define EL_BD_DEFAULT (EL_FIRST_DUMMY + 35) +#define EL_SP_DEFAULT (EL_FIRST_DUMMY + 36) +#define EL_SB_DEFAULT (EL_FIRST_DUMMY + 37) +#define EL_MM_DEFAULT (EL_FIRST_DUMMY + 38) +#define EL_GRAPHIC_1 (EL_FIRST_DUMMY + 39) +#define EL_GRAPHIC_2 (EL_FIRST_DUMMY + 40) +#define EL_GRAPHIC_3 (EL_FIRST_DUMMY + 41) +#define EL_GRAPHIC_4 (EL_FIRST_DUMMY + 42) +#define EL_GRAPHIC_5 (EL_FIRST_DUMMY + 43) +#define EL_GRAPHIC_6 (EL_FIRST_DUMMY + 44) +#define EL_GRAPHIC_7 (EL_FIRST_DUMMY + 45) +#define EL_GRAPHIC_8 (EL_FIRST_DUMMY + 46) #define EL_MM_DUMMY_START EL_MM_MASK_MCDUFFIN_RIGHT #define EL_MM_DUMMY_END EL_MM_MASK_CIRCLE /* internal elements (only used for internal purposes like copying) */ -#define EL_FIRST_INTERNAL (EL_FIRST_DUMMY + 44) +#define EL_FIRST_INTERNAL (EL_FIRST_DUMMY + 47) #define EL_INTERNAL_CLIPBOARD_CUSTOM (EL_FIRST_INTERNAL + 0) #define EL_INTERNAL_CLIPBOARD_CHANGE (EL_FIRST_INTERNAL + 1) @@ -2907,6 +2963,7 @@ struct LevelInfo int time; /* available time (seconds) */ int gems_needed; + boolean auto_count_gems; char name[MAX_LEVEL_NAME_LEN + 1]; char author[MAX_LEVEL_AUTHOR_LEN + 1]; @@ -2993,6 +3050,11 @@ struct LevelInfo boolean block_last_field; /* player blocks previous field while moving */ boolean sp_block_last_field; /* player blocks previous field while moving */ + /* values for MM/DF elements */ + boolean mm_laser_red, mm_laser_green, mm_laser_blue; + boolean df_laser_red, df_laser_green, df_laser_blue; + int mm_time_fuse; + /* ('int' instead of 'boolean' because used as selectbox value in editor) */ int use_step_counter; /* count steps instead of seconds for level */ @@ -3000,6 +3062,8 @@ struct LevelInfo boolean use_custom_template; /* use custom properties from template file */ + boolean file_has_custom_elements; /* set when level file contains CEs */ + boolean no_valid_file; /* set when level file missing or invalid */ boolean no_level_file; /* set when falling back to level template */