changed name of game element in EM engine
[rocksndiamonds.git] / src / tools.c
index ffcc1f661e1b73678225f5b5b26f69a2bc1e8a61..366303b22e49d5236b65e5ebe2b04186a6cd8f8e 100644 (file)
@@ -23,8 +23,6 @@
 #include "screens.h"
 
 
-// select level set with EMC X11 graphics before activating EM GFX debugging
-#define DEBUG_EM_GFX           FALSE
 #define DEBUG_FRAME_TIME       FALSE
 
 // tool button identifiers
@@ -299,7 +297,7 @@ static int getLevelFromScreenY_RND(int sy)
 
 static int getLevelFromScreenX_EM(int sx)
 {
-  int level_xsize = level.native_em_level->lev->width;
+  int level_xsize = level.native_em_level->cav->width;
   int full_xsize = level_xsize * TILESIZE_VAR;
 
   sx -= (full_xsize < SXSIZE ? (SXSIZE - full_xsize) / 2 : 0);
@@ -316,7 +314,7 @@ static int getLevelFromScreenX_EM(int sx)
 
 static int getLevelFromScreenY_EM(int sy)
 {
-  int level_ysize = level.native_em_level->lev->height;
+  int level_ysize = level.native_em_level->cav->height;
   int full_ysize = level_ysize * TILESIZE_VAR;
 
   sy -= (full_ysize < SYSIZE ? (SYSIZE - full_ysize) / 2 : 0);
@@ -5741,345 +5739,183 @@ static struct Mapping_EM_to_RND_object
 em_object_mapping_list[] =
 {
   {
-    Xblank,                            TRUE,   FALSE,
+    Zborder,                           FALSE,  FALSE,
     EL_EMPTY,                          -1, -1
   },
   {
-    Xacid_splash_e,                    FALSE,  FALSE,
-    EL_ACID_SPLASH_RIGHT,              -1, -1
-  },
-  {
-    Xacid_splash_w,                    FALSE,  FALSE,
-    EL_ACID_SPLASH_LEFT,               -1, -1
-  },
-  {
-    Xpush_stone_e,                     FALSE,  FALSE,
-    EL_ROCK,                           -1, MV_BIT_RIGHT
-  },
-  {
-    Xpush_stone_w,                     FALSE,  FALSE,
-    EL_ROCK,                           -1, MV_BIT_LEFT
-  },
-  {
-    Xpush_nut_e,                       FALSE,  FALSE,
-    EL_NUT,                            -1, MV_BIT_RIGHT
-  },
-  {
-    Xpush_nut_w,                       FALSE,  FALSE,
-    EL_NUT,                            -1, MV_BIT_LEFT
-  },
-  {
-    Xpush_spring_e,                    FALSE,  FALSE,
-    EL_SPRING,                         -1, MV_BIT_RIGHT
-  },
-  {
-    Xpush_spring_w,                    FALSE,  FALSE,
-    EL_SPRING,                         -1, MV_BIT_LEFT
-  },
-  {
-    Xpush_emerald_e,                   FALSE,  FALSE,
-    EL_EMERALD,                                -1, MV_BIT_RIGHT
-  },
-  {
-    Xpush_emerald_w,                   FALSE,  FALSE,
-    EL_EMERALD,                                -1, MV_BIT_LEFT
-  },
-  {
-    Xpush_diamond_e,                   FALSE,  FALSE,
-    EL_DIAMOND,                                -1, MV_BIT_RIGHT
-  },
-  {
-    Xpush_diamond_w,                   FALSE,  FALSE,
-    EL_DIAMOND,                                -1, MV_BIT_LEFT
-  },
-  {
-    Xpush_bomb_e,                      FALSE,  FALSE,
-    EL_BOMB,                           -1, MV_BIT_RIGHT
-  },
-  {
-    Xpush_bomb_w,                      FALSE,  FALSE,
-    EL_BOMB,                           -1, MV_BIT_LEFT
-  },
-  {
-    Xstone,                            TRUE,   FALSE,
-    EL_ROCK,                           -1, -1
-  },
-  {
-    Xstone_pause,                      FALSE,  FALSE,
-    EL_ROCK,                           -1, -1
-  },
-  {
-    Xstone_fall,                       FALSE,  FALSE,
-    EL_ROCK,                           -1, -1
-  },
-  {
-    Ystone_s,                          FALSE,  FALSE,
-    EL_ROCK,                           ACTION_FALLING, -1
-  },
-  {
-    Ystone_sB,                         FALSE,  TRUE,
-    EL_ROCK,                           ACTION_FALLING, -1
-  },
-  {
-    Ystone_e,                          FALSE,  FALSE,
-    EL_ROCK,                           ACTION_MOVING, MV_BIT_RIGHT
-  },
-  {
-    Ystone_eB,                         FALSE,  TRUE,
-    EL_ROCK,                           ACTION_MOVING, MV_BIT_RIGHT
-  },
-  {
-    Ystone_w,                          FALSE,  FALSE,
-    EL_ROCK,                           ACTION_MOVING, MV_BIT_LEFT
-  },
-  {
-    Ystone_wB,                         FALSE,  TRUE,
-    EL_ROCK,                           ACTION_MOVING, MV_BIT_LEFT
-  },
-  {
-    Xnut,                              TRUE,   FALSE,
-    EL_NUT,                            -1, -1
-  },
-  {
-    Xnut_pause,                                FALSE,  FALSE,
-    EL_NUT,                            -1, -1
-  },
-  {
-    Xnut_fall,                         FALSE,  FALSE,
-    EL_NUT,                            -1, -1
-  },
-  {
-    Ynut_s,                            FALSE,  FALSE,
-    EL_NUT,                            ACTION_FALLING, -1
-  },
-  {
-    Ynut_sB,                           FALSE,  TRUE,
-    EL_NUT,                            ACTION_FALLING, -1
-  },
-  {
-    Ynut_e,                            FALSE,  FALSE,
-    EL_NUT,                            ACTION_MOVING, MV_BIT_RIGHT
-  },
-  {
-    Ynut_eB,                           FALSE,  TRUE,
-    EL_NUT,                            ACTION_MOVING, MV_BIT_RIGHT
-  },
-  {
-    Ynut_w,                            FALSE,  FALSE,
-    EL_NUT,                            ACTION_MOVING, MV_BIT_LEFT
-  },
-  {
-    Ynut_wB,                           FALSE,  TRUE,
-    EL_NUT,                            ACTION_MOVING, MV_BIT_LEFT
-  },
-  {
-    Xbug_1_n,                          TRUE,   FALSE,
-    EL_BUG_UP,                         -1, -1
-  },
-  {
-    Xbug_1_e,                          TRUE,   FALSE,
-    EL_BUG_RIGHT,                      -1, -1
-  },
-  {
-    Xbug_1_s,                          TRUE,   FALSE,
-    EL_BUG_DOWN,                       -1, -1
-  },
-  {
-    Xbug_1_w,                          TRUE,   FALSE,
-    EL_BUG_LEFT,                       -1, -1
-  },
-  {
-    Xbug_2_n,                          FALSE,  FALSE,
-    EL_BUG_UP,                         -1, -1
-  },
-  {
-    Xbug_2_e,                          FALSE,  FALSE,
-    EL_BUG_RIGHT,                      -1, -1
-  },
-  {
-    Xbug_2_s,                          FALSE,  FALSE,
-    EL_BUG_DOWN,                       -1, -1
-  },
-  {
-    Xbug_2_w,                          FALSE,  FALSE,
-    EL_BUG_LEFT,                       -1, -1
-  },
-  {
-    Ybug_n,                            FALSE,  FALSE,
-    EL_BUG,                            ACTION_MOVING, MV_BIT_UP
-  },
-  {
-    Ybug_nB,                           FALSE,  TRUE,
-    EL_BUG,                            ACTION_MOVING, MV_BIT_UP
-  },
-  {
-    Ybug_e,                            FALSE,  FALSE,
-    EL_BUG,                            ACTION_MOVING, MV_BIT_RIGHT
-  },
-  {
-    Ybug_eB,                           FALSE,  TRUE,
-    EL_BUG,                            ACTION_MOVING, MV_BIT_RIGHT
+    Zplayer,                           FALSE,  FALSE,
+    EL_EMPTY,                          -1, -1
   },
+
   {
-    Ybug_s,                            FALSE,  FALSE,
-    EL_BUG,                            ACTION_MOVING, MV_BIT_DOWN
+    Zbug,                              FALSE,  FALSE,
+    EL_EMPTY,                          -1, -1
   },
   {
-    Ybug_sB,                           FALSE,  TRUE,
-    EL_BUG,                            ACTION_MOVING, MV_BIT_DOWN
+    Ztank,                             FALSE,  FALSE,
+    EL_EMPTY,                          -1, -1
   },
   {
-    Ybug_w,                            FALSE,  FALSE,
-    EL_BUG,                            ACTION_MOVING, MV_BIT_LEFT
+    Zeater,                            FALSE,  FALSE,
+    EL_EMPTY,                          -1, -1
   },
   {
-    Ybug_wB,                           FALSE,  TRUE,
-    EL_BUG,                            ACTION_MOVING, MV_BIT_LEFT
+    Zdynamite,                         FALSE,  FALSE,
+    EL_EMPTY,                          -1, -1
   },
+
   {
-    Ybug_w_n,                          FALSE,  FALSE,
-    EL_BUG,                            ACTION_TURNING_FROM_LEFT, MV_BIT_UP
+    Xboom_bug,                         FALSE,  FALSE,
+    EL_BUG,                            ACTION_EXPLODING, -1
   },
   {
-    Ybug_n_e,                          FALSE,  FALSE,
-    EL_BUG,                            ACTION_TURNING_FROM_UP, MV_BIT_RIGHT
+    Xboom_tank,                                FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_EXPLODING, -1
   },
   {
-    Ybug_e_s,                          FALSE,  FALSE,
-    EL_BUG,                            ACTION_TURNING_FROM_RIGHT, MV_BIT_DOWN
+    Xboom_android,                     FALSE,  FALSE,
+    EL_EMC_ANDROID,                    ACTION_OTHER, -1
   },
   {
-    Ybug_s_w,                          FALSE,  FALSE,
-    EL_BUG,                            ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT
+    Xboom_1,                           FALSE,  FALSE,
+    EL_DEFAULT,                                ACTION_EXPLODING, -1
   },
   {
-    Ybug_e_n,                          FALSE,  FALSE,
-    EL_BUG,                            ACTION_TURNING_FROM_RIGHT, MV_BIT_UP
+    Xboom_2,                           FALSE,  FALSE,
+    EL_DEFAULT,                                ACTION_EXPLODING, -1
   },
+
   {
-    Ybug_s_e,                          FALSE,  FALSE,
-    EL_BUG,                            ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT
+    Xblank,                            TRUE,   FALSE,
+    EL_EMPTY,                          -1, -1
   },
+
   {
-    Ybug_w_s,                          FALSE,  FALSE,
-    EL_BUG,                            ACTION_TURNING_FROM_LEFT, MV_BIT_DOWN
+    Xsplash_e,                         FALSE,  FALSE,
+    EL_ACID_SPLASH_RIGHT,              -1, -1
   },
   {
-    Ybug_n_w,                          FALSE,  FALSE,
-    EL_BUG,                            ACTION_TURNING_FROM_UP, MV_BIT_LEFT
+    Xsplash_w,                         FALSE,  FALSE,
+    EL_ACID_SPLASH_LEFT,               -1, -1
   },
+
   {
-    Ybug_stone,                                FALSE,  FALSE,
-    EL_BUG,                            ACTION_SMASHED_BY_ROCK, -1
+    Xplant,                            TRUE,   FALSE,
+    EL_EMC_PLANT,                      -1, -1
   },
   {
-    Ybug_spring,                       FALSE,  FALSE,
-    EL_BUG,                            ACTION_SMASHED_BY_SPRING, -1
+    Yplant,                            FALSE,  FALSE,
+    EL_EMC_PLANT,                      -1, -1
   },
+
   {
-    Xtank_1_n,                         TRUE,   FALSE,
-    EL_SPACESHIP_UP,                   -1, -1
+    Xacid_1,                           TRUE,   FALSE,
+    EL_ACID,                           -1, -1
   },
   {
-    Xtank_1_e,                         TRUE,   FALSE,
-    EL_SPACESHIP_RIGHT,                        -1, -1
+    Xacid_2,                           FALSE,  FALSE,
+    EL_ACID,                           -1, -1
   },
   {
-    Xtank_1_s,                         TRUE,   FALSE,
-    EL_SPACESHIP_DOWN,                 -1, -1
+    Xacid_3,                           FALSE,  FALSE,
+    EL_ACID,                           -1, -1
   },
   {
-    Xtank_1_w,                         TRUE,   FALSE,
-    EL_SPACESHIP_LEFT,                 -1, -1
+    Xacid_4,                           FALSE,  FALSE,
+    EL_ACID,                           -1, -1
   },
   {
-    Xtank_2_n,                         FALSE,  FALSE,
-    EL_SPACESHIP_UP,                   -1, -1
+    Xacid_5,                           FALSE,  FALSE,
+    EL_ACID,                           -1, -1
   },
   {
-    Xtank_2_e,                         FALSE,  FALSE,
-    EL_SPACESHIP_RIGHT,                        -1, -1
+    Xacid_6,                           FALSE,  FALSE,
+    EL_ACID,                           -1, -1
   },
   {
-    Xtank_2_s,                         FALSE,  FALSE,
-    EL_SPACESHIP_DOWN,                 -1, -1
+    Xacid_7,                           FALSE,  FALSE,
+    EL_ACID,                           -1, -1
   },
   {
-    Xtank_2_w,                         FALSE,  FALSE,
-    EL_SPACESHIP_LEFT,                 -1, -1
+    Xacid_8,                           FALSE,  FALSE,
+    EL_ACID,                           -1, -1
   },
+
   {
-    Ytank_n,                           FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_UP
+    Xfake_acid_1,                      TRUE,   FALSE,
+    EL_EMC_FAKE_ACID,                  -1, -1
   },
   {
-    Ytank_nB,                          FALSE,  TRUE,
-    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_UP
+    Xfake_acid_2,                      FALSE,  FALSE,
+    EL_EMC_FAKE_ACID,                  -1, -1
   },
   {
-    Ytank_e,                           FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_RIGHT
+    Xfake_acid_3,                      FALSE,  FALSE,
+    EL_EMC_FAKE_ACID,                  -1, -1
   },
   {
-    Ytank_eB,                          FALSE,  TRUE,
-    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_RIGHT
+    Xfake_acid_4,                      FALSE,  FALSE,
+    EL_EMC_FAKE_ACID,                  -1, -1
   },
   {
-    Ytank_s,                           FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_DOWN
+    Xfake_acid_5,                      FALSE,  FALSE,
+    EL_EMC_FAKE_ACID,                  -1, -1
   },
   {
-    Ytank_sB,                          FALSE,  TRUE,
-    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_DOWN
+    Xfake_acid_6,                      FALSE,  FALSE,
+    EL_EMC_FAKE_ACID,                  -1, -1
   },
   {
-    Ytank_w,                           FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_LEFT
+    Xfake_acid_7,                      FALSE,  FALSE,
+    EL_EMC_FAKE_ACID,                  -1, -1
   },
   {
-    Ytank_wB,                          FALSE,  TRUE,
-    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_LEFT
+    Xfake_acid_8,                      FALSE,  FALSE,
+    EL_EMC_FAKE_ACID,                  -1, -1
   },
+
   {
-    Ytank_w_n,                         FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_TURNING_FROM_LEFT, MV_BIT_UP
+    Xgrass,                            TRUE,   FALSE,
+    EL_EMC_GRASS,                      -1, -1
   },
   {
-    Ytank_n_e,                         FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_TURNING_FROM_UP, MV_BIT_RIGHT
+    Ygrass_nB,                         FALSE,  FALSE,
+    EL_EMC_GRASS,                      ACTION_DIGGING, MV_BIT_UP
   },
   {
-    Ytank_e_s,                         FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_TURNING_FROM_RIGHT, MV_BIT_DOWN
+    Ygrass_eB,                         FALSE,  FALSE,
+    EL_EMC_GRASS,                      ACTION_DIGGING, MV_BIT_RIGHT
   },
   {
-    Ytank_s_w,                         FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT
+    Ygrass_sB,                         FALSE,  FALSE,
+    EL_EMC_GRASS,                      ACTION_DIGGING, MV_BIT_DOWN
   },
   {
-    Ytank_e_n,                         FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_TURNING_FROM_RIGHT, MV_BIT_UP
+    Ygrass_wB,                         FALSE,  FALSE,
+    EL_EMC_GRASS,                      ACTION_DIGGING, MV_BIT_LEFT
   },
+
   {
-    Ytank_s_e,                         FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT
+    Xdirt,                             TRUE,   FALSE,
+    EL_SAND,                           -1, -1
   },
   {
-    Ytank_w_s,                         FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_TURNING_FROM_LEFT, MV_BIT_DOWN
+    Ydirt_nB,                          FALSE,  FALSE,
+    EL_SAND,                           ACTION_DIGGING, MV_BIT_UP
   },
   {
-    Ytank_n_w,                         FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_TURNING_FROM_UP, MV_BIT_LEFT
+    Ydirt_eB,                          FALSE,  FALSE,
+    EL_SAND,                           ACTION_DIGGING, MV_BIT_RIGHT
   },
   {
-    Ytank_stone,                       FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_SMASHED_BY_ROCK, -1
+    Ydirt_sB,                          FALSE,  FALSE,
+    EL_SAND,                           ACTION_DIGGING, MV_BIT_DOWN
   },
   {
-    Ytank_spring,                      FALSE,  FALSE,
-    EL_SPACESHIP,                      ACTION_SMASHED_BY_SPRING, -1
+    Ydirt_wB,                          FALSE,  FALSE,
+    EL_SAND,                           ACTION_DIGGING, MV_BIT_LEFT
   },
+
   {
     Xandroid,                          TRUE,   FALSE,
     EL_EMC_ANDROID,                    ACTION_ACTIVE, -1
@@ -6145,101 +5981,42 @@ em_object_mapping_list[] =
     EL_EMC_ANDROID,                    ACTION_GROWING, MV_BIT_DOWNRIGHT
   },
   {
-    Yandroid_seB,                      FALSE,  TRUE,
-    EL_EMC_ANDROID,                    ACTION_SHRINKING, MV_BIT_DOWNRIGHT
-  },
-  {
-    Yandroid_s,                                FALSE,  FALSE,
-    EL_EMC_ANDROID,                    ACTION_MOVING, MV_BIT_DOWN
-  },
-  {
-    Yandroid_sB,                       FALSE,  TRUE,
-    EL_EMC_ANDROID,                    ACTION_MOVING, MV_BIT_DOWN
-  },
-  {
-    Yandroid_sw,                       FALSE,  FALSE,
-    EL_EMC_ANDROID,                    ACTION_GROWING, MV_BIT_DOWNLEFT
-  },
-  {
-    Yandroid_swB,                      FALSE,  TRUE,
-    EL_EMC_ANDROID,                    ACTION_SHRINKING, MV_BIT_DOWNLEFT
-  },
-  {
-    Yandroid_w,                                FALSE,  FALSE,
-    EL_EMC_ANDROID,                    ACTION_MOVING, MV_BIT_LEFT
-  },
-  {
-    Yandroid_wB,                       FALSE,  TRUE,
-    EL_EMC_ANDROID,                    ACTION_MOVING, MV_BIT_LEFT
-  },
-  {
-    Yandroid_nw,                       FALSE,  FALSE,
-    EL_EMC_ANDROID,                    ACTION_GROWING, MV_BIT_UPLEFT
-  },
-  {
-    Yandroid_nwB,                      FALSE,  TRUE,
-    EL_EMC_ANDROID,                    ACTION_SHRINKING, MV_BIT_UPLEFT
-  },
-  {
-    Xspring,                           TRUE,   FALSE,
-    EL_SPRING,                         -1, -1
-  },
-  {
-    Xspring_pause,                     FALSE,  FALSE,
-    EL_SPRING,                         -1, -1
-  },
-  {
-    Xspring_e,                         FALSE,  FALSE,
-    EL_SPRING,                         -1, -1
-  },
-  {
-    Xspring_w,                         FALSE,  FALSE,
-    EL_SPRING,                         -1, -1
-  },
-  {
-    Xspring_fall,                      FALSE,  FALSE,
-    EL_SPRING,                         -1, -1
-  },
-  {
-    Yspring_s,                         FALSE,  FALSE,
-    EL_SPRING,                         ACTION_FALLING, -1
-  },
-  {
-    Yspring_sB,                                FALSE,  TRUE,
-    EL_SPRING,                         ACTION_FALLING, -1
+    Yandroid_seB,                      FALSE,  TRUE,
+    EL_EMC_ANDROID,                    ACTION_SHRINKING, MV_BIT_DOWNRIGHT
   },
   {
-    Yspring_e,                         FALSE,  FALSE,
-    EL_SPRING,                         ACTION_MOVING, MV_BIT_RIGHT
+    Yandroid_s,                                FALSE,  FALSE,
+    EL_EMC_ANDROID,                    ACTION_MOVING, MV_BIT_DOWN
   },
   {
-    Yspring_eB,                                FALSE,  TRUE,
-    EL_SPRING,                         ACTION_MOVING, MV_BIT_RIGHT
+    Yandroid_sB,                       FALSE,  TRUE,
+    EL_EMC_ANDROID,                    ACTION_MOVING, MV_BIT_DOWN
   },
   {
-    Yspring_w,                         FALSE,  FALSE,
-    EL_SPRING,                         ACTION_MOVING, MV_BIT_LEFT
+    Yandroid_sw,                       FALSE,  FALSE,
+    EL_EMC_ANDROID,                    ACTION_GROWING, MV_BIT_DOWNLEFT
   },
   {
-    Yspring_wB,                                FALSE,  TRUE,
-    EL_SPRING,                         ACTION_MOVING, MV_BIT_LEFT
+    Yandroid_swB,                      FALSE,  TRUE,
+    EL_EMC_ANDROID,                    ACTION_SHRINKING, MV_BIT_DOWNLEFT
   },
   {
-    Yspring_alien_e,                   FALSE,  FALSE,
-    EL_SPRING,                         ACTION_EATING, MV_BIT_RIGHT
+    Yandroid_w,                                FALSE,  FALSE,
+    EL_EMC_ANDROID,                    ACTION_MOVING, MV_BIT_LEFT
   },
   {
-    Yspring_alien_eB,                  FALSE,  TRUE,
-    EL_SPRING,                         ACTION_EATING, MV_BIT_RIGHT
+    Yandroid_wB,                       FALSE,  TRUE,
+    EL_EMC_ANDROID,                    ACTION_MOVING, MV_BIT_LEFT
   },
   {
-    Yspring_alien_w,                   FALSE,  FALSE,
-    EL_SPRING,                         ACTION_EATING, MV_BIT_LEFT
+    Yandroid_nw,                       FALSE,  FALSE,
+    EL_EMC_ANDROID,                    ACTION_GROWING, MV_BIT_UPLEFT
   },
   {
-    Yspring_alien_wB,                  FALSE,  TRUE,
-    EL_SPRING,                         ACTION_EATING, MV_BIT_LEFT
+    Yandroid_nwB,                      FALSE,  TRUE,
+    EL_EMC_ANDROID,                    ACTION_SHRINKING, MV_BIT_UPLEFT
   },
+
   {
     Xeater_n,                          TRUE,   FALSE,
     EL_YAMYAM_UP,                      -1, -1
@@ -6296,6 +6073,7 @@ em_object_mapping_list[] =
     Yeater_spring,                     FALSE,  FALSE,
     EL_YAMYAM,                         ACTION_SMASHED_BY_SPRING, -1
   },
+
   {
     Xalien,                            TRUE,   FALSE,
     EL_ROBOT,                          -1, -1
@@ -6344,6 +6122,217 @@ em_object_mapping_list[] =
     Yalien_spring,                     FALSE,  FALSE,
     EL_ROBOT,                          ACTION_SMASHED_BY_SPRING, -1
   },
+
+  {
+    Xbug_1_n,                          TRUE,   FALSE,
+    EL_BUG_UP,                         -1, -1
+  },
+  {
+    Xbug_1_e,                          TRUE,   FALSE,
+    EL_BUG_RIGHT,                      -1, -1
+  },
+  {
+    Xbug_1_s,                          TRUE,   FALSE,
+    EL_BUG_DOWN,                       -1, -1
+  },
+  {
+    Xbug_1_w,                          TRUE,   FALSE,
+    EL_BUG_LEFT,                       -1, -1
+  },
+  {
+    Xbug_2_n,                          FALSE,  FALSE,
+    EL_BUG_UP,                         -1, -1
+  },
+  {
+    Xbug_2_e,                          FALSE,  FALSE,
+    EL_BUG_RIGHT,                      -1, -1
+  },
+  {
+    Xbug_2_s,                          FALSE,  FALSE,
+    EL_BUG_DOWN,                       -1, -1
+  },
+  {
+    Xbug_2_w,                          FALSE,  FALSE,
+    EL_BUG_LEFT,                       -1, -1
+  },
+  {
+    Ybug_n,                            FALSE,  FALSE,
+    EL_BUG,                            ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Ybug_nB,                           FALSE,  TRUE,
+    EL_BUG,                            ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Ybug_e,                            FALSE,  FALSE,
+    EL_BUG,                            ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ybug_eB,                           FALSE,  TRUE,
+    EL_BUG,                            ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ybug_s,                            FALSE,  FALSE,
+    EL_BUG,                            ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Ybug_sB,                           FALSE,  TRUE,
+    EL_BUG,                            ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Ybug_w,                            FALSE,  FALSE,
+    EL_BUG,                            ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ybug_wB,                           FALSE,  TRUE,
+    EL_BUG,                            ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ybug_w_n,                          FALSE,  FALSE,
+    EL_BUG,                            ACTION_TURNING_FROM_LEFT, MV_BIT_UP
+  },
+  {
+    Ybug_n_e,                          FALSE,  FALSE,
+    EL_BUG,                            ACTION_TURNING_FROM_UP, MV_BIT_RIGHT
+  },
+  {
+    Ybug_e_s,                          FALSE,  FALSE,
+    EL_BUG,                            ACTION_TURNING_FROM_RIGHT, MV_BIT_DOWN
+  },
+  {
+    Ybug_s_w,                          FALSE,  FALSE,
+    EL_BUG,                            ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT
+  },
+  {
+    Ybug_e_n,                          FALSE,  FALSE,
+    EL_BUG,                            ACTION_TURNING_FROM_RIGHT, MV_BIT_UP
+  },
+  {
+    Ybug_s_e,                          FALSE,  FALSE,
+    EL_BUG,                            ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT
+  },
+  {
+    Ybug_w_s,                          FALSE,  FALSE,
+    EL_BUG,                            ACTION_TURNING_FROM_LEFT, MV_BIT_DOWN
+  },
+  {
+    Ybug_n_w,                          FALSE,  FALSE,
+    EL_BUG,                            ACTION_TURNING_FROM_UP, MV_BIT_LEFT
+  },
+  {
+    Ybug_stone,                                FALSE,  FALSE,
+    EL_BUG,                            ACTION_SMASHED_BY_ROCK, -1
+  },
+  {
+    Ybug_spring,                       FALSE,  FALSE,
+    EL_BUG,                            ACTION_SMASHED_BY_SPRING, -1
+  },
+
+  {
+    Xtank_1_n,                         TRUE,   FALSE,
+    EL_SPACESHIP_UP,                   -1, -1
+  },
+  {
+    Xtank_1_e,                         TRUE,   FALSE,
+    EL_SPACESHIP_RIGHT,                        -1, -1
+  },
+  {
+    Xtank_1_s,                         TRUE,   FALSE,
+    EL_SPACESHIP_DOWN,                 -1, -1
+  },
+  {
+    Xtank_1_w,                         TRUE,   FALSE,
+    EL_SPACESHIP_LEFT,                 -1, -1
+  },
+  {
+    Xtank_2_n,                         FALSE,  FALSE,
+    EL_SPACESHIP_UP,                   -1, -1
+  },
+  {
+    Xtank_2_e,                         FALSE,  FALSE,
+    EL_SPACESHIP_RIGHT,                        -1, -1
+  },
+  {
+    Xtank_2_s,                         FALSE,  FALSE,
+    EL_SPACESHIP_DOWN,                 -1, -1
+  },
+  {
+    Xtank_2_w,                         FALSE,  FALSE,
+    EL_SPACESHIP_LEFT,                 -1, -1
+  },
+  {
+    Ytank_n,                           FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Ytank_nB,                          FALSE,  TRUE,
+    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Ytank_e,                           FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ytank_eB,                          FALSE,  TRUE,
+    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ytank_s,                           FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Ytank_sB,                          FALSE,  TRUE,
+    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Ytank_w,                           FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ytank_wB,                          FALSE,  TRUE,
+    EL_SPACESHIP,                      ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ytank_w_n,                         FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_TURNING_FROM_LEFT, MV_BIT_UP
+  },
+  {
+    Ytank_n_e,                         FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_TURNING_FROM_UP, MV_BIT_RIGHT
+  },
+  {
+    Ytank_e_s,                         FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_TURNING_FROM_RIGHT, MV_BIT_DOWN
+  },
+  {
+    Ytank_s_w,                         FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT
+  },
+  {
+    Ytank_e_n,                         FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_TURNING_FROM_RIGHT, MV_BIT_UP
+  },
+  {
+    Ytank_s_e,                         FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT
+  },
+  {
+    Ytank_w_s,                         FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_TURNING_FROM_LEFT, MV_BIT_DOWN
+  },
+  {
+    Ytank_n_w,                         FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_TURNING_FROM_UP, MV_BIT_LEFT
+  },
+  {
+    Ytank_stone,                       FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_SMASHED_BY_ROCK, -1
+  },
+  {
+    Ytank_spring,                      FALSE,  FALSE,
+    EL_SPACESHIP,                      ACTION_SMASHED_BY_SPRING, -1
+  },
+
   {
     Xemerald,                          TRUE,   FALSE,
     EL_EMERALD,                                -1, -1
@@ -6388,10 +6377,7 @@ em_object_mapping_list[] =
     Yemerald_blank,                    FALSE,  FALSE,
     EL_EMERALD,                                ACTION_COLLECTING, -1
   },
-  {
-    Ynut_stone,                                FALSE,  FALSE,
-    EL_NUT,                            ACTION_BREAKING, -1
-  },
+
   {
     Xdiamond,                          TRUE,   FALSE,
     EL_DIAMOND,                                -1, -1
@@ -6440,38 +6426,44 @@ em_object_mapping_list[] =
     Ydiamond_stone,                    FALSE,  FALSE,
     EL_DIAMOND,                                ACTION_SMASHED_BY_ROCK, -1
   },
+
+  {
+    Xstone,                            TRUE,   FALSE,
+    EL_ROCK,                           -1, -1
+  },
   {
-    Xdrip_fall,                                TRUE,   FALSE,
-    EL_AMOEBA_DROP,                    -1, -1
+    Xstone_pause,                      FALSE,  FALSE,
+    EL_ROCK,                           -1, -1
   },
   {
-    Xdrip_stretch,                     FALSE,  FALSE,
-    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
+    Xstone_fall,                       FALSE,  FALSE,
+    EL_ROCK,                           -1, -1
   },
   {
-    Xdrip_stretchB,                    FALSE,  TRUE,
-    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
+    Ystone_s,                          FALSE,  FALSE,
+    EL_ROCK,                           ACTION_FALLING, -1
   },
   {
-    Xdrip,                             FALSE,  FALSE,
-    EL_AMOEBA_DROP,                    ACTION_GROWING, -1
+    Ystone_sB,                         FALSE,  TRUE,
+    EL_ROCK,                           ACTION_FALLING, -1
   },
   {
-    Ydrip_1_s,                         FALSE,  FALSE,
-    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
+    Ystone_e,                          FALSE,  FALSE,
+    EL_ROCK,                           ACTION_MOVING, MV_BIT_RIGHT
   },
   {
-    Ydrip_1_sB,                                FALSE,  TRUE,
-    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
+    Ystone_eB,                         FALSE,  TRUE,
+    EL_ROCK,                           ACTION_MOVING, MV_BIT_RIGHT
   },
   {
-    Ydrip_2_s,                         FALSE,  FALSE,
-    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
+    Ystone_w,                          FALSE,  FALSE,
+    EL_ROCK,                           ACTION_MOVING, MV_BIT_LEFT
   },
   {
-    Ydrip_2_sB,                                FALSE,  TRUE,
-    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
+    Ystone_wB,                         FALSE,  TRUE,
+    EL_ROCK,                           ACTION_MOVING, MV_BIT_LEFT
   },
+
   {
     Xbomb,                             TRUE,   FALSE,
     EL_BOMB,                           -1, -1
@@ -6512,465 +6504,523 @@ em_object_mapping_list[] =
     Ybomb_blank,                       FALSE,  FALSE,
     EL_BOMB,                           ACTION_ACTIVATING, -1
   },
+
   {
-    Xballoon,                          TRUE,   FALSE,
-    EL_BALLOON,                                -1, -1
+    Xnut,                              TRUE,   FALSE,
+    EL_NUT,                            -1, -1
   },
   {
-    Yballoon_n,                                FALSE,  FALSE,
-    EL_BALLOON,                                ACTION_MOVING, MV_BIT_UP
+    Xnut_pause,                                FALSE,  FALSE,
+    EL_NUT,                            -1, -1
   },
   {
-    Yballoon_nB,                       FALSE,  TRUE,
-    EL_BALLOON,                                ACTION_MOVING, MV_BIT_UP
+    Xnut_fall,                         FALSE,  FALSE,
+    EL_NUT,                            -1, -1
   },
   {
-    Yballoon_e,                                FALSE,  FALSE,
-    EL_BALLOON,                                ACTION_MOVING, MV_BIT_RIGHT
+    Ynut_s,                            FALSE,  FALSE,
+    EL_NUT,                            ACTION_FALLING, -1
   },
   {
-    Yballoon_eB,                       FALSE,  TRUE,
-    EL_BALLOON,                                ACTION_MOVING, MV_BIT_RIGHT
+    Ynut_sB,                           FALSE,  TRUE,
+    EL_NUT,                            ACTION_FALLING, -1
   },
   {
-    Yballoon_s,                                FALSE,  FALSE,
-    EL_BALLOON,                                ACTION_MOVING, MV_BIT_DOWN
+    Ynut_e,                            FALSE,  FALSE,
+    EL_NUT,                            ACTION_MOVING, MV_BIT_RIGHT
   },
   {
-    Yballoon_sB,                       FALSE,  TRUE,
-    EL_BALLOON,                                ACTION_MOVING, MV_BIT_DOWN
+    Ynut_eB,                           FALSE,  TRUE,
+    EL_NUT,                            ACTION_MOVING, MV_BIT_RIGHT
   },
   {
-    Yballoon_w,                                FALSE,  FALSE,
-    EL_BALLOON,                                ACTION_MOVING, MV_BIT_LEFT
+    Ynut_w,                            FALSE,  FALSE,
+    EL_NUT,                            ACTION_MOVING, MV_BIT_LEFT
   },
   {
-    Yballoon_wB,                       FALSE,  TRUE,
-    EL_BALLOON,                                ACTION_MOVING, MV_BIT_LEFT
+    Ynut_wB,                           FALSE,  TRUE,
+    EL_NUT,                            ACTION_MOVING, MV_BIT_LEFT
   },
   {
-    Xgrass,                            TRUE,   FALSE,
-    EL_EMC_GRASS,                      -1, -1
+    Ynut_stone,                                FALSE,  FALSE,
+    EL_NUT,                            ACTION_BREAKING, -1
   },
+
   {
-    Ygrass_nB,                         FALSE,  FALSE,
-    EL_EMC_GRASS,                      ACTION_DIGGING, MV_BIT_UP
+    Xspring,                           TRUE,   FALSE,
+    EL_SPRING,                         -1, -1
   },
   {
-    Ygrass_eB,                         FALSE,  FALSE,
-    EL_EMC_GRASS,                      ACTION_DIGGING, MV_BIT_RIGHT
+    Xspring_pause,                     FALSE,  FALSE,
+    EL_SPRING,                         -1, -1
   },
   {
-    Ygrass_sB,                         FALSE,  FALSE,
-    EL_EMC_GRASS,                      ACTION_DIGGING, MV_BIT_DOWN
+    Xspring_e,                         FALSE,  FALSE,
+    EL_SPRING,                         -1, -1
   },
   {
-    Ygrass_wB,                         FALSE,  FALSE,
-    EL_EMC_GRASS,                      ACTION_DIGGING, MV_BIT_LEFT
+    Xspring_w,                         FALSE,  FALSE,
+    EL_SPRING,                         -1, -1
   },
   {
-    Xdirt,                             TRUE,   FALSE,
-    EL_SAND,                           -1, -1
+    Xspring_fall,                      FALSE,  FALSE,
+    EL_SPRING,                         -1, -1
   },
   {
-    Ydirt_nB,                          FALSE,  FALSE,
-    EL_SAND,                           ACTION_DIGGING, MV_BIT_UP
+    Yspring_s,                         FALSE,  FALSE,
+    EL_SPRING,                         ACTION_FALLING, -1
   },
   {
-    Ydirt_eB,                          FALSE,  FALSE,
-    EL_SAND,                           ACTION_DIGGING, MV_BIT_RIGHT
+    Yspring_sB,                                FALSE,  TRUE,
+    EL_SPRING,                         ACTION_FALLING, -1
   },
   {
-    Ydirt_sB,                          FALSE,  FALSE,
-    EL_SAND,                           ACTION_DIGGING, MV_BIT_DOWN
+    Yspring_e,                         FALSE,  FALSE,
+    EL_SPRING,                         ACTION_MOVING, MV_BIT_RIGHT
   },
   {
-    Ydirt_wB,                          FALSE,  FALSE,
-    EL_SAND,                           ACTION_DIGGING, MV_BIT_LEFT
+    Yspring_eB,                                FALSE,  TRUE,
+    EL_SPRING,                         ACTION_MOVING, MV_BIT_RIGHT
   },
   {
-    Xacid_ne,                          TRUE,   FALSE,
-    EL_ACID_POOL_TOPRIGHT,             -1, -1
+    Yspring_w,                         FALSE,  FALSE,
+    EL_SPRING,                         ACTION_MOVING, MV_BIT_LEFT
   },
   {
-    Xacid_se,                          TRUE,   FALSE,
-    EL_ACID_POOL_BOTTOMRIGHT,          -1, -1
+    Yspring_wB,                                FALSE,  TRUE,
+    EL_SPRING,                         ACTION_MOVING, MV_BIT_LEFT
   },
   {
-    Xacid_s,                           TRUE,   FALSE,
-    EL_ACID_POOL_BOTTOM,               -1, -1
+    Yspring_alien_e,                   FALSE,  FALSE,
+    EL_SPRING,                         ACTION_EATING, MV_BIT_RIGHT
   },
   {
-    Xacid_sw,                          TRUE,   FALSE,
-    EL_ACID_POOL_BOTTOMLEFT,           -1, -1
+    Yspring_alien_eB,                  FALSE,  TRUE,
+    EL_SPRING,                         ACTION_EATING, MV_BIT_RIGHT
   },
   {
-    Xacid_nw,                          TRUE,   FALSE,
-    EL_ACID_POOL_TOPLEFT,              -1, -1
+    Yspring_alien_w,                   FALSE,  FALSE,
+    EL_SPRING,                         ACTION_EATING, MV_BIT_LEFT
   },
   {
-    Xacid_1,                           TRUE,   FALSE,
-    EL_ACID,                           -1, -1
+    Yspring_alien_wB,                  FALSE,  TRUE,
+    EL_SPRING,                         ACTION_EATING, MV_BIT_LEFT
   },
+
   {
-    Xacid_2,                           FALSE,  FALSE,
-    EL_ACID,                           -1, -1
+    Xpush_emerald_e,                   FALSE,  FALSE,
+    EL_EMERALD,                                -1, MV_BIT_RIGHT
   },
   {
-    Xacid_3,                           FALSE,  FALSE,
-    EL_ACID,                           -1, -1
+    Xpush_emerald_w,                   FALSE,  FALSE,
+    EL_EMERALD,                                -1, MV_BIT_LEFT
   },
   {
-    Xacid_4,                           FALSE,  FALSE,
-    EL_ACID,                           -1, -1
+    Xpush_diamond_e,                   FALSE,  FALSE,
+    EL_DIAMOND,                                -1, MV_BIT_RIGHT
   },
   {
-    Xacid_5,                           FALSE,  FALSE,
-    EL_ACID,                           -1, -1
+    Xpush_diamond_w,                   FALSE,  FALSE,
+    EL_DIAMOND,                                -1, MV_BIT_LEFT
   },
   {
-    Xacid_6,                           FALSE,  FALSE,
-    EL_ACID,                           -1, -1
+    Xpush_stone_e,                     FALSE,  FALSE,
+    EL_ROCK,                           -1, MV_BIT_RIGHT
   },
   {
-    Xacid_7,                           FALSE,  FALSE,
-    EL_ACID,                           -1, -1
+    Xpush_stone_w,                     FALSE,  FALSE,
+    EL_ROCK,                           -1, MV_BIT_LEFT
   },
   {
-    Xacid_8,                           FALSE,  FALSE,
-    EL_ACID,                           -1, -1
+    Xpush_bomb_e,                      FALSE,  FALSE,
+    EL_BOMB,                           -1, MV_BIT_RIGHT
   },
   {
-    Xball_1,                           TRUE,   FALSE,
-    EL_EMC_MAGIC_BALL,                 -1, -1
+    Xpush_bomb_w,                      FALSE,  FALSE,
+    EL_BOMB,                           -1, MV_BIT_LEFT
   },
   {
-    Yball_1,                           FALSE,  FALSE,
-    EL_EMC_MAGIC_BALL,                 ACTION_ACTIVE, -1
+    Xpush_nut_e,                       FALSE,  FALSE,
+    EL_NUT,                            -1, MV_BIT_RIGHT
   },
   {
-    Xball_2,                           FALSE,  FALSE,
-    EL_EMC_MAGIC_BALL,                 ACTION_ACTIVE, -1
+    Xpush_nut_w,                       FALSE,  FALSE,
+    EL_NUT,                            -1, MV_BIT_LEFT
   },
   {
-    Yball_2,                           FALSE,  FALSE,
-    EL_EMC_MAGIC_BALL,                 ACTION_ACTIVE, -1
+    Xpush_spring_e,                    FALSE,  FALSE,
+    EL_SPRING,                         -1, MV_BIT_RIGHT
   },
   {
-    Yball_blank,                       FALSE,  FALSE,
-    EL_EMC_MAGIC_BALL,                 ACTION_DROPPING, -1
+    Xpush_spring_w,                    FALSE,  FALSE,
+    EL_SPRING,                         -1, MV_BIT_LEFT
   },
+
   {
-    Ykey_1_blank,                      FALSE,  FALSE,
-    EL_EM_KEY_1,                       ACTION_COLLECTING, -1
+    Xdynamite,                         TRUE,   FALSE,
+    EL_EM_DYNAMITE,                    -1, -1
   },
   {
-    Ykey_2_blank,                      FALSE,  FALSE,
-    EL_EM_KEY_2,                       ACTION_COLLECTING, -1
+    Ydynamite_blank,                   FALSE,  FALSE,
+    EL_EM_DYNAMITE,                    ACTION_COLLECTING, -1
   },
   {
-    Ykey_3_blank,                      FALSE,  FALSE,
-    EL_EM_KEY_3,                       ACTION_COLLECTING, -1
+    Xdynamite_1,                       TRUE,   FALSE,
+    EL_EM_DYNAMITE_ACTIVE,             -1, -1
   },
   {
-    Ykey_4_blank,                      FALSE,  FALSE,
-    EL_EM_KEY_4,                       ACTION_COLLECTING, -1
+    Xdynamite_2,                       FALSE,  FALSE,
+    EL_EM_DYNAMITE_ACTIVE,             -1, -1
   },
   {
-    Ykey_5_blank,                      FALSE,  FALSE,
-    EL_EMC_KEY_5,                      ACTION_COLLECTING, -1
+    Xdynamite_3,                       FALSE,  FALSE,
+    EL_EM_DYNAMITE_ACTIVE,             -1, -1
   },
   {
-    Ykey_6_blank,                      FALSE,  FALSE,
-    EL_EMC_KEY_6,                      ACTION_COLLECTING, -1
+    Xdynamite_4,                       FALSE,  FALSE,
+    EL_EM_DYNAMITE_ACTIVE,             -1, -1
   },
+
   {
-    Ykey_7_blank,                      FALSE,  FALSE,
-    EL_EMC_KEY_7,                      ACTION_COLLECTING, -1
+    Xkey_1,                            TRUE,   FALSE,
+    EL_EM_KEY_1,                       -1, -1
   },
   {
-    Ykey_8_blank,                      FALSE,  FALSE,
-    EL_EMC_KEY_8,                      ACTION_COLLECTING, -1
+    Xkey_2,                            TRUE,   FALSE,
+    EL_EM_KEY_2,                       -1, -1
   },
   {
-    Ylenses_blank,                     FALSE,  FALSE,
-    EL_EMC_LENSES,                     ACTION_COLLECTING, -1
+    Xkey_3,                            TRUE,   FALSE,
+    EL_EM_KEY_3,                       -1, -1
+  },
+  {
+    Xkey_4,                            TRUE,   FALSE,
+    EL_EM_KEY_4,                       -1, -1
+  },
+  {
+    Xkey_5,                            TRUE,   FALSE,
+    EL_EMC_KEY_5,                      -1, -1
+  },
+  {
+    Xkey_6,                            TRUE,   FALSE,
+    EL_EMC_KEY_6,                      -1, -1
+  },
+  {
+    Xkey_7,                            TRUE,   FALSE,
+    EL_EMC_KEY_7,                      -1, -1
+  },
+  {
+    Xkey_8,                            TRUE,   FALSE,
+    EL_EMC_KEY_8,                      -1, -1
+  },
+
+  {
+    Xdoor_1,                           TRUE,   FALSE,
+    EL_EM_GATE_1,                      -1, -1
+  },
+  {
+    Xdoor_2,                           TRUE,   FALSE,
+    EL_EM_GATE_2,                      -1, -1
+  },
+  {
+    Xdoor_3,                           TRUE,   FALSE,
+    EL_EM_GATE_3,                      -1, -1
   },
   {
-    Ymagnify_blank,                    FALSE,  FALSE,
-    EL_EMC_MAGNIFIER,                  ACTION_COLLECTING, -1
+    Xdoor_4,                           TRUE,   FALSE,
+    EL_EM_GATE_4,                      -1, -1
   },
   {
-    Ygrass_blank,                      FALSE,  FALSE,
-    EL_EMC_GRASS,                      ACTION_SNAPPING, -1
+    Xdoor_5,                           TRUE,   FALSE,
+    EL_EMC_GATE_5,                     -1, -1
   },
   {
-    Ydirt_blank,                       FALSE,  FALSE,
-    EL_SAND,                           ACTION_SNAPPING, -1
+    Xdoor_6,                           TRUE,   FALSE,
+    EL_EMC_GATE_6,                     -1, -1
   },
   {
-    Xslidewall_ns,                     TRUE,   FALSE,
-    EL_EXPANDABLE_WALL_VERTICAL,       -1, -1
+    Xdoor_7,                           TRUE,   FALSE,
+    EL_EMC_GATE_7,                     -1, -1
   },
   {
-    Yslidewall_ns_blank,               FALSE,  FALSE,
-    EL_EXPANDABLE_WALL_VERTICAL,       ACTION_GROWING, -1
+    Xdoor_8,                           TRUE,   FALSE,
+    EL_EMC_GATE_8,                     -1, -1
   },
+
   {
-    Xslidewall_ew,                     TRUE,   FALSE,
-    EL_EXPANDABLE_WALL_HORIZONTAL,     -1, -1
+    Xfake_door_1,                      TRUE,   FALSE,
+    EL_EM_GATE_1_GRAY,                 -1, -1
   },
   {
-    Yslidewall_ew_blank,               FALSE,  FALSE,
-    EL_EXPANDABLE_WALL_HORIZONTAL,     ACTION_GROWING, -1
+    Xfake_door_2,                      TRUE,   FALSE,
+    EL_EM_GATE_2_GRAY,                 -1, -1
   },
   {
-    Xwonderwall,                       TRUE,   FALSE,
-    EL_MAGIC_WALL,                     -1, -1
+    Xfake_door_3,                      TRUE,   FALSE,
+    EL_EM_GATE_3_GRAY,                 -1, -1
   },
   {
-    XwonderwallB,                      FALSE,  FALSE,
-    EL_MAGIC_WALL,                     ACTION_ACTIVE, -1
+    Xfake_door_4,                      TRUE,   FALSE,
+    EL_EM_GATE_4_GRAY,                 -1, -1
   },
   {
-    Xamoeba_1,                         TRUE,   FALSE,
-    EL_AMOEBA_DRY,                     ACTION_OTHER, -1
+    Xfake_door_5,                      TRUE,   FALSE,
+    EL_EMC_GATE_5_GRAY,                        -1, -1
   },
   {
-    Xamoeba_2,                         FALSE,  FALSE,
-    EL_AMOEBA_DRY,                     ACTION_OTHER, -1
+    Xfake_door_6,                      TRUE,   FALSE,
+    EL_EMC_GATE_6_GRAY,                        -1, -1
   },
   {
-    Xamoeba_3,                         FALSE,  FALSE,
-    EL_AMOEBA_DRY,                     ACTION_OTHER, -1
+    Xfake_door_7,                      TRUE,   FALSE,
+    EL_EMC_GATE_7_GRAY,                        -1, -1
   },
   {
-    Xamoeba_4,                         FALSE,  FALSE,
-    EL_AMOEBA_DRY,                     ACTION_OTHER, -1
+    Xfake_door_8,                      TRUE,   FALSE,
+    EL_EMC_GATE_8_GRAY,                        -1, -1
   },
+
   {
-    Xamoeba_5,                         TRUE,   FALSE,
-    EL_AMOEBA_WET,                     ACTION_OTHER, -1
+    Xballoon,                          TRUE,   FALSE,
+    EL_BALLOON,                                -1, -1
   },
   {
-    Xamoeba_6,                         FALSE,  FALSE,
-    EL_AMOEBA_WET,                     ACTION_OTHER, -1
+    Yballoon_n,                                FALSE,  FALSE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_UP
   },
   {
-    Xamoeba_7,                         FALSE,  FALSE,
-    EL_AMOEBA_WET,                     ACTION_OTHER, -1
+    Yballoon_nB,                       FALSE,  TRUE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_UP
   },
   {
-    Xamoeba_8,                         FALSE,  FALSE,
-    EL_AMOEBA_WET,                     ACTION_OTHER, -1
+    Yballoon_e,                                FALSE,  FALSE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_RIGHT
   },
   {
-    Xdoor_1,                           TRUE,   FALSE,
-    EL_EM_GATE_1,                      -1, -1
+    Yballoon_eB,                       FALSE,  TRUE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_RIGHT
   },
   {
-    Xdoor_2,                           TRUE,   FALSE,
-    EL_EM_GATE_2,                      -1, -1
+    Yballoon_s,                                FALSE,  FALSE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_DOWN
   },
   {
-    Xdoor_3,                           TRUE,   FALSE,
-    EL_EM_GATE_3,                      -1, -1
+    Yballoon_sB,                       FALSE,  TRUE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_DOWN
   },
   {
-    Xdoor_4,                           TRUE,   FALSE,
-    EL_EM_GATE_4,                      -1, -1
+    Yballoon_w,                                FALSE,  FALSE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_LEFT
   },
   {
-    Xdoor_5,                           TRUE,   FALSE,
-    EL_EMC_GATE_5,                     -1, -1
+    Yballoon_wB,                       FALSE,  TRUE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_LEFT
   },
+
   {
-    Xdoor_6,                           TRUE,   FALSE,
-    EL_EMC_GATE_6,                     -1, -1
+    Xball_1,                           TRUE,   FALSE,
+    EL_EMC_MAGIC_BALL,                 -1, -1
   },
   {
-    Xdoor_7,                           TRUE,   FALSE,
-    EL_EMC_GATE_7,                     -1, -1
+    Yball_1,                           FALSE,  FALSE,
+    EL_EMC_MAGIC_BALL,                 ACTION_ACTIVE, -1
   },
   {
-    Xdoor_8,                           TRUE,   FALSE,
-    EL_EMC_GATE_8,                     -1, -1
+    Xball_2,                           FALSE,  FALSE,
+    EL_EMC_MAGIC_BALL,                 ACTION_ACTIVE, -1
   },
   {
-    Xkey_1,                            TRUE,   FALSE,
-    EL_EM_KEY_1,                       -1, -1
+    Yball_2,                           FALSE,  FALSE,
+    EL_EMC_MAGIC_BALL,                 ACTION_ACTIVE, -1
   },
   {
-    Xkey_2,                            TRUE,   FALSE,
-    EL_EM_KEY_2,                       -1, -1
+    Yball_blank,                       FALSE,  FALSE,
+    EL_EMC_MAGIC_BALL,                 ACTION_DROPPING, -1
   },
+
   {
-    Xkey_3,                            TRUE,   FALSE,
-    EL_EM_KEY_3,                       -1, -1
+    Xamoeba_1,                         TRUE,   FALSE,
+    EL_AMOEBA_DRY,                     ACTION_OTHER, -1
   },
   {
-    Xkey_4,                            TRUE,   FALSE,
-    EL_EM_KEY_4,                       -1, -1
+    Xamoeba_2,                         FALSE,  FALSE,
+    EL_AMOEBA_DRY,                     ACTION_OTHER, -1
   },
   {
-    Xkey_5,                            TRUE,   FALSE,
-    EL_EMC_KEY_5,                      -1, -1
+    Xamoeba_3,                         FALSE,  FALSE,
+    EL_AMOEBA_DRY,                     ACTION_OTHER, -1
   },
   {
-    Xkey_6,                            TRUE,   FALSE,
-    EL_EMC_KEY_6,                      -1, -1
+    Xamoeba_4,                         FALSE,  FALSE,
+    EL_AMOEBA_DRY,                     ACTION_OTHER, -1
   },
   {
-    Xkey_7,                            TRUE,   FALSE,
-    EL_EMC_KEY_7,                      -1, -1
+    Xamoeba_5,                         TRUE,   FALSE,
+    EL_AMOEBA_WET,                     ACTION_OTHER, -1
   },
   {
-    Xkey_8,                            TRUE,   FALSE,
-    EL_EMC_KEY_8,                      -1, -1
+    Xamoeba_6,                         FALSE,  FALSE,
+    EL_AMOEBA_WET,                     ACTION_OTHER, -1
   },
   {
-    Xwind_n,                           TRUE,   FALSE,
-    EL_BALLOON_SWITCH_UP,              -1, -1
+    Xamoeba_7,                         FALSE,  FALSE,
+    EL_AMOEBA_WET,                     ACTION_OTHER, -1
   },
   {
-    Xwind_e,                           TRUE,   FALSE,
-    EL_BALLOON_SWITCH_RIGHT,           -1, -1
+    Xamoeba_8,                         FALSE,  FALSE,
+    EL_AMOEBA_WET,                     ACTION_OTHER, -1
   },
+
   {
-    Xwind_s,                           TRUE,   FALSE,
-    EL_BALLOON_SWITCH_DOWN,            -1, -1
+    Xdrip,                             FALSE,  FALSE,
+    EL_AMOEBA_DROP,                    ACTION_GROWING, -1
   },
   {
-    Xwind_w,                           TRUE,   FALSE,
-    EL_BALLOON_SWITCH_LEFT,            -1, -1
+    Xdrip_fall,                                TRUE,   FALSE,
+    EL_AMOEBA_DROP,                    -1, -1
   },
   {
-    Xwind_any,                         TRUE,   FALSE,
-    EL_BALLOON_SWITCH_ANY,             -1, -1
+    Xdrip_stretch,                     FALSE,  FALSE,
+    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
   },
   {
-    Xwind_stop,                                TRUE,   FALSE,
-    EL_BALLOON_SWITCH_NONE,            -1, -1
+    Xdrip_stretchB,                    FALSE,  TRUE,
+    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
   },
   {
-    Xexit,                             TRUE,   FALSE,
-    EL_EM_EXIT_CLOSED,                 -1, -1
+    Ydrip_1_s,                         FALSE,  FALSE,
+    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
   },
   {
-    Xexit_1,                           TRUE,   FALSE,
-    EL_EM_EXIT_OPEN,                   -1, -1
+    Ydrip_1_sB,                                FALSE,  TRUE,
+    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
   },
   {
-    Xexit_2,                           FALSE,  FALSE,
-    EL_EM_EXIT_OPEN,                   -1, -1
+    Ydrip_2_s,                         FALSE,  FALSE,
+    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
   },
   {
-    Xexit_3,                           FALSE,  FALSE,
-    EL_EM_EXIT_OPEN,                   -1, -1
+    Ydrip_2_sB,                                FALSE,  TRUE,
+    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
   },
+
   {
-    Xdynamite,                         TRUE,   FALSE,
-    EL_EM_DYNAMITE,                    -1, -1
+    Xwonderwall,                       TRUE,   FALSE,
+    EL_MAGIC_WALL,                     -1, -1
   },
   {
-    Ydynamite_blank,                   FALSE,  FALSE,
-    EL_EM_DYNAMITE,                    ACTION_COLLECTING, -1
+    Ywonderwall,                       FALSE,  FALSE,
+    EL_MAGIC_WALL,                     ACTION_ACTIVE, -1
   },
+
   {
-    Xdynamite_1,                       TRUE,   FALSE,
-    EL_EM_DYNAMITE_ACTIVE,             -1, -1
+    Xwheel,                            TRUE,   FALSE,
+    EL_ROBOT_WHEEL,                    -1, -1
   },
   {
-    Xdynamite_2,                       FALSE,  FALSE,
-    EL_EM_DYNAMITE_ACTIVE,             -1, -1
+    Ywheel,                            FALSE,  FALSE,
+    EL_ROBOT_WHEEL,                    ACTION_ACTIVE, -1
   },
+
   {
-    Xdynamite_3,                       FALSE,  FALSE,
-    EL_EM_DYNAMITE_ACTIVE,             -1, -1
+    Xswitch,                           TRUE,   FALSE,
+    EL_EMC_MAGIC_BALL_SWITCH,          -1, -1
   },
   {
-    Xdynamite_4,                       FALSE,  FALSE,
-    EL_EM_DYNAMITE_ACTIVE,             -1, -1
+    Yswitch,                           FALSE,  FALSE,
+    EL_EMC_MAGIC_BALL_SWITCH,          ACTION_ACTIVE, -1
   },
+
   {
     Xbumper,                           TRUE,   FALSE,
     EL_EMC_SPRING_BUMPER,              -1, -1
   },
   {
-    XbumperB,                          FALSE,  FALSE,
+    Ybumper,                           FALSE,  FALSE,
     EL_EMC_SPRING_BUMPER,              ACTION_ACTIVE, -1
   },
+
   {
-    Xwheel,                            TRUE,   FALSE,
-    EL_ROBOT_WHEEL,                    -1, -1
+    Xacid_nw,                          TRUE,   FALSE,
+    EL_ACID_POOL_TOPLEFT,              -1, -1
   },
   {
-    XwheelB,                           FALSE,  FALSE,
-    EL_ROBOT_WHEEL,                    ACTION_ACTIVE, -1
+    Xacid_ne,                          TRUE,   FALSE,
+    EL_ACID_POOL_TOPRIGHT,             -1, -1
   },
   {
-    Xswitch,                           TRUE,   FALSE,
-    EL_EMC_MAGIC_BALL_SWITCH,          -1, -1
+    Xacid_sw,                          TRUE,   FALSE,
+    EL_ACID_POOL_BOTTOMLEFT,           -1, -1
   },
   {
-    XswitchB,                          FALSE,  FALSE,
-    EL_EMC_MAGIC_BALL_SWITCH,          ACTION_ACTIVE, -1
+    Xacid_s,                           TRUE,   FALSE,
+    EL_ACID_POOL_BOTTOM,               -1, -1
   },
   {
-    Xsand,                             TRUE,   FALSE,
-    EL_QUICKSAND_EMPTY,                        -1, -1
+    Xacid_se,                          TRUE,   FALSE,
+    EL_ACID_POOL_BOTTOMRIGHT,          -1, -1
   },
+
   {
-    Xsand_stone,                       TRUE,   FALSE,
-    EL_QUICKSAND_FULL,                 -1, -1
+    Xfake_blank,                       TRUE,   FALSE,
+    EL_INVISIBLE_WALL,                 -1, -1
   },
   {
-    Xsand_stonein_1,                   FALSE,  TRUE,
-    EL_ROCK,                           ACTION_FILLING, -1
+    Yfake_blank,                       FALSE,  FALSE,
+    EL_INVISIBLE_WALL,                 ACTION_ACTIVE, -1
   },
+
   {
-    Xsand_stonein_2,                   FALSE,  TRUE,
-    EL_ROCK,                           ACTION_FILLING, -1
+    Xfake_grass,                       TRUE,   FALSE,
+    EL_EMC_FAKE_GRASS,                 -1, -1
   },
   {
-    Xsand_stonein_3,                   FALSE,  TRUE,
-    EL_ROCK,                           ACTION_FILLING, -1
+    Yfake_grass,                       FALSE,  FALSE,
+    EL_EMC_FAKE_GRASS,                 ACTION_ACTIVE, -1
   },
+
   {
-    Xsand_stonein_4,                   FALSE,  TRUE,
-    EL_ROCK,                           ACTION_FILLING, -1
+    Xfake_amoeba,                      TRUE,   FALSE,
+    EL_EMC_DRIPPER,                    -1, -1
   },
   {
-    Xsand_stonesand_1,                 FALSE,  FALSE,
-    EL_QUICKSAND_EMPTYING,             -1, -1
+    Yfake_amoeba,                      FALSE,  FALSE,
+    EL_EMC_DRIPPER,                    ACTION_ACTIVE, -1
   },
+
   {
-    Xsand_stonesand_2,                 FALSE,  FALSE,
-    EL_QUICKSAND_EMPTYING,             -1, -1
+    Xlenses,                           TRUE,   FALSE,
+    EL_EMC_LENSES,                     -1, -1
+  },
+
+  {
+    Xmagnify,                          TRUE,   FALSE,
+    EL_EMC_MAGNIFIER,                  -1, -1
   },
+
   {
-    Xsand_stonesand_3,                 FALSE,  FALSE,
-    EL_QUICKSAND_EMPTYING,             -1, -1
+    Xsand,                             TRUE,   FALSE,
+    EL_QUICKSAND_EMPTY,                        -1, -1
   },
   {
-    Xsand_stonesand_4,                 FALSE,  FALSE,
-    EL_QUICKSAND_EMPTYING,             -1, -1
+    Xsand_stone,                       TRUE,   FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
   },
   {
-    Xsand_stonesand_quickout_1,                FALSE,  FALSE,
-    EL_QUICKSAND_EMPTYING,             -1, -1
+    Xsand_stonein_1,                   FALSE,  TRUE,
+    EL_ROCK,                           ACTION_FILLING, -1
   },
   {
-    Xsand_stonesand_quickout_2,                FALSE,  FALSE,
-    EL_QUICKSAND_EMPTYING,             -1, -1
+    Xsand_stonein_2,                   FALSE,  TRUE,
+    EL_ROCK,                           ACTION_FILLING, -1
   },
   {
-    Xsand_stoneout_1,                  FALSE,  FALSE,
-    EL_ROCK,                           ACTION_EMPTYING, -1
+    Xsand_stonein_3,                   FALSE,  TRUE,
+    EL_ROCK,                           ACTION_FILLING, -1
   },
   {
-    Xsand_stoneout_2,                  FALSE,  FALSE,
-    EL_ROCK,                           ACTION_EMPTYING, -1
+    Xsand_stonein_4,                   FALSE,  TRUE,
+    EL_ROCK,                           ACTION_FILLING, -1
   },
   {
     Xsand_sandstone_1,                 FALSE,  FALSE,
@@ -6989,125 +7039,102 @@ em_object_mapping_list[] =
     EL_QUICKSAND_FILLING,              -1, -1
   },
   {
-    Xplant,                            TRUE,   FALSE,
-    EL_EMC_PLANT,                      -1, -1
-  },
-  {
-    Yplant,                            FALSE,  FALSE,
-    EL_EMC_PLANT,                      -1, -1
-  },
-  {
-    Xlenses,                           TRUE,   FALSE,
-    EL_EMC_LENSES,                     -1, -1
-  },
-  {
-    Xmagnify,                          TRUE,   FALSE,
-    EL_EMC_MAGNIFIER,                  -1, -1
-  },
-  {
-    Xfake_amoeba,                      TRUE,   FALSE,
-    EL_EMC_DRIPPER,                    -1, -1
-  },
-  {
-    Xfake_amoebaB,                     FALSE,  FALSE,
-    EL_EMC_DRIPPER,                    ACTION_ACTIVE, -1
-  },
-  {
-    Xfake_blank,                       TRUE,   FALSE,
-    EL_INVISIBLE_WALL,                 -1, -1
-  },
-  {
-    Xfake_blankB,                      FALSE,  FALSE,
-    EL_INVISIBLE_WALL,                 ACTION_ACTIVE, -1
+    Xsand_stonesand_1,                 FALSE,  FALSE,
+    EL_QUICKSAND_EMPTYING,             -1, -1
   },
   {
-    Xfake_grass,                       TRUE,   FALSE,
-    EL_EMC_FAKE_GRASS,                 -1, -1
+    Xsand_stonesand_2,                 FALSE,  FALSE,
+    EL_QUICKSAND_EMPTYING,             -1, -1
   },
   {
-    Xfake_grassB,                      FALSE,  FALSE,
-    EL_EMC_FAKE_GRASS,                 ACTION_ACTIVE, -1
+    Xsand_stonesand_3,                 FALSE,  FALSE,
+    EL_QUICKSAND_EMPTYING,             -1, -1
   },
   {
-    Xfake_door_1,                      TRUE,   FALSE,
-    EL_EM_GATE_1_GRAY,                 -1, -1
+    Xsand_stonesand_4,                 FALSE,  FALSE,
+    EL_QUICKSAND_EMPTYING,             -1, -1
   },
   {
-    Xfake_door_2,                      TRUE,   FALSE,
-    EL_EM_GATE_2_GRAY,                 -1, -1
+    Xsand_stoneout_1,                  FALSE,  FALSE,
+    EL_ROCK,                           ACTION_EMPTYING, -1
   },
   {
-    Xfake_door_3,                      TRUE,   FALSE,
-    EL_EM_GATE_3_GRAY,                 -1, -1
+    Xsand_stoneout_2,                  FALSE,  FALSE,
+    EL_ROCK,                           ACTION_EMPTYING, -1
   },
   {
-    Xfake_door_4,                      TRUE,   FALSE,
-    EL_EM_GATE_4_GRAY,                 -1, -1
+    Xsand_stonesand_quickout_1,                FALSE,  FALSE,
+    EL_QUICKSAND_EMPTYING,             -1, -1
   },
   {
-    Xfake_door_5,                      TRUE,   FALSE,
-    EL_EMC_GATE_5_GRAY,                        -1, -1
+    Xsand_stonesand_quickout_2,                FALSE,  FALSE,
+    EL_QUICKSAND_EMPTYING,             -1, -1
   },
+
   {
-    Xfake_door_6,                      TRUE,   FALSE,
-    EL_EMC_GATE_6_GRAY,                        -1, -1
+    Xslide_ns,                         TRUE,   FALSE,
+    EL_EXPANDABLE_WALL_VERTICAL,       -1, -1
   },
   {
-    Xfake_door_7,                      TRUE,   FALSE,
-    EL_EMC_GATE_7_GRAY,                        -1, -1
+    Yslide_ns_blank,                   FALSE,  FALSE,
+    EL_EXPANDABLE_WALL_VERTICAL,       ACTION_GROWING, -1
   },
   {
-    Xfake_door_8,                      TRUE,   FALSE,
-    EL_EMC_GATE_8_GRAY,                        -1, -1
+    Xslide_ew,                         TRUE,   FALSE,
+    EL_EXPANDABLE_WALL_HORIZONTAL,     -1, -1
   },
   {
-    Xfake_acid_1,                      TRUE,   FALSE,
-    EL_EMC_FAKE_ACID,                  -1, -1
+    Yslide_ew_blank,                   FALSE,  FALSE,
+    EL_EXPANDABLE_WALL_HORIZONTAL,     ACTION_GROWING, -1
   },
+
   {
-    Xfake_acid_2,                      FALSE,  FALSE,
-    EL_EMC_FAKE_ACID,                  -1, -1
+    Xwind_n,                           TRUE,   FALSE,
+    EL_BALLOON_SWITCH_UP,              -1, -1
   },
   {
-    Xfake_acid_3,                      FALSE,  FALSE,
-    EL_EMC_FAKE_ACID,                  -1, -1
+    Xwind_e,                           TRUE,   FALSE,
+    EL_BALLOON_SWITCH_RIGHT,           -1, -1
   },
   {
-    Xfake_acid_4,                      FALSE,  FALSE,
-    EL_EMC_FAKE_ACID,                  -1, -1
+    Xwind_s,                           TRUE,   FALSE,
+    EL_BALLOON_SWITCH_DOWN,            -1, -1
   },
   {
-    Xfake_acid_5,                      FALSE,  FALSE,
-    EL_EMC_FAKE_ACID,                  -1, -1
+    Xwind_w,                           TRUE,   FALSE,
+    EL_BALLOON_SWITCH_LEFT,            -1, -1
   },
   {
-    Xfake_acid_6,                      FALSE,  FALSE,
-    EL_EMC_FAKE_ACID,                  -1, -1
+    Xwind_any,                         TRUE,   FALSE,
+    EL_BALLOON_SWITCH_ANY,             -1, -1
   },
   {
-    Xfake_acid_7,                      FALSE,  FALSE,
-    EL_EMC_FAKE_ACID,                  -1, -1
+    Xwind_stop,                                TRUE,   FALSE,
+    EL_BALLOON_SWITCH_NONE,            -1, -1
   },
+
   {
-    Xfake_acid_8,                      FALSE,  FALSE,
-    EL_EMC_FAKE_ACID,                  -1, -1
+    Xexit,                             TRUE,   FALSE,
+    EL_EM_EXIT_CLOSED,                 -1, -1
   },
   {
-    Xsteel_1,                          TRUE,   FALSE,
-    EL_STEELWALL,                      -1, -1
+    Xexit_1,                           TRUE,   FALSE,
+    EL_EM_EXIT_OPEN,                   -1, -1
   },
   {
-    Xsteel_2,                          TRUE,   FALSE,
-    EL_EMC_STEELWALL_2,                        -1, -1
+    Xexit_2,                           FALSE,  FALSE,
+    EL_EM_EXIT_OPEN,                   -1, -1
   },
   {
-    Xsteel_3,                          TRUE,   FALSE,
-    EL_EMC_STEELWALL_3,                        -1, -1
+    Xexit_3,                           FALSE,  FALSE,
+    EL_EM_EXIT_OPEN,                   -1, -1
   },
+
   {
-    Xsteel_4,                          TRUE,   FALSE,
-    EL_EMC_STEELWALL_4,                        -1, -1
+    Xpause,                            FALSE,  FALSE,
+    EL_EMPTY,                          -1, -1
   },
+
   {
     Xwall_1,                           TRUE,   FALSE,
     EL_WALL,                           -1, -1
@@ -7124,6 +7151,7 @@ em_object_mapping_list[] =
     Xwall_4,                           TRUE,   FALSE,
     EL_EMC_WALL_16,                    -1, -1
   },
+
   {
     Xroundwall_1,                      TRUE,   FALSE,
     EL_WALL_SLIPPERY,                  -1, -1
@@ -7140,6 +7168,24 @@ em_object_mapping_list[] =
     Xroundwall_4,                      TRUE,   FALSE,
     EL_EMC_WALL_SLIPPERY_4,            -1, -1
   },
+
+  {
+    Xsteel_1,                          TRUE,   FALSE,
+    EL_STEELWALL,                      -1, -1
+  },
+  {
+    Xsteel_2,                          TRUE,   FALSE,
+    EL_EMC_STEELWALL_2,                        -1, -1
+  },
+  {
+    Xsteel_3,                          TRUE,   FALSE,
+    EL_EMC_STEELWALL_3,                        -1, -1
+  },
+  {
+    Xsteel_4,                          TRUE,   FALSE,
+    EL_EMC_STEELWALL_4,                        -1, -1
+  },
+
   {
     Xdecor_1,                          TRUE,   FALSE,
     EL_EMC_WALL_8,                     -1, -1
@@ -7188,6 +7234,7 @@ em_object_mapping_list[] =
     Xdecor_12,                         TRUE,   FALSE,
     EL_EMC_WALL_12,                    -1, -1
   },
+
   {
     Xalpha_0,                          TRUE,   FALSE,
     EL_CHAR('0'),                      -1, -1
@@ -7374,40 +7421,52 @@ em_object_mapping_list[] =
   },
 
   {
-    Xboom_bug,                         FALSE,  FALSE,
-    EL_BUG,                            ACTION_EXPLODING, -1
+    Ykey_1_blank,                      FALSE,  FALSE,
+    EL_EM_KEY_1,                       ACTION_COLLECTING, -1
   },
   {
-    Xboom_bomb,                                FALSE,  FALSE,
-    EL_BOMB,                           ACTION_EXPLODING, -1
+    Ykey_2_blank,                      FALSE,  FALSE,
+    EL_EM_KEY_2,                       ACTION_COLLECTING, -1
   },
   {
-    Xboom_android,                     FALSE,  FALSE,
-    EL_EMC_ANDROID,                    ACTION_OTHER, -1
+    Ykey_3_blank,                      FALSE,  FALSE,
+    EL_EM_KEY_3,                       ACTION_COLLECTING, -1
   },
   {
-    Xboom_1,                           FALSE,  FALSE,
-    EL_DEFAULT,                                ACTION_EXPLODING, -1
+    Ykey_4_blank,                      FALSE,  FALSE,
+    EL_EM_KEY_4,                       ACTION_COLLECTING, -1
   },
   {
-    Xboom_2,                           FALSE,  FALSE,
-    EL_DEFAULT,                                ACTION_EXPLODING, -1
+    Ykey_5_blank,                      FALSE,  FALSE,
+    EL_EMC_KEY_5,                      ACTION_COLLECTING, -1
   },
   {
-    Znormal,                           FALSE,  FALSE,
-    EL_EMPTY,                          -1, -1
+    Ykey_6_blank,                      FALSE,  FALSE,
+    EL_EMC_KEY_6,                      ACTION_COLLECTING, -1
   },
   {
-    Zdynamite,                         FALSE,  FALSE,
-    EL_EMPTY,                          -1, -1
+    Ykey_7_blank,                      FALSE,  FALSE,
+    EL_EMC_KEY_7,                      ACTION_COLLECTING, -1
   },
   {
-    Zplayer,                           FALSE,  FALSE,
-    EL_EMPTY,                          -1, -1
+    Ykey_8_blank,                      FALSE,  FALSE,
+    EL_EMC_KEY_8,                      ACTION_COLLECTING, -1
   },
   {
-    Zborder,                           FALSE,  FALSE,
-    EL_EMPTY,                          -1, -1
+    Ylenses_blank,                     FALSE,  FALSE,
+    EL_EMC_LENSES,                     ACTION_COLLECTING, -1
+  },
+  {
+    Ymagnify_blank,                    FALSE,  FALSE,
+    EL_EMC_MAGNIFIER,                  ACTION_COLLECTING, -1
+  },
+  {
+    Ygrass_blank,                      FALSE,  FALSE,
+    EL_EMC_GRASS,                      ACTION_SNAPPING, -1
+  },
+  {
+    Ydirt_blank,                       FALSE,  FALSE,
+    EL_SAND,                           ACTION_SNAPPING, -1
   },
 
   {
@@ -7702,11 +7761,11 @@ int map_element_EM_to_RND(int element_em)
 void map_android_clone_elements_RND_to_EM(struct LevelInfo *level)
 {
   struct LevelInfo_EM *level_em = level->native_em_level;
-  struct LEVEL *lev = level_em->lev;
+  struct CAVE *cav = level_em->cav;
   int i, j;
 
   for (i = 0; i < TILE_MAX; i++)
-    lev->android_array[i] = Xblank;
+    cav->android_array[i] = Xblank;
 
   for (i = 0; i < level->num_android_clone_elements; i++)
   {
@@ -7715,21 +7774,21 @@ void map_android_clone_elements_RND_to_EM(struct LevelInfo *level)
 
     for (j = 0; em_object_mapping_list[j].element_em != -1; j++)
       if (em_object_mapping_list[j].element_rnd == element_rnd)
-       lev->android_array[em_object_mapping_list[j].element_em] = element_em;
+       cav->android_array[em_object_mapping_list[j].element_em] = element_em;
   }
 }
 
 void map_android_clone_elements_EM_to_RND(struct LevelInfo *level)
 {
   struct LevelInfo_EM *level_em = level->native_em_level;
-  struct LEVEL *lev = level_em->lev;
+  struct CAVE *cav = level_em->cav;
   int i, j;
 
   level->num_android_clone_elements = 0;
 
   for (i = 0; i < TILE_MAX; i++)
   {
-    int element_em = lev->android_array[i];
+    int element_em = cav->android_array[i];
     int element_rnd;
     boolean element_found = FALSE;
 
@@ -8170,21 +8229,6 @@ boolean getTeamMode_EM(void)
   return game.team_mode || network_playing;
 }
 
-int getGameFrameDelay_EM(int native_em_game_frame_delay)
-{
-  int game_frame_delay_value;
-
-  game_frame_delay_value =
-    (tape.playing && tape.fast_forward ? FfwdFrameDelay :
-     GameFrameDelay == GAME_FRAME_DELAY ? native_em_game_frame_delay :
-     GameFrameDelay);
-
-  if (tape.playing && tape.warp_forward && !tape.pausing)
-    game_frame_delay_value = 0;
-
-  return game_frame_delay_value;
-}
-
 unsigned int InitRND(int seed)
 {
   if (level.game_engine_type == GAME_ENGINE_TYPE_EM)
@@ -8213,8 +8257,8 @@ static int get_effective_element_EM(int tile, int frame_em)
   {
     switch (tile)
     {
-      case Xacid_splash_e:
-      case Xacid_splash_w:
+      case Xsplash_e:
+      case Xsplash_w:
        return (frame_em > 5 ? EL_EMPTY : element);
 
       default:
@@ -8225,8 +8269,8 @@ static int get_effective_element_EM(int tile, int frame_em)
   {
     switch (tile)
     {
-      case Xacid_splash_e:
-      case Xacid_splash_w:
+      case Xsplash_e:
+      case Xsplash_w:
        return EL_EMPTY;
 
       case Ynut_stone:
@@ -8294,8 +8338,8 @@ static boolean check_linear_animation_EM(int tile)
     case Ytank_s_e:
     case Ytank_w_s:
     case Ytank_n_w:
-    case Xacid_splash_e:
-    case Xacid_splash_w:
+    case Xsplash_e:
+    case Xsplash_w:
     case Ynut_stone:
       return TRUE;
   }
@@ -8542,19 +8586,6 @@ void InitGraphicInfo_EM(void)
 {
   int i, j, p;
 
-#if DEBUG_EM_GFX
-  int num_em_gfx_errors = 0;
-
-  if (graphic_info_em_object[0][0].bitmap == NULL)
-  {
-    // EM graphics not yet initialized in em_open_all()
-
-    return;
-  }
-
-  printf("::: [4 errors can be ignored (1 x 'bomb', 3 x 'em_dynamite']\n");
-#endif
-
   // always start with reliable default values
   for (i = 0; i < TILE_MAX; i++)
   {
@@ -8746,13 +8777,13 @@ void InitGraphicInfo_EM(void)
                        i == Xboom_bug && j == 5 ? 2 :
                        i == Xboom_bug && j == 6 ? 2 :
                        i == Xboom_bug && j == 7 ? 0 :
-                       i == Xboom_bomb && j == 1 ? 2 :
-                       i == Xboom_bomb && j == 2 ? 2 :
-                       i == Xboom_bomb && j == 3 ? 4 :
-                       i == Xboom_bomb && j == 4 ? 4 :
-                       i == Xboom_bomb && j == 5 ? 2 :
-                       i == Xboom_bomb && j == 6 ? 2 :
-                       i == Xboom_bomb && j == 7 ? 0 :
+                       i == Xboom_tank && j == 1 ? 2 :
+                       i == Xboom_tank && j == 2 ? 2 :
+                       i == Xboom_tank && j == 3 ? 4 :
+                       i == Xboom_tank && j == 4 ? 4 :
+                       i == Xboom_tank && j == 5 ? 2 :
+                       i == Xboom_tank && j == 6 ? 2 :
+                       i == Xboom_tank && j == 7 ? 0 :
                        i == Xboom_android && j == 7 ? 6 :
                        i == Xboom_1 && j == 1 ? 2 :
                        i == Xboom_1 && j == 2 ? 2 :
@@ -8772,13 +8803,6 @@ void InitGraphicInfo_EM(void)
                        special_animation && j == 4 ? 3 :
                        effective_action != action ? 0 :
                        j);
-
-#if DEBUG_EM_GFX
-      Bitmap *debug_bitmap = g_em->bitmap;
-      int debug_src_x = g_em->src_x;
-      int debug_src_y = g_em->src_y;
-#endif
-
       int frame = getAnimationFrame(g->anim_frames,
                                    g->anim_delay,
                                    g->anim_mode,
@@ -8874,74 +8898,6 @@ void InitGraphicInfo_EM(void)
         bit  5 -  0 ( 6 bit): graphic height */
       g_em->unique_identifier =
        (graphic << 16) | (frame << 12) | (g_em->width << 6) | g_em->height;
-
-#if DEBUG_EM_GFX
-
-      // skip check for EMC elements not contained in original EMC artwork
-      if (element == EL_EMC_FAKE_ACID)
-       continue;
-
-      if (g_em->bitmap != debug_bitmap ||
-         g_em->src_x != debug_src_x ||
-         g_em->src_y != debug_src_y ||
-         g_em->src_offset_x != 0 ||
-         g_em->src_offset_y != 0 ||
-         g_em->dst_offset_x != 0 ||
-         g_em->dst_offset_y != 0 ||
-         g_em->width != TILEX ||
-         g_em->height != TILEY)
-      {
-       static int last_i = -1;
-
-       if (i != last_i)
-       {
-         printf("\n");
-         last_i = i;
-       }
-
-       printf("::: EMC GFX ERROR for element %d -> %d ('%s', '%s', %d)",
-              i, element, element_info[element].token_name,
-              element_action_info[effective_action].suffix, direction);
-
-       if (element != effective_element)
-         printf(" [%d ('%s')]",
-                effective_element,
-                element_info[effective_element].token_name);
-
-       printf("\n");
-
-       if (g_em->bitmap != debug_bitmap)
-         printf("    %d (%d): different bitmap! (0x%08x != 0x%08x)\n",
-                j, is_backside, (int)(g_em->bitmap), (int)(debug_bitmap));
-
-       if (g_em->src_x != debug_src_x ||
-           g_em->src_y != debug_src_y)
-         printf("    frame %d (%c): %d,%d (%d,%d) should be %d,%d (%d,%d)\n",
-                j, (is_backside ? 'B' : 'F'),
-                g_em->src_x, g_em->src_y,
-                g_em->src_x / 32, g_em->src_y / 32,
-                debug_src_x, debug_src_y,
-                debug_src_x / 32, debug_src_y / 32);
-
-       if (g_em->src_offset_x != 0 ||
-           g_em->src_offset_y != 0 ||
-           g_em->dst_offset_x != 0 ||
-           g_em->dst_offset_y != 0)
-         printf("    %d (%d): offsets %d,%d and %d,%d should be all 0\n",
-                j, is_backside,
-                g_em->src_offset_x, g_em->src_offset_y,
-                g_em->dst_offset_x, g_em->dst_offset_y);
-
-       if (g_em->width != TILEX ||
-           g_em->height != TILEY)
-         printf("    %d (%d): size %d,%d should be %d,%d\n",
-                j, is_backside,
-                g_em->width, g_em->height, TILEX, TILEY);
-
-       num_em_gfx_errors++;
-      }
-#endif
-
     }
   }
 
@@ -9009,13 +8965,6 @@ void InitGraphicInfo_EM(void)
        Bitmap *src_bitmap;
        int src_x, src_y;
        int sync_frame = j;
-
-#if DEBUG_EM_GFX
-       Bitmap *debug_bitmap = g_em->bitmap;
-       int debug_src_x = g_em->src_x;
-       int debug_src_y = g_em->src_y;
-#endif
-
        int frame = getAnimationFrame(g->anim_frames,
                                      g->anim_delay,
                                      g->anim_mode,
@@ -9033,64 +8982,9 @@ void InitGraphicInfo_EM(void)
        g_em->dst_offset_y = 0;
        g_em->width  = TILEX;
        g_em->height = TILEY;
-
-#if DEBUG_EM_GFX
-
-       // skip check for EMC elements not contained in original EMC artwork
-       if (element == EL_PLAYER_3 ||
-           element == EL_PLAYER_4)
-         continue;
-
-       if (g_em->bitmap != debug_bitmap ||
-           g_em->src_x != debug_src_x ||
-           g_em->src_y != debug_src_y)
-       {
-         static int last_i = -1;
-
-         if (i != last_i)
-         {
-           printf("\n");
-           last_i = i;
-         }
-
-         printf("::: EMC GFX ERROR for p/a %d/%d -> %d ('%s', '%s', %d)",
-                p, i, element, element_info[element].token_name,
-                element_action_info[effective_action].suffix, direction);
-
-         if (element != effective_element)
-           printf(" [%d ('%s')]",
-                  effective_element,
-                  element_info[effective_element].token_name);
-
-         printf("\n");
-
-         if (g_em->bitmap != debug_bitmap)
-           printf("    %d: different bitmap! (0x%08x != 0x%08x)\n",
-                  j, (int)(g_em->bitmap), (int)(debug_bitmap));
-
-         if (g_em->src_x != debug_src_x ||
-             g_em->src_y != debug_src_y)
-           printf("    frame %d: %d,%d (%d,%d) should be %d,%d (%d,%d)\n",
-                  j,
-                  g_em->src_x, g_em->src_y,
-                  g_em->src_x / 32, g_em->src_y / 32,
-                  debug_src_x, debug_src_y,
-                  debug_src_x / 32, debug_src_y / 32);
-
-         num_em_gfx_errors++;
-       }
-#endif
-
       }
     }
   }
-
-#if DEBUG_EM_GFX
-  printf("\n");
-  printf("::: [%d errors found]\n", num_em_gfx_errors);
-
-  exit(0);
-#endif
 }
 
 static void CheckSaveEngineSnapshot_EM(byte action[MAX_PLAYERS], int frame,