#define EP_BITMASK_BASE_DEFAULT (1 << EP_CAN_MOVE_INTO_ACID)
#define EP_BITMASK_DEFAULT 0
-#define PROPERTY_BIT(p) (1 << ((p) % 32))
+#define PROPERTY_BIT(p) (1u << ((p) % 32))
#define PROPERTY_VAR(e,p) (element_info[e].properties[(p) / 32])
#define HAS_PROPERTY(e,p) ((PROPERTY_VAR(e, p) & PROPERTY_BIT(p)) != 0)
#define SET_PROPERTY(e,p,v) ((v) ? \
#define IS_ENVELOPE(e) ((e) >= EL_ENVELOPE_1 && \
(e) <= EL_ENVELOPE_4)
+#define IS_MM_ENVELOPE(e) ((e) >= EL_MM_ENVELOPE_1 && \
+ (e) <= EL_MM_ENVELOPE_4)
+
#define IS_BALLOON_ELEMENT(e) ((e) == EL_BALLOON || \
(e) == EL_BALLOON_SWITCH_LEFT || \
(e) == EL_BALLOON_SWITCH_RIGHT || \
IS_EM_GATE_GRAY(e) ? EM_GATE_GRAY_NR(e) : \
IS_EMC_GATE_GRAY(e) ? EMC_GATE_GRAY_NR(e) : 0)
+#define RND_ENVELOPE_NR(e) ((e) - EL_ENVELOPE_1)
+#define MM_ENVELOPE_NR(e) ((e) - EL_MM_ENVELOPE_1)
+#define ENVELOPE_NR(e) (IS_ENVELOPE(e) ? RND_ENVELOPE_NR(e) : \
+ MM_ENVELOPE_NR(e))
+
#define IS_ACID_POOL_OR_ACID(e) (IS_ACID_POOL(e) || (e) == EL_ACID)
#define IS_EMC_PILLAR(e) ((e) >= EL_EMC_WALL_1 && \
#define STD_ELEMENT_CONTENTS 4
#define MAX_ELEMENT_CONTENTS 8
+#define MIN_MM_BALL_CONTENTS 1
+#define STD_MM_BALL_CONTENTS 8
+#define MAX_MM_BALL_CONTENTS 16
+
// values for initial player inventory
#define MIN_INITIAL_INVENTORY_SIZE 1
#define MAX_INITIAL_INVENTORY_SIZE 8
#define EL_MM_WOODEN_GRID_FIXED_4 (EL_MM_WOODEN_GRID_FIXED_START + 3)
#define EL_MM_WOODEN_GRID_FIXED_END EL_MM_WOODEN_GRID_FIXED_03
#define EL_MM_FUEL_EMPTY (EL_MM_START + 155)
-
-#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_ENVELOPE_1 (EL_MM_START + 156)
+#define EL_MM_ENVELOPE_2 (EL_MM_START + 157)
+#define EL_MM_ENVELOPE_3 (EL_MM_START + 158)
+#define EL_MM_ENVELOPE_4 (EL_MM_START + 159)
#define EL_MM_END_1 (EL_MM_START + 159)
#define EL_MM_START_2 (EL_MM_START + 160)
#define EL_EMC_SPRING_BUMPER_ACTIVE (EL_FIRST_RUNTIME_REAL + 71)
#define EL_MM_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 72)
#define EL_MM_EXIT_CLOSING (EL_FIRST_RUNTIME_REAL + 73)
-#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 + 81)
+#define EL_MM_GRAY_BALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 74)
+#define EL_MM_GRAY_BALL_OPENING (EL_FIRST_RUNTIME_REAL + 75)
+#define EL_MM_ICE_WALL_SHRINKING (EL_FIRST_RUNTIME_REAL + 76)
+#define EL_MM_AMOEBA_WALL_GROWING (EL_FIRST_RUNTIME_REAL + 77)
+#define EL_MM_PACMAN_EATING_RIGHT (EL_FIRST_RUNTIME_REAL + 78)
+#define EL_MM_PACMAN_EATING_UP (EL_FIRST_RUNTIME_REAL + 79)
+#define EL_MM_PACMAN_EATING_LEFT (EL_FIRST_RUNTIME_REAL + 80)
+#define EL_MM_PACMAN_EATING_DOWN (EL_FIRST_RUNTIME_REAL + 81)
+#define EL_MM_BOMB_ACTIVE (EL_FIRST_RUNTIME_REAL + 82)
+#define EL_DF_MINE_ACTIVE (EL_FIRST_RUNTIME_REAL + 83)
+
+#define NUM_DRAWABLE_ELEMENTS (EL_FIRST_RUNTIME_REAL + 84)
#define EL_MM_RUNTIME_START EL_MM_EXIT_OPENING
#define EL_MM_RUNTIME_END EL_MM_AMOEBA_WALL_GROWING
#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
+#define EL_DEFAULT (EL_FIRST_DUMMY + 24)
+#define EL_BD_DEFAULT (EL_FIRST_DUMMY + 25)
+#define EL_SP_DEFAULT (EL_FIRST_DUMMY + 26)
+#define EL_SB_DEFAULT (EL_FIRST_DUMMY + 27)
+#define EL_MM_DEFAULT (EL_FIRST_DUMMY + 28)
+#define EL_GRAPHIC_1 (EL_FIRST_DUMMY + 29)
+#define EL_GRAPHIC_2 (EL_FIRST_DUMMY + 30)
+#define EL_GRAPHIC_3 (EL_FIRST_DUMMY + 31)
+#define EL_GRAPHIC_4 (EL_FIRST_DUMMY + 32)
+#define EL_GRAPHIC_5 (EL_FIRST_DUMMY + 33)
+#define EL_GRAPHIC_6 (EL_FIRST_DUMMY + 34)
+#define EL_GRAPHIC_7 (EL_FIRST_DUMMY + 35)
+#define EL_GRAPHIC_8 (EL_FIRST_DUMMY + 36)
// internal elements (only used for internal purposes like copying)
-#define EL_FIRST_INTERNAL (EL_FIRST_DUMMY + 47)
+#define EL_FIRST_INTERNAL (EL_FIRST_DUMMY + 37)
#define EL_INTERNAL_CLIPBOARD_CUSTOM (EL_FIRST_INTERNAL + 0)
#define EL_INTERNAL_CLIPBOARD_CHANGE (EL_FIRST_INTERNAL + 1)
GFX_SPECIAL_ARG_SCORESNEW,
GFX_SPECIAL_ARG_NO_TITLE,
GFX_SPECIAL_ARG_FADING,
+ GFX_SPECIAL_ARG_RESTARTING,
GFX_SPECIAL_ARG_QUIT,
NUM_SPECIAL_GFX_ARGS
GFX_ARG_DELAY,
GFX_ARG_ANIM_MODE,
GFX_ARG_GLOBAL_SYNC,
+ GFX_ARG_GLOBAL_ANIM_SYNC,
GFX_ARG_CRUMBLED_LIKE,
GFX_ARG_DIGGABLE_LIKE,
GFX_ARG_BORDER_SIZE,
GFX_ARG_ACTIVE_YOFFSET,
GFX_ARG_PRESSED_XOFFSET,
GFX_ARG_PRESSED_YOFFSET,
+ GFX_ARG_STACKED_XFACTOR,
+ GFX_ARG_STACKED_YFACTOR,
+ GFX_ARG_STACKED_XOFFSET,
+ GFX_ARG_STACKED_YOFFSET,
NUM_GFX_ARGS
};
#define GAME_MODE_PSEUDO_SCORESNEW GFX_SPECIAL_ARG_SCORESNEW
#define GAME_MODE_PSEUDO_NO_TITLE GFX_SPECIAL_ARG_NO_TITLE
#define GAME_MODE_PSEUDO_FADING GFX_SPECIAL_ARG_FADING
+#define GAME_MODE_PSEUDO_RESTARTING GFX_SPECIAL_ARG_RESTARTING
#define GAME_MODE_QUIT GFX_SPECIAL_ARG_QUIT
#define NUM_GAME_MODES NUM_SPECIAL_GFX_ARGS
// program information and versioning definitions
#define PROGRAM_VERSION_SUPER 4
#define PROGRAM_VERSION_MAJOR 3
-#define PROGRAM_VERSION_MINOR 2
+#define PROGRAM_VERSION_MINOR 5
#define PROGRAM_VERSION_PATCH 2
#define PROGRAM_VERSION_EXTRA ""
#define PROGRAM_AUTHOR_STRING "Holger Schemel"
#define PROGRAM_EMAIL_STRING "info@artsoft.org"
#define PROGRAM_WEBSITE_STRING "https://www.artsoft.org/"
-#define PROGRAM_COPYRIGHT_STRING "Copyright \xa9""1995-2022 by Holger Schemel"
+#define PROGRAM_COPYRIGHT_STRING "1995-2023 by Holger Schemel"
#define PROGRAM_COMPANY_STRING "A Game by Artsoft Entertainment"
-#define PROGRAM_ICON_FILENAME "RocksIcon32x32.png"
+#define PROGRAM_ICON_FILENAME "icons/icon.png"
#define COOKIE_PREFIX "ROCKSNDIAMONDS"
struct MenuPosInfo insert_solution;
struct MenuPosInfo play_solution;
+ struct MenuPosInfo levelset_info;
struct MenuPosInfo switch_ecs_aga;
};
int mm_time_ball;
int mm_time_block;
+ int num_mm_ball_contents;
+ int mm_ball_choice_mode;
+ int mm_ball_content[MAX_MM_BALL_CONTENTS];
+ boolean rotate_mm_ball_content;
+
// ('int' instead of 'boolean' because used as selectbox value in editor)
int use_step_counter; // count steps instead of seconds for level
int anim_mode;
boolean anim_global_sync;
+ boolean anim_global_anim_sync;
int crumbled_like; // element for cloning crumble graphics
int diggable_like; // element for cloning digging graphics
int pressed_xoffset;
int pressed_yoffset;
+ int stacked_xfactor;
+ int stacked_yfactor;
+ int stacked_xoffset;
+ int stacked_yoffset;
+
boolean use_image_size; // use image size as default width and height
};
extern Bitmap *bitmap_db_field;
-extern Bitmap *bitmap_db_panel;
extern Bitmap *bitmap_db_door_1;
extern Bitmap *bitmap_db_door_2;
extern Bitmap *bitmap_db_store_1;