rnd-20030511-2-src
authorHolger Schemel <info@artsoft.org>
Sun, 11 May 2003 01:17:54 +0000 (03:17 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:41:50 +0000 (10:41 +0200)
src/conftime.h
src/editor.c
src/game.c
src/init.c
src/main.h

index d896f4a3ba38d2dc088982947c6f88a95b36ba90..c4519f2d2944a10182db3494f7475ae52e4bc939 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2003-05-11 02:07]"
+#define COMPILE_DATE_STRING "[2003-05-11 03:13]"
index da21b2dd0003cfc54db4d6f0c2feba3cd528f3a5..6553ee4f12d1ffd165a86ad07a58948342011500 100644 (file)
 #define ED_AREA_ELEM_CONTENT3_YPOS     (ED_SETTINGS_YPOS(2) + \
                                         ED_GADGET_DISTANCE)
 
+#define ED_AREA_ELEM_CONTENT4_XPOS     (17 * MINI_TILEX)
+#define ED_AREA_ELEM_CONTENT4_YPOS     (ED_SETTINGS_YPOS(8) + \
+                                        ED_GADGET_DISTANCE - MINI_TILEY)
+
 /* values for random placement background drawing area */
 #define ED_AREA_RANDOM_BACKGROUND_XPOS (29 * MINI_TILEX)
 #define ED_AREA_RANDOM_BACKGROUND_YPOS (31 * MINI_TILEY)
 #define GADGET_ID_ELEMENT_CONTENT_7    (GADGET_ID_DRAWING_AREA_FIRST + 8)
 #define GADGET_ID_AMOEBA_CONTENT       (GADGET_ID_DRAWING_AREA_FIRST + 9)
 #define GADGET_ID_CUSTOM_GRAPHIC       (GADGET_ID_DRAWING_AREA_FIRST + 10)
-#define GADGET_ID_CUSTOM_CHANGED       (GADGET_ID_DRAWING_AREA_FIRST + 11)
-#define GADGET_ID_RANDOM_BACKGROUND    (GADGET_ID_DRAWING_AREA_FIRST + 12)
+#define GADGET_ID_CUSTOM_CONTENT       (GADGET_ID_DRAWING_AREA_FIRST + 11)
+#define GADGET_ID_CUSTOM_CHANGED       (GADGET_ID_DRAWING_AREA_FIRST + 12)
+#define GADGET_ID_RANDOM_BACKGROUND    (GADGET_ID_DRAWING_AREA_FIRST + 13)
 
 /* text input identifiers */
-#define GADGET_ID_TEXT_INPUT_FIRST     (GADGET_ID_DRAWING_AREA_FIRST + 13)
+#define GADGET_ID_TEXT_INPUT_FIRST     (GADGET_ID_DRAWING_AREA_FIRST + 14)
 
 #define GADGET_ID_LEVEL_NAME           (GADGET_ID_TEXT_INPUT_FIRST + 0)
 #define GADGET_ID_LEVEL_AUTHOR         (GADGET_ID_TEXT_INPUT_FIRST + 1)
 #define GADGET_ID_EM_SLIPPERY_GEMS     (GADGET_ID_CHECKBUTTON_FIRST + 6)
 #define GADGET_ID_CUSTOM_INDESTRUCTIBLE        (GADGET_ID_CHECKBUTTON_FIRST + 7)
 #define GADGET_ID_CUSTOM_WALK_TO_OBJECT        (GADGET_ID_CHECKBUTTON_FIRST + 8)
-#define GADGET_ID_CUSTOM_CAN_FALL      (GADGET_ID_CHECKBUTTON_FIRST + 9)
-#define GADGET_ID_CUSTOM_CAN_SMASH     (GADGET_ID_CHECKBUTTON_FIRST + 10)
-#define GADGET_ID_CUSTOM_CAN_MOVE      (GADGET_ID_CHECKBUTTON_FIRST + 11)
-#define GADGET_ID_CUSTOM_SLIPPERY      (GADGET_ID_CHECKBUTTON_FIRST + 12)
-#define GADGET_ID_CUSTOM_WALKABLE      (GADGET_ID_CHECKBUTTON_FIRST + 13)
-#define GADGET_ID_CUSTOM_USE_GRAPHIC   (GADGET_ID_CHECKBUTTON_FIRST + 14)
-#define GADGET_ID_CUSTOM_CHANGEABLE    (GADGET_ID_CHECKBUTTON_FIRST + 15)
-#define GADGET_ID_CHANGE_DELAY_FIXED   (GADGET_ID_CHECKBUTTON_FIRST + 16)
-#define GADGET_ID_CHANGE_DELAY_RANDOM  (GADGET_ID_CHECKBUTTON_FIRST + 17)
+#define GADGET_ID_CUSTOM_CAN_MOVE      (GADGET_ID_CHECKBUTTON_FIRST + 9)
+#define GADGET_ID_CUSTOM_CAN_FALL      (GADGET_ID_CHECKBUTTON_FIRST + 10)
+#define GADGET_ID_CUSTOM_CAN_SMASH     (GADGET_ID_CHECKBUTTON_FIRST + 11)
+#define GADGET_ID_CUSTOM_CAN_EXPLODE   (GADGET_ID_CHECKBUTTON_FIRST + 12)
+#define GADGET_ID_CUSTOM_SLIPPERY      (GADGET_ID_CHECKBUTTON_FIRST + 13)
+#define GADGET_ID_CUSTOM_WALKABLE      (GADGET_ID_CHECKBUTTON_FIRST + 14)
+#define GADGET_ID_CUSTOM_USE_GRAPHIC   (GADGET_ID_CHECKBUTTON_FIRST + 15)
+#define GADGET_ID_CUSTOM_CHANGEABLE    (GADGET_ID_CHECKBUTTON_FIRST + 16)
+#define GADGET_ID_CHANGE_DELAY_FIXED   (GADGET_ID_CHECKBUTTON_FIRST + 17)
+#define GADGET_ID_CHANGE_DELAY_RANDOM  (GADGET_ID_CHECKBUTTON_FIRST + 18)
 
 /* gadgets for buttons in element list */
-#define GADGET_ID_ELEMENTLIST_FIRST    (GADGET_ID_CHECKBUTTON_FIRST + 18)
+#define GADGET_ID_ELEMENTLIST_FIRST    (GADGET_ID_CHECKBUTTON_FIRST + 19)
 #define GADGET_ID_ELEMENTLIST_LAST     (GADGET_ID_ELEMENTLIST_FIRST +  \
                                        ED_NUM_ELEMENTLIST_BUTTONS - 1)
 
 #define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS     4
 #define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE        5
 #define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT        6
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL      7
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH     8
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE      9
-#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY      10
-#define ED_CHECKBUTTON_ID_CUSTOM_WALKABLE      11
-#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC   12
-#define ED_CHECKBUTTON_ID_CUSTOM_CHANGEABLE    13
-#define ED_CHECKBUTTON_ID_CHANGE_DELAY_FIXED   14
-#define ED_CHECKBUTTON_ID_CHANGE_DELAY_RANDOM  15
-
-#define ED_NUM_CHECKBUTTONS                    16
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE      7
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL      8
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH     9
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_EXPLODE   10
+#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY      11
+#define ED_CHECKBUTTON_ID_CUSTOM_WALKABLE      12
+#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC   13
+#define ED_CHECKBUTTON_ID_CUSTOM_CHANGEABLE    14
+#define ED_CHECKBUTTON_ID_CHANGE_DELAY_FIXED   15
+#define ED_CHECKBUTTON_ID_CHANGE_DELAY_RANDOM  16
+
+#define ED_NUM_CHECKBUTTONS                    17
 
 #define ED_CHECKBUTTON_ID_LEVEL_FIRST  ED_CHECKBUTTON_ID_DOUBLE_SPEED
 #define ED_CHECKBUTTON_ID_LEVEL_LAST   ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
@@ -770,7 +777,7 @@ static struct
     NULL, "diggable, collectible or pushable"
   },
   {
-    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(9),
+    ED_SETTINGS_XPOS(1),               ED_SETTINGS_YPOS(10),
     GADGET_ID_CUSTOM_WALKABLE_LAYER,
     0,
     options_walkable_layer, &index_walkable_layer,
@@ -783,7 +790,7 @@ static struct
     0,
     options_time_units, &index_time_units,
     &custom_element.change.delay_frames,
-    "delay units given in", "time units for change"
+    "delay time given in", "delay time units for change"
   },
   {
     ED_SETTINGS_XPOS(0),               ED_COUNTER_YPOS(8),
@@ -984,30 +991,36 @@ static struct
   },
   {
     ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(5),
+    GADGET_ID_CUSTOM_CAN_MOVE,
+    &custom_element_properties[EP_CAN_MOVE],
+    "can move",                                "element can move in some direction"
+  },
+  {
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(6),
     GADGET_ID_CUSTOM_CAN_FALL,
     &custom_element_properties[EP_CAN_FALL],
     "can fall",                                "element can fall down"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(6),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(7),
     GADGET_ID_CUSTOM_CAN_SMASH,
     &custom_element_properties[EP_CAN_SMASH],
     "can smash",                       "element can smash other elements"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(7),
-    GADGET_ID_CUSTOM_CAN_MOVE,
-    &custom_element_properties[EP_CAN_MOVE],
-    "can move",                                "element can move in some direction"
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(8),
+    GADGET_ID_CUSTOM_CAN_EXPLODE,
+    &custom_element_properties[EP_CAN_EXPLODE],
+    "can explode to:",                 "element can explode to other elements"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(8),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(9),
     GADGET_ID_CUSTOM_SLIPPERY,
     &custom_element_properties[EP_SLIPPERY],
     "slippery",                                "other elements can fall down from it"
   },
   {
-    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(9),
+    ED_SETTINGS_XPOS(0),               ED_SETTINGS_YPOS(10),
     GADGET_ID_CUSTOM_WALKABLE,
     &custom_element_properties[EP_WALKABLE],
     NULL,                              "player can walk on the same field"
@@ -2440,6 +2453,26 @@ static void CreateDrawingAreas()
 
   level_editor_gadget[id] = gi;
 
+  /* ... one areas for custom element explosion content ... */
+  id = GADGET_ID_CUSTOM_CONTENT;
+  gi = CreateGadget(GDI_CUSTOM_ID, id,
+                   GDI_CUSTOM_TYPE_ID, i,
+                   GDI_X, SX + ED_AREA_ELEM_CONTENT4_XPOS,
+                   GDI_Y, SX + ED_AREA_ELEM_CONTENT4_YPOS,
+                   GDI_WIDTH, 3 * MINI_TILEX,
+                   GDI_HEIGHT, 3 * MINI_TILEY,
+                   GDI_TYPE, GD_TYPE_DRAWING_AREA,
+                   GDI_ITEM_SIZE, MINI_TILEX, MINI_TILEY,
+                   GDI_EVENT_MASK, event_mask,
+                   GDI_CALLBACK_INFO, HandleDrawingAreaInfo,
+                   GDI_CALLBACK_ACTION, HandleDrawingAreas,
+                   GDI_END);
+
+  if (gi == NULL)
+    Error(ERR_EXIT, "cannot create gadget");
+
+  level_editor_gadget[id] = gi;
+
   /* ... one for each custom element change target element ... */
   id = GADGET_ID_CUSTOM_CHANGED;
   gi = CreateGadget(GDI_CUSTOM_ID, id,
@@ -3524,6 +3557,41 @@ static void DrawCustomGraphicElementArea()
   MapDrawingArea(GADGET_ID_CUSTOM_GRAPHIC);
 }
 
+static void DrawCustomContentArea()
+{
+  struct GadgetInfo *gi = level_editor_gadget[GADGET_ID_CUSTOM_CONTENT];
+  int area_sx = SX + ED_AREA_ELEM_CONTENT4_XPOS;
+  int area_sy = SY + ED_AREA_ELEM_CONTENT4_YPOS;
+  int x, y;
+
+  if (!IS_CUSTOM_ELEMENT(properties_element))
+  {
+    /* this should never happen */
+    Error(ERR_WARN, "element %d is no custom element", properties_element);
+
+    return;
+  }
+
+  for (y=0; y<3; y++)
+    for (x=0; x<3; x++)
+      ElementContent[0][x][y] = custom_element.content[x][y];
+
+  DrawElementBorder(area_sx, area_sy, 3 * MINI_TILEX, 3 * MINI_TILEY, TRUE);
+
+  for (y=0; y<3; y++)
+    for (x=0; x<3; x++)
+#if 1
+      DrawMiniGraphicExt(drawto,
+                        gi->x + x * MINI_TILEX,
+                        gi->y + y * MINI_TILEY,
+                        el2edimg(ElementContent[0][0][0]));
+#else
+      DrawMiniElement(area_x + x, area_y + y, ElementContent[0][x][y]);
+#endif
+
+  MapDrawingArea(GADGET_ID_CUSTOM_CONTENT);
+}
+
 static void DrawCustomChangedArea()
 {
   struct GadgetInfo *gi = level_editor_gadget[GADGET_ID_CUSTOM_CHANGED];
@@ -4092,7 +4160,10 @@ static void DrawPropertiesConfig()
     MapCheckbuttonGadget(i);
 
     if (IS_CUSTOM_ELEMENT(properties_element))
+    {
       DrawCustomGraphicElementArea();
+      DrawCustomContentArea();
+    }
     else if (IS_AMOEBOID(properties_element))
       DrawAmoebaContentArea();
     else
index cd8e534197d5bb95bad9bce7a6663f8eb03c9bf7..ccf0d477ff73da12b16906bb0680613e628bcd92 100644 (file)
@@ -1809,7 +1809,7 @@ void Explode(int ex, int ey, int phase, int mode)
 
     if (IS_PLAYER(x, y))
       KillHeroUnlessProtected(x, y);
-    else if (IS_CAN_EXPLODE(element))
+    else if (CAN_EXPLODE(element))
     {
       Feld[x][y] = Store2[x][y];
       Store2[x][y] = 0;
@@ -3247,7 +3247,7 @@ void StartMoving(int x, int y)
          {
            int flamed = MovingOrBlocked2Element(xx, yy);
 
-           if (IS_ENEMY(flamed) || IS_CAN_EXPLODE(flamed))
+           if (IS_ENEMY(flamed) || CAN_EXPLODE(flamed))
              Bang(xx, yy);
            else
              RemoveMovingField(xx, yy);
index 88bfaeb84572c4362ad2a65a79231309e073f8fd..977521342cd3c5e3d606d19dfce4963132aa2a64 100644 (file)
@@ -1251,6 +1251,79 @@ void InitElementPropertiesStatic()
     -1
   };
 
+  static int ep_can_explode[] =
+  {
+    EL_BOMB,
+    EL_DYNAMITE_ACTIVE,
+    EL_DYNAMITE,
+    EL_DYNABOMB_PLAYER_1_ACTIVE,
+    EL_DYNABOMB_PLAYER_2_ACTIVE,
+    EL_DYNABOMB_PLAYER_3_ACTIVE,
+    EL_DYNABOMB_PLAYER_4_ACTIVE,
+    EL_DYNABOMB_INCREASE_NUMBER,
+    EL_DYNABOMB_INCREASE_SIZE,
+    EL_DYNABOMB_INCREASE_POWER,
+    EL_SP_DISK_RED_ACTIVE,
+    EL_BUG,
+    EL_MOLE,
+    EL_PENGUIN,
+    EL_PIG,
+    EL_DRAGON,
+    EL_SATELLITE,
+    EL_SP_DISK_RED,
+    EL_SP_DISK_ORANGE,
+    EL_SP_DISK_YELLOW,
+    EL_SP_SNIKSNAK,
+    EL_SP_ELECTRON,
+    EL_DX_SUPABOMB,
+    -1
+  };
+
+  static int ep_can_move[] =
+  {
+    /* only stored in level file */
+    EL_BUG_RIGHT,
+    EL_BUG_UP,
+    EL_BUG_LEFT,
+    EL_BUG_DOWN,
+    EL_SPACESHIP_RIGHT,
+    EL_SPACESHIP_UP,
+    EL_SPACESHIP_LEFT,
+    EL_SPACESHIP_DOWN,
+    EL_BD_BUTTERFLY_RIGHT,
+    EL_BD_BUTTERFLY_UP,
+    EL_BD_BUTTERFLY_LEFT,
+    EL_BD_BUTTERFLY_DOWN,
+    EL_BD_FIREFLY_RIGHT,
+    EL_BD_FIREFLY_UP,
+    EL_BD_FIREFLY_LEFT,
+    EL_BD_FIREFLY_DOWN,
+    EL_PACMAN_RIGHT,
+    EL_PACMAN_UP,
+    EL_PACMAN_LEFT,
+    EL_PACMAN_DOWN,
+
+    /* level file and runtime elements */
+    EL_BUG,
+    EL_SPACESHIP,
+    EL_BD_BUTTERFLY,
+    EL_BD_FIREFLY,
+    EL_YAMYAM,
+    EL_DARK_YAMYAM,
+    EL_ROBOT,
+    EL_PACMAN,
+    EL_MOLE,
+    EL_PENGUIN,
+    EL_PIG,
+    EL_DRAGON,
+    EL_SATELLITE,
+    EL_SP_SNIKSNAK,
+    EL_SP_ELECTRON,
+    EL_BALLOON,
+    EL_SPRING,
+    -1
+  };
+
   static int ep_can_fall[] =
   {
     EL_ROCK,
@@ -1416,51 +1489,6 @@ void InitElementPropertiesStatic()
     -1
   };
 
-  static int ep_can_move[] =
-  {
-    /* only stored in level file */
-    EL_BUG_RIGHT,
-    EL_BUG_UP,
-    EL_BUG_LEFT,
-    EL_BUG_DOWN,
-    EL_SPACESHIP_RIGHT,
-    EL_SPACESHIP_UP,
-    EL_SPACESHIP_LEFT,
-    EL_SPACESHIP_DOWN,
-    EL_BD_BUTTERFLY_RIGHT,
-    EL_BD_BUTTERFLY_UP,
-    EL_BD_BUTTERFLY_LEFT,
-    EL_BD_BUTTERFLY_DOWN,
-    EL_BD_FIREFLY_RIGHT,
-    EL_BD_FIREFLY_UP,
-    EL_BD_FIREFLY_LEFT,
-    EL_BD_FIREFLY_DOWN,
-    EL_PACMAN_RIGHT,
-    EL_PACMAN_UP,
-    EL_PACMAN_LEFT,
-    EL_PACMAN_DOWN,
-
-    /* level file and runtime elements */
-    EL_BUG,
-    EL_SPACESHIP,
-    EL_BD_BUTTERFLY,
-    EL_BD_FIREFLY,
-    EL_YAMYAM,
-    EL_DARK_YAMYAM,
-    EL_ROBOT,
-    EL_PACMAN,
-    EL_MOLE,
-    EL_PENGUIN,
-    EL_PIG,
-    EL_DRAGON,
-    EL_SATELLITE,
-    EL_SP_SNIKSNAK,
-    EL_SP_ELECTRON,
-    EL_BALLOON,
-    EL_SPRING,
-    -1
-  };
-
   static int ep_can_pass_magic_wall[] =
   {
     EL_ROCK,
@@ -1553,34 +1581,6 @@ void InitElementPropertiesStatic()
     -1
   };
 
-  static int ep_can_explode[] =
-  {
-    EL_BOMB,
-    EL_DYNAMITE_ACTIVE,
-    EL_DYNAMITE,
-    EL_DYNABOMB_PLAYER_1_ACTIVE,
-    EL_DYNABOMB_PLAYER_2_ACTIVE,
-    EL_DYNABOMB_PLAYER_3_ACTIVE,
-    EL_DYNABOMB_PLAYER_4_ACTIVE,
-    EL_DYNABOMB_INCREASE_NUMBER,
-    EL_DYNABOMB_INCREASE_SIZE,
-    EL_DYNABOMB_INCREASE_POWER,
-    EL_SP_DISK_RED_ACTIVE,
-    EL_BUG,
-    EL_MOLE,
-    EL_PENGUIN,
-    EL_PIG,
-    EL_DRAGON,
-    EL_SATELLITE,
-    EL_SP_DISK_RED,
-    EL_SP_DISK_ORANGE,
-    EL_SP_DISK_YELLOW,
-    EL_SP_SNIKSNAK,
-    EL_SP_ELECTRON,
-    EL_DX_SUPABOMB,
-    -1
-  };
-
   static int ep_bd_element[] =
   {
     EL_EMPTY,
index 302ba8c466a448716a13faeb0906f354bf0753b6..4b69a028acafe27701d4b288177b6bec4d9b5ce6 100644 (file)
@@ -68,8 +68,8 @@
 #define EP_UNUSED_4            4
 #define EP_INDESTRUCTIBLE      5
 #define EP_SLIPPERY            6
-#define EP_UNUSED_7            7
-#define EP_UNUSED_8            8
+#define EP_CAN_EXPLODE         7
+#define EP_CAN_MOVE            8
 #define EP_CAN_FALL            9
 #define EP_CAN_SMASH           10
 #define EP_WALKABLE_OVER       11
 
 /* values for pre-defined properties */
 #define EP_PLAYER              27
-#define EP_CAN_MOVE            28
-#define EP_CAN_PASS_MAGIC_WALL 29
-#define EP_SWITCHABLE          30
-#define EP_DONT_TOUCH          31
-#define EP_ENEMY               32
-#define EP_DONT_GO_TO          33
-#define EP_CAN_EXPLODE         34
-#define EP_BD_ELEMENT          35
-#define EP_SP_ELEMENT          36
-#define EP_SB_ELEMENT          37
-#define EP_GEM                 38
-#define EP_FOOD_DARK_YAMYAM    39
-#define EP_FOOD_PENGUIN                40
-#define EP_FOOD_PIG            41
-#define EP_HISTORIC_WALL       42
-#define EP_HISTORIC_SOLID      43
-#define EP_BELT                        44
-#define EP_BELT_ACTIVE         45
-#define EP_BELT_SWITCH         46
-#define EP_TUBE                        47
-#define EP_KEYGATE             48
-#define EP_AMOEBOID            49
-#define EP_AMOEBALIVE          50
-#define EP_HAS_CONTENT         51
-#define EP_ACTIVE_BOMB         52
-#define EP_INACTIVE            53
+#define EP_CAN_PASS_MAGIC_WALL 28
+#define EP_SWITCHABLE          29
+#define EP_DONT_TOUCH          30
+#define EP_ENEMY               31
+#define EP_DONT_GO_TO          32
+#define EP_BD_ELEMENT          33
+#define EP_SP_ELEMENT          34
+#define EP_SB_ELEMENT          35
+#define EP_GEM                 36
+#define EP_FOOD_DARK_YAMYAM    37
+#define EP_FOOD_PENGUIN                38
+#define EP_FOOD_PIG            39
+#define EP_HISTORIC_WALL       40
+#define EP_HISTORIC_SOLID      41
+#define EP_BELT                        42
+#define EP_BELT_ACTIVE         43
+#define EP_BELT_SWITCH         44
+#define EP_TUBE                        45
+#define EP_KEYGATE             46
+#define EP_AMOEBOID            47
+#define EP_AMOEBALIVE          48
+#define EP_HAS_CONTENT         49
+#define EP_ACTIVE_BOMB         50
+#define EP_INACTIVE            51
 
 /* values for derived properties (determined from properties above) */
-#define EP_ACCESSIBLE_OVER     54
-#define EP_ACCESSIBLE_INSIDE   55
-#define EP_ACCESSIBLE_UNDER    56
-#define EP_WALKABLE            57
-#define EP_PASSABLE            58
-#define EP_ACCESSIBLE          59
-#define EP_SNAPPABLE           60
-#define EP_WALL                        61
-#define EP_SOLID_FOR_PUSHING   62
-#define EP_DRAGONFIRE_PROOF    63
-#define EP_EXPLOSION_PROOF     64
+#define EP_ACCESSIBLE_OVER     52
+#define EP_ACCESSIBLE_INSIDE   53
+#define EP_ACCESSIBLE_UNDER    54
+#define EP_WALKABLE            55
+#define EP_PASSABLE            56
+#define EP_ACCESSIBLE          57
+#define EP_SNAPPABLE           58
+#define EP_WALL                        59
+#define EP_SOLID_FOR_PUSHING   60
+#define EP_DRAGONFIRE_PROOF    61
+#define EP_EXPLOSION_PROOF     62
 
 /* values for internal purpose only (level editor) */
-#define EP_WALK_TO_OBJECT      65
+#define EP_WALK_TO_OBJECT      63
 
-#define NUM_ELEMENT_PROPERTIES 66
+#define NUM_ELEMENT_PROPERTIES 64
 
 #define NUM_EP_BITFIELDS       ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE       0
 #define IS_COLLECTIBLE(e)      HAS_PROPERTY(e, EP_COLLECTIBLE)
 #define IS_INDESTRUCTIBLE(e)   HAS_PROPERTY(e, EP_INDESTRUCTIBLE)
 #define IS_SLIPPERY(e)         HAS_PROPERTY(e, EP_SLIPPERY)
+#define CAN_EXPLODE(e)         HAS_PROPERTY(e, EP_CAN_EXPLODE)
+#define CAN_MOVE(e)            HAS_PROPERTY(e, EP_CAN_MOVE)
 #define CAN_FALL(e)            HAS_PROPERTY(e, EP_CAN_FALL)
 #define CAN_SMASH(e)           HAS_PROPERTY(e, EP_CAN_SMASH)
 #define IS_WALKABLE_OVER(e)    HAS_PROPERTY(e, EP_WALKABLE_OVER)
 
 /* macros for pre-defined properties */
 #define ELEM_IS_PLAYER(e)      HAS_PROPERTY(e, EP_PLAYER)
-#define CAN_MOVE(e)            HAS_PROPERTY(e, EP_CAN_MOVE)
 #define CAN_PASS_MAGIC_WALL(e) HAS_PROPERTY(e, EP_CAN_PASS_MAGIC_WALL)
 #define IS_SWITCHABLE(e)       HAS_PROPERTY(e, EP_SWITCHABLE)
 #define DONT_TOUCH(e)          HAS_PROPERTY(e, EP_DONT_TOUCH)
 #define IS_ENEMY(e)            HAS_PROPERTY(e, EP_ENEMY)
 #define DONT_GO_TO(e)          HAS_PROPERTY(e, EP_DONT_GO_TO)
-#define IS_CAN_EXPLODE(e)      HAS_PROPERTY(e, EP_CAN_EXPLODE)
 #define IS_BD_ELEMENT(e)       HAS_PROPERTY(e, EP_BD_ELEMENT)
 #define IS_SP_ELEMENT(e)       HAS_PROPERTY(e, EP_SP_ELEMENT)
 #define IS_SB_ELEMENT(e)       HAS_PROPERTY(e, EP_SB_ELEMENT)
@@ -1040,6 +1038,8 @@ struct CustomElementInfo
   int walk_to_action;          /* only for level editor; not stored */
   int walkable_layer;          /* only for level editor; not stored */
 
+  int content[3][3];           /* new elements after explosion */
+
   struct CustomElementChangeInfo change;
 };