rnd-20040928-1-src
[rocksndiamonds.git] / src / tools.c
index ab5086c0703788f08aacb0df01be8cf4d06ed33d..c950c871347cc29cc0c7f0bdebee7027f5eaf07d 100644 (file)
@@ -2891,6 +2891,1643 @@ static void HandleToolButtons(struct GadgetInfo *gi)
   request_gadget_id = gi->custom_id;
 }
 
+#if 1
+
+static struct
+{
+  int element_em;
+  boolean is_rnd_to_em_mapping;
+
+  int element_rnd;
+  int action;
+  int direction;
+}
+mapping_EM_to_RND_list[] =
+{
+  {
+    Xblank,                            TRUE,
+    EL_EMPTY,                          -1, -1
+  },
+  {
+    Yacid_splash_eB,                   FALSE,
+    EL_EMPTY,                          -1, -1
+  },
+  {
+    Yacid_splash_wB,                   FALSE,
+    EL_EMPTY,                          -1, -1
+  },
+
+#ifdef EM_ENGINE_BAD_ROLL
+  {
+    Xstone_force_e,                    FALSE,
+    EL_ROCK,                           ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xstone_force_w,                    FALSE,
+    EL_ROCK,                           ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xnut_force_e,                      FALSE,
+    EL_NUT,                            ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xnut_force_w,                      FALSE,
+    EL_NUT,                            ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xspring_force_e,                   FALSE,
+    EL_SPRING,                         ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xspring_force_w,                   FALSE,
+    EL_SPRING,                         ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xemerald_force_e,                  FALSE,
+    EL_EMERALD,                                ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xemerald_force_w,                  FALSE,
+    EL_EMERALD,                                ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xdiamond_force_e,                  FALSE,
+    EL_DIAMOND,                                ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xdiamond_force_w,                  FALSE,
+    EL_DIAMOND,                                ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xbomb_force_e,                     FALSE,
+    EL_BOMB,                           ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xbomb_force_w,                     FALSE,
+    EL_BOMB,                           ACTION_MOVING, MV_BIT_LEFT
+  },
+#endif
+
+  {
+    Xstone,                            TRUE,
+    EL_ROCK,                           -1, -1
+  },
+  {
+    Xstone_pause,                      FALSE,
+    EL_ROCK,                           -1, -1
+  },
+  {
+    Xstone_fall,                       FALSE,
+    EL_ROCK,                           ACTION_FALLING, -1
+  },
+  {
+    Ystone_s,                          FALSE,
+    EL_ROCK,                           ACTION_FALLING, -1
+  },
+  {
+    Ystone_sB,                         FALSE,
+    EL_ROCK,                           ACTION_FALLING, -1
+  },
+  {
+    Ystone_e,                          FALSE,
+    EL_ROCK,                           ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ystone_eB,                         FALSE,
+    EL_ROCK,                           ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ystone_w,                          FALSE,
+    EL_ROCK,                           ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ystone_wB,                         FALSE,
+    EL_ROCK,                           ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xnut,                              TRUE,
+    EL_NUT,                            -1, -1
+  },
+  {
+    Xnut_pause,                                FALSE,
+    EL_NUT,                            -1, -1
+  },
+  {
+    Xnut_fall,                         FALSE,
+    EL_NUT,                            ACTION_FALLING, -1
+  },
+  {
+    Ynut_s,                            FALSE,
+    EL_NUT,                            ACTION_FALLING, -1
+  },
+  {
+    Ynut_sB,                           FALSE,
+    EL_NUT,                            ACTION_FALLING, -1
+  },
+  {
+    Ynut_e,                            FALSE,
+    EL_NUT,                            ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ynut_eB,                           FALSE,
+    EL_NUT,                            ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ynut_w,                            FALSE,
+    EL_NUT,                            ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ynut_wB,                           FALSE,
+    EL_NUT,                            ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xbug_n,                            TRUE,
+    EL_BUG_UP,                         ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Xbug_e,                            TRUE,
+    EL_BUG_RIGHT,                      ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xbug_s,                            TRUE,
+    EL_BUG_DOWN,                       ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Xbug_w,                            TRUE,
+    EL_BUG_LEFT,                       ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xbug_gon,                          FALSE,
+    EL_BUG_UP,                         ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Xbug_goe,                          FALSE,
+    EL_BUG_RIGHT,                      ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xbug_gos,                          FALSE,
+    EL_BUG_DOWN,                       ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Xbug_gow,                          FALSE,
+    EL_BUG_LEFT,                       ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ybug_n,                            FALSE,
+    EL_BUG_UP,                         ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Ybug_nB,                           FALSE,
+    EL_BUG_UP,                         ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Ybug_e,                            FALSE,
+    EL_BUG_RIGHT,                      ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ybug_eB,                           FALSE,
+    EL_BUG_RIGHT,                      ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ybug_s,                            FALSE,
+    EL_BUG_DOWN,                       ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Ybug_sB,                           FALSE,
+    EL_BUG_DOWN,                       ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Ybug_w,                            FALSE,
+    EL_BUG_LEFT,                       ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ybug_wB,                           FALSE,
+    EL_BUG_LEFT,                       ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ybug_w_n,                          FALSE,
+    EL_BUG_UP,                         ACTION_TURNING_FROM_LEFT, MV_BIT_UP
+  },
+  {
+    Ybug_n_e,                          FALSE,
+    EL_BUG_RIGHT,                      ACTION_TURNING_FROM_UP, MV_BIT_RIGHT
+  },
+  {
+    Ybug_e_s,                          FALSE,
+    EL_BUG_DOWN,                       ACTION_TURNING_FROM_RIGHT, MV_BIT_DOWN
+  },
+  {
+    Ybug_s_w,                          FALSE,
+    EL_BUG_LEFT,                       ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT
+  },
+  {
+    Ybug_e_n,                          FALSE,
+    EL_BUG_UP,                         ACTION_TURNING_FROM_RIGHT, MV_BIT_UP
+  },
+  {
+    Ybug_s_e,                          FALSE,
+    EL_BUG_RIGHT,                      ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT
+  },
+  {
+    Ybug_w_s,                          FALSE,
+    EL_BUG_DOWN,                       ACTION_TURNING_FROM_LEFT, MV_BIT_DOWN
+  },
+  {
+    Ybug_n_w,                          FALSE,
+    EL_BUG_LEFT,                       ACTION_TURNING_FROM_UP, MV_BIT_LEFT
+  },
+  {
+    Ybug_stone,                                FALSE,
+    EL_ROCK,                           -1, -1
+  },
+  {
+    Ybug_spring,                       FALSE,
+    EL_SPRING,                         -1, -1
+  },
+  {
+    Xtank_n,                           TRUE,
+    EL_SPACESHIP_UP,                   ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Xtank_e,                           TRUE,
+    EL_SPACESHIP_RIGHT,                        ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xtank_s,                           TRUE,
+    EL_SPACESHIP_DOWN,                 ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Xtank_w,                           TRUE,
+    EL_SPACESHIP_LEFT,                 ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xtank_gon,                         FALSE,
+    EL_SPACESHIP_UP,                   ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Xtank_goe,                         FALSE,
+    EL_SPACESHIP_RIGHT,                        ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xtank_gos,                         FALSE,
+    EL_SPACESHIP_DOWN,                 ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Xtank_gow,                         FALSE,
+    EL_SPACESHIP_LEFT,                 ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ytank_n,                           FALSE,
+    EL_SPACESHIP_UP,                   ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Ytank_nB,                          FALSE,
+    EL_SPACESHIP_UP,                   ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Ytank_e,                           FALSE,
+    EL_SPACESHIP_RIGHT,                        ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ytank_eB,                          FALSE,
+    EL_SPACESHIP_RIGHT,                        ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ytank_s,                           FALSE,
+    EL_SPACESHIP_DOWN,                 ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Ytank_sB,                          FALSE,
+    EL_SPACESHIP_DOWN,                 ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Ytank_w,                           FALSE,
+    EL_SPACESHIP_LEFT,                 ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ytank_wB,                          FALSE,
+    EL_SPACESHIP_LEFT,                 ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ytank_w_n,                         FALSE,
+    EL_SPACESHIP_UP,                   ACTION_TURNING_FROM_LEFT, MV_BIT_UP
+  },
+  {
+    Ytank_n_e,                         FALSE,
+    EL_SPACESHIP_RIGHT,                        ACTION_TURNING_FROM_UP, MV_BIT_RIGHT
+  },
+  {
+    Ytank_e_s,                         FALSE,
+    EL_SPACESHIP_DOWN,                 ACTION_TURNING_FROM_RIGHT, MV_BIT_DOWN
+  },
+  {
+    Ytank_s_w,                         FALSE,
+    EL_SPACESHIP_LEFT,                 ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT
+  },
+  {
+    Ytank_e_n,                         FALSE,
+    EL_SPACESHIP_UP,                   ACTION_TURNING_FROM_RIGHT, MV_BIT_UP
+  },
+  {
+    Ytank_s_e,                         FALSE,
+    EL_SPACESHIP_RIGHT,                        ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT
+  },
+  {
+    Ytank_w_s,                         FALSE,
+    EL_SPACESHIP_DOWN,                 ACTION_TURNING_FROM_LEFT, MV_BIT_DOWN
+  },
+  {
+    Ytank_n_w,                         FALSE,
+    EL_SPACESHIP_LEFT,                 ACTION_TURNING_FROM_UP, MV_BIT_LEFT
+  },
+  {
+    Ytank_stone,                       FALSE,
+    EL_ROCK,                           -1, -1
+  },
+  {
+    Ytank_spring,                      FALSE,
+    EL_SPRING,                         -1, -1
+  },
+  {
+    Xandroid,                          TRUE,
+    EL_EMC_ANDROID,                    -1, -1
+  },
+  {
+    Xandroid_1_n,                      TRUE,
+    EL_EMC_ANDROID_UP,                 ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Xandroid_2_n,                      FALSE,
+    EL_EMC_ANDROID_UP,                 ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Xandroid_1_e,                      TRUE,
+    EL_EMC_ANDROID_RIGHT,              ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xandroid_2_e,                      FALSE,
+    EL_EMC_ANDROID_RIGHT,              ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xandroid_1_w,                      TRUE,
+    EL_EMC_ANDROID_LEFT,               ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xandroid_2_w,                      FALSE,
+    EL_EMC_ANDROID_LEFT,               ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xandroid_1_s,                      TRUE,
+    EL_EMC_ANDROID_DOWN,               ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Xandroid_2_s,                      FALSE,
+    EL_EMC_ANDROID_DOWN,               ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Yandroid_n,                                FALSE,
+    EL_EMC_ANDROID_UP,                 ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Yandroid_nB,                       FALSE,
+    EL_EMC_ANDROID_UP,                 ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Yandroid_ne,                       FALSE,
+    EL_EMC_ANDROID_RIGHT_UP,   
+  },
+  {
+    Yandroid_neB,                      FALSE,
+    EL_EMC_ANDROID_RIGHT_UP,           -1, -1
+  },
+  {
+    Yandroid_e,                                FALSE,
+    EL_EMC_ANDROID_RIGHT,              ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Yandroid_eB,                       FALSE,
+    EL_EMC_ANDROID_RIGHT,              ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Yandroid_se,                       FALSE,
+    EL_EMC_ANDROID_RIGHT_DOWN,         -1, -1
+  },
+  {
+    Yandroid_seB,                      FALSE,
+    EL_EMC_ANDROID_RIGHT_DOWN,         -1, -1
+  },
+  {
+    Yandroid_s,                                FALSE,
+    EL_EMC_ANDROID_DOWN,               ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Yandroid_sB,                       FALSE,
+    EL_EMC_ANDROID_DOWN,               ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Yandroid_sw,                       FALSE,
+    EL_EMC_ANDROID_LEFT_DOWN,          -1, -1
+  },
+  {
+    Yandroid_swB,                      FALSE,
+    EL_EMC_ANDROID_LEFT_DOWN,          -1, -1
+  },
+  {
+    Yandroid_w,                                FALSE,
+    EL_EMC_ANDROID_LEFT,               ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Yandroid_wB,                       FALSE,
+    EL_EMC_ANDROID_LEFT,               ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Yandroid_nw,                       FALSE,
+    EL_EMC_ANDROID_LEFT_UP,            -1, -1
+  },
+  {
+    Yandroid_nwB,                      FALSE,
+    EL_EMC_ANDROID_LEFT_UP,            -1, -1
+  },
+  {
+    Xspring,                           TRUE,
+    EL_SPRING,                         -1, -1
+  },
+  {
+    Xspring_pause,                     FALSE,
+    EL_SPRING,                         -1, -1
+  },
+  {
+    Xspring_e,                         FALSE,
+    EL_SPRING,                         ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xspring_w,                         FALSE,
+    EL_SPRING,                         ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xspring_fall,                      FALSE,
+    EL_SPRING,                         ACTION_FALLING, -1
+  },
+  {
+    Yspring_s,                         FALSE,
+    EL_SPRING,                         ACTION_FALLING, -1
+  },
+  {
+    Yspring_sB,                                FALSE,
+    EL_SPRING,                         ACTION_FALLING, -1
+  },
+  {
+    Yspring_e,                         FALSE,
+    EL_SPRING,                         ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Yspring_eB,                                FALSE,
+    EL_SPRING,                         ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Yspring_w,                         FALSE,
+    EL_SPRING,                         ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Yspring_wB,                                FALSE,
+    EL_SPRING,                         ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Yspring_kill_e,                    FALSE,
+    EL_SPRING,                         -1, -1
+  },
+  {
+    Yspring_kill_eB,                   FALSE,
+    EL_SPRING,                         -1, -1
+  },
+  {
+    Yspring_kill_w,                    FALSE,
+    EL_SPRING,                         -1, -1
+  },
+  {
+    Yspring_kill_wB,                   FALSE,
+    EL_SPRING,                         -1, -1
+  },
+  {
+    Xeater_n,                          TRUE,
+    EL_YAMYAM,                         ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Xeater_e,                          FALSE,
+    EL_YAMYAM,                         ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Xeater_w,                          FALSE,
+    EL_YAMYAM,                         ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xeater_s,                          FALSE,
+    EL_YAMYAM,                         ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Yeater_n,                          FALSE,
+    EL_YAMYAM,                         ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Yeater_nB,                         FALSE,
+    EL_YAMYAM,                         ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Yeater_e,                          FALSE,
+    EL_YAMYAM,                         ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Yeater_eB,                         FALSE,
+    EL_YAMYAM,                         ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Yeater_s,                          FALSE,
+    EL_YAMYAM,                         ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Yeater_sB,                         FALSE,
+    EL_YAMYAM,                         ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Yeater_w,                          FALSE,
+    EL_YAMYAM,                         ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Yeater_wB,                         FALSE,
+    EL_YAMYAM,                         ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Yeater_stone,                      FALSE,
+    EL_ROCK,                           -1, -1
+  },
+  {
+    Yeater_spring,                     FALSE,
+    EL_SPRING,                         -1, -1
+  },
+  {
+    Xalien,                            TRUE,
+    EL_ROBOT,                          -1, -1
+  },
+  {
+    Xalien_pause,                      FALSE,
+    EL_ROBOT,                          -1, -1
+  },
+  {
+    Yalien_n,                          FALSE,
+    EL_ROBOT,                          ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Yalien_nB,                         FALSE,
+    EL_ROBOT,                          ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Yalien_e,                          FALSE,
+    EL_ROBOT,                          ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Yalien_eB,                         FALSE,
+    EL_ROBOT,                          ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Yalien_s,                          FALSE,
+    EL_ROBOT,                          ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Yalien_sB,                         FALSE,
+    EL_ROBOT,                          ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Yalien_w,                          FALSE,
+    EL_ROBOT,                          ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Yalien_wB,                         FALSE,
+    EL_ROBOT,                          ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Yalien_stone,                      FALSE,
+    EL_ROCK,                           -1, -1
+  },
+  {
+    Yalien_spring,                     FALSE,
+    EL_SPRING,                         -1, -1
+  },
+  {
+    Xemerald,                          TRUE,
+    EL_EMERALD,                                -1, -1
+  },
+  {
+    Xemerald_pause,                    FALSE,
+    EL_EMERALD,                                -1, -1
+  },
+  {
+    Xemerald_fall,                     FALSE,
+    EL_EMERALD,                                ACTION_FALLING, -1
+  },
+  {
+    Xemerald_shine,                    FALSE,
+    EL_EMERALD,                                -1, -1
+  },
+  {
+    Yemerald_s,                                FALSE,
+    EL_EMERALD,                                ACTION_FALLING, -1
+  },
+  {
+    Yemerald_sB,                       FALSE,
+    EL_EMERALD,                                ACTION_FALLING, -1
+  },
+  {
+    Yemerald_e,                                FALSE,
+    EL_EMERALD,                                ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Yemerald_eB,                       FALSE,
+    EL_EMERALD,                                ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Yemerald_w,                                FALSE,
+    EL_EMERALD,                                ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Yemerald_wB,                       FALSE,
+    EL_EMERALD,                                ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Yemerald_eat,                      FALSE,
+    EL_EMERALD,                                -1, -1
+  },
+  {
+    Yemerald_stone,                    FALSE,
+    EL_ROCK,                           -1, -1
+  },
+  {
+    Xdiamond,                          TRUE,
+    EL_DIAMOND,                                -1, -1
+  },
+  {
+    Xdiamond_pause,                    FALSE,
+    EL_DIAMOND,                                -1, -1
+  },
+  {
+    Xdiamond_fall,                     FALSE,
+    EL_DIAMOND,                                ACTION_FALLING, -1
+  },
+  {
+    Xdiamond_shine,                    FALSE,
+    EL_DIAMOND,                                -1, -1
+  },
+  {
+    Ydiamond_s,                                FALSE,
+    EL_DIAMOND,                                ACTION_FALLING, -1
+  },
+  {
+    Ydiamond_sB,                       FALSE,
+    EL_DIAMOND,                                ACTION_FALLING, -1
+  },
+  {
+    Ydiamond_e,                                FALSE,
+    EL_DIAMOND,                                ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ydiamond_eB,                       FALSE,
+    EL_DIAMOND,                                ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ydiamond_w,                                FALSE,
+    EL_DIAMOND,                                ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ydiamond_wB,                       FALSE,
+    EL_DIAMOND,                                ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ydiamond_eat,                      FALSE,
+    EL_DIAMOND,                                -1, -1
+  },
+  {
+    Ydiamond_stone,                    FALSE,
+    EL_ROCK,                           -1, -1
+  },
+  {
+    Xdrip_fall,                                TRUE,
+    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
+  },
+  {
+    Xdrip_stretch,                     FALSE,
+    EL_AMOEBA_DROP,                    -1, -1
+  },
+  {
+    Xdrip_stretchB,                    FALSE,
+    EL_AMOEBA_DROP,                    -1, -1
+  },
+  {
+    Xdrip_eat,                         FALSE,
+    EL_AMOEBA_DROP,                    -1, -1
+  },
+  {
+    Ydrip_s1,                          FALSE,
+    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
+  },
+  {
+    Ydrip_s1B,                         FALSE,
+    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
+  },
+  {
+    Ydrip_s2,                          FALSE,
+    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
+  },
+  {
+    Ydrip_s2B,                         FALSE,
+    EL_AMOEBA_DROP,                    ACTION_FALLING, -1
+  },
+  {
+    Xbomb,                             TRUE,
+    EL_BOMB,                           -1, -1
+  },
+  {
+    Xbomb_pause,                       FALSE,
+    EL_BOMB,                           -1, -1
+  },
+  {
+    Xbomb_fall,                                FALSE,
+    EL_BOMB,                           ACTION_FALLING, -1
+  },
+  {
+    Ybomb_s,                           FALSE,
+    EL_BOMB,                           ACTION_FALLING, -1
+  },
+  {
+    Ybomb_sB,                          FALSE,
+    EL_BOMB,                           ACTION_FALLING, -1
+  },
+  {
+    Ybomb_e,                           FALSE,
+    EL_BOMB,                           ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ybomb_eB,                          FALSE,
+    EL_BOMB,                           ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ybomb_w,                           FALSE,
+    EL_BOMB,                           ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ybomb_wB,                          FALSE,
+    EL_BOMB,                           ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Ybomb_eat,                         FALSE,
+    EL_BOMB,                           -1, -1
+  },
+  {
+    Xballoon,                          TRUE,
+    EL_BALLOON,                                -1, -1
+  },
+  {
+    Yballoon_n,                                FALSE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Yballoon_nB,                       FALSE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Yballoon_e,                                FALSE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Yballoon_eB,                       FALSE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Yballoon_s,                                FALSE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Yballoon_sB,                       FALSE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Yballoon_w,                                FALSE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Yballoon_wB,                       FALSE,
+    EL_BALLOON,                                ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xgrass,                            TRUE,
+    EL_SAND,                           -1, -1
+  },
+  {
+    Ygrass_nB,                         FALSE,
+    EL_SAND,                           ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Ygrass_eB,                         FALSE,
+    EL_SAND,                           ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ygrass_sB,                         FALSE,
+    EL_SAND,                           ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Ygrass_wB,                         FALSE,
+    EL_SAND,                           ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xdirt,                             TRUE,
+    EL_SAND,                           -1, -1
+  },
+  {
+    Ydirt_nB,                          FALSE,
+    EL_SAND,                           ACTION_MOVING, MV_BIT_UP
+  },
+  {
+    Ydirt_eB,                          FALSE,
+    EL_SAND,                           ACTION_MOVING, MV_BIT_RIGHT
+  },
+  {
+    Ydirt_sB,                          FALSE,
+    EL_SAND,                           ACTION_MOVING, MV_BIT_DOWN
+  },
+  {
+    Ydirt_wB,                          FALSE,
+    EL_SAND,                           ACTION_MOVING, MV_BIT_LEFT
+  },
+  {
+    Xacid_ne,                          TRUE,
+    EL_ACID_POOL_TOPRIGHT,             -1, -1
+  },
+  {
+    Xacid_se,                          TRUE,
+    EL_ACID_POOL_BOTTOMRIGHT,          -1, -1
+  },
+  {
+    Xacid_s,                           TRUE,
+    EL_ACID_POOL_BOTTOM,               -1, -1
+  },
+  {
+    Xacid_sw,                          TRUE,
+    EL_ACID_POOL_BOTTOMLEFT,           -1, -1
+  },
+  {
+    Xacid_nw,                          TRUE,
+    EL_ACID_POOL_TOPLEFT,              -1, -1
+  },
+  {
+    Xacid_1,                           TRUE,
+    EL_ACID,                           -1, -1
+  },
+  {
+    Xacid_2,                           FALSE,
+    EL_ACID,                           -1, -1
+  },
+  {
+    Xacid_3,                           FALSE,
+    EL_ACID,                           -1, -1
+  },
+  {
+    Xacid_4,                           FALSE,
+    EL_ACID,                           -1, -1
+  },
+  {
+    Xacid_5,                           FALSE,
+    EL_ACID,                           -1, -1
+  },
+  {
+    Xacid_6,                           FALSE,
+    EL_ACID,                           -1, -1
+  },
+  {
+    Xacid_7,                           FALSE,
+    EL_ACID,                           -1, -1
+  },
+  {
+    Xacid_8,                           FALSE,
+    EL_ACID,                           -1, -1
+  },
+  {
+    Xball_1,                           TRUE,
+    EL_EMC_GENERATOR_BALL,             -1, -1
+  },
+  {
+    Xball_1B,                          FALSE,
+    EL_EMC_GENERATOR_BALL,             -1, -1
+  },
+  {
+    Xball_2,                           FALSE,
+    EL_EMC_GENERATOR_BALL,             -1, -1
+  },
+  {
+    Xball_2B,                          FALSE,
+    EL_EMC_GENERATOR_BALL,             -1, -1
+  },
+  {
+    Yball_eat,                         FALSE,
+    EL_EMC_GENERATOR_BALL,             -1, -1
+  },
+  {
+    Xgrow_ns,                          TRUE,
+    EL_EXPANDABLE_WALL_VERTICAL,       -1, -1
+  },
+  {
+    Ygrow_ns_eat,                      FALSE,
+    EL_EXPANDABLE_WALL_VERTICAL,       -1, -1
+  },
+  {
+    Xgrow_ew,                          TRUE,
+    EL_EXPANDABLE_WALL_HORIZONTAL,     -1, -1
+  },
+  {
+    Ygrow_ew_eat,                      FALSE,
+    EL_EXPANDABLE_WALL_HORIZONTAL,     -1, -1
+  },
+  {
+    Xwonderwall,                       TRUE,
+    EL_MAGIC_WALL,                     -1, -1
+  },
+  {
+    XwonderwallB,                      FALSE,
+    EL_MAGIC_WALL,                     -1, -1
+  },
+  {
+    Xamoeba_1,                         TRUE,
+    EL_AMOEBA_WET,                     -1, -1
+  },
+  {
+    Xamoeba_2,                         FALSE,
+    EL_AMOEBA_WET,                     -1, -1
+  },
+  {
+    Xamoeba_3,                         FALSE,
+    EL_AMOEBA_WET,                     -1, -1
+  },
+  {
+    Xamoeba_4,                         FALSE,
+    EL_AMOEBA_WET,                     -1, -1
+  },
+  {
+    Xamoeba_5,                         FALSE,
+    EL_AMOEBA_WET,                     -1, -1
+  },
+  {
+    Xamoeba_6,                         FALSE,
+    EL_AMOEBA_WET,                     -1, -1
+  },
+  {
+    Xamoeba_7,                         FALSE,
+    EL_AMOEBA_WET,                     -1, -1
+  },
+  {
+    Xamoeba_8,                         FALSE,
+    EL_AMOEBA_WET,                     -1, -1
+  },
+  {
+    Xdoor_1,                           TRUE,
+    EL_EM_GATE_1,                      -1, -1
+  },
+  {
+    Xdoor_2,                           TRUE,
+    EL_EM_GATE_2,                      -1, -1
+  },
+  {
+    Xdoor_3,                           TRUE,
+    EL_EM_GATE_3,                      -1, -1
+  },
+  {
+    Xdoor_4,                           TRUE,
+    EL_EM_GATE_4,                      -1, -1
+  },
+  {
+    Xdoor_5,                           TRUE,
+    EL_EMC_GATE_5,                     -1, -1
+  },
+  {
+    Xdoor_6,                           TRUE,
+    EL_EMC_GATE_6,                     -1, -1
+  },
+  {
+    Xdoor_7,                           TRUE,
+    EL_EMC_GATE_7,                     -1, -1
+  },
+  {
+    Xdoor_8,                           TRUE,
+    EL_EMC_GATE_8,                     -1, -1
+  },
+  {
+    Xkey_1,                            TRUE,
+    EL_EM_KEY_1,                       -1, -1
+  },
+  {
+    Xkey_2,                            TRUE,
+    EL_EM_KEY_2,                       -1, -1
+  },
+  {
+    Xkey_3,                            TRUE,
+    EL_EM_KEY_3,                       -1, -1
+  },
+  {
+    Xkey_4,                            TRUE,
+    EL_EM_KEY_4,                       -1, -1
+  },
+  {
+    Xkey_5,                            TRUE,
+    EL_EMC_KEY_5,                      -1, -1
+  },
+  {
+    Xkey_6,                            TRUE,
+    EL_EMC_KEY_6,                      -1, -1
+  },
+  {
+    Xkey_7,                            TRUE,
+    EL_EMC_KEY_7,                      -1, -1
+  },
+  {
+    Xkey_8,                            TRUE,
+    EL_EMC_KEY_8,                      -1, -1
+  },
+  {
+    Xwind_n,                           TRUE,
+    EL_BALLOON_SWITCH_UP,              -1, -1
+  },
+  {
+    Xwind_e,                           TRUE,
+    EL_BALLOON_SWITCH_RIGHT,           -1, -1
+  },
+  {
+    Xwind_s,                           TRUE,
+    EL_BALLOON_SWITCH_DOWN,            -1, -1
+  },
+  {
+    Xwind_w,                           TRUE,
+    EL_BALLOON_SWITCH_LEFT,            -1, -1
+  },
+  {
+    Xwind_nesw,                                TRUE,
+    EL_BALLOON_SWITCH_ANY,             -1, -1
+  },
+  {
+    Xwind_stop,                                TRUE,
+    EL_BALLOON_SWITCH_NONE,            -1, -1
+  },
+  {
+    Xexit,                             TRUE,
+    EL_EXIT_CLOSED,                    -1, -1
+  },
+  {
+    Xexit_1,                           TRUE,
+    EL_EXIT_OPEN,                      -1, -1
+  },
+  {
+    Xexit_2,                           FALSE,
+    EL_EXIT_OPEN,                      -1, -1
+  },
+  {
+    Xexit_3,                           FALSE,
+    EL_EXIT_OPEN,                      -1, -1
+  },
+  {
+    Xdynamite,                         TRUE,
+    EL_DYNAMITE,                       -1, -1
+  },
+  {
+    Ydynamite_eat,                     FALSE,
+    EL_DYNAMITE,                       -1, -1
+  },
+  {
+    Xdynamite_1,                       TRUE,
+    EL_DYNAMITE_ACTIVE,                        -1, -1
+  },
+  {
+    Xdynamite_2,                       FALSE,
+    EL_DYNAMITE_ACTIVE,                        -1, -1
+  },
+  {
+    Xdynamite_3,                       FALSE,
+    EL_DYNAMITE_ACTIVE,                        -1, -1
+  },
+  {
+    Xdynamite_4,                       FALSE,
+    EL_DYNAMITE_ACTIVE,                        -1, -1
+  },
+  {
+    Xbumper,                           TRUE,
+    EL_EMC_BUMPER,                     -1, -1
+  },
+  {
+    XbumperB,                          FALSE,
+    EL_EMC_BUMPER,                     -1, -1
+  },
+  {
+    Xwheel,                            TRUE,
+    EL_ROBOT_WHEEL,                    -1, -1
+  },
+  {
+    XwheelB,                           FALSE,
+    EL_ROBOT_WHEEL,                    -1, -1
+  },
+  {
+    Xswitch,                           FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    XswitchB,                          FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xsand,                             TRUE,
+    EL_QUICKSAND_EMPTY,                        -1, -1
+  },
+  {
+    Xsand_stone,                       TRUE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_stonein_1,                   FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_stonein_2,                   FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_stonein_3,                   FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_stonein_4,                   FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_stonesand_1,                 FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_stonesand_2,                 FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_stonesand_3,                 FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_stonesand_4,                 FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_stoneout_1,                  FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_stoneout_2,                  FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_sandstone_1,                 FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_sandstone_2,                 FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_sandstone_3,                 FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xsand_sandstone_4,                 FALSE,
+    EL_QUICKSAND_FULL,                 -1, -1
+  },
+  {
+    Xplant,                            TRUE,
+    EL_EMC_PLANT,                      -1, -1
+  },
+  {
+    Yplant,                            FALSE,
+    EL_EMC_PLANT,                      -1, -1
+  },
+  {
+    Xlenses,                           TRUE,
+    EL_EMC_LENSES,                     -1, -1
+  },
+  {
+    Xmagnify,                          TRUE,
+    EL_EMC_MAGNIFIER,                  -1, -1
+  },
+  {
+    Xdripper,                          FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    XdripperB,                         FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xfake_blank,                       TRUE,
+    EL_INVISIBLE_WALL,                 -1, -1
+  },
+  {
+    Xfake_blankB,                      FALSE,
+    EL_INVISIBLE_WALL,                 -1, -1
+  },
+  {
+    Xfake_grass,                       TRUE,
+    EL_INVISIBLE_SAND,                 -1, -1
+  },
+  {
+    Xfake_grassB,                      FALSE,
+    EL_INVISIBLE_SAND,                 -1, -1
+  },
+  {
+    Xfake_door_1,                      TRUE,
+    EL_EM_GATE_1_GRAY,                 -1, -1
+  },
+  {
+    Xfake_door_2,                      TRUE,
+    EL_EM_GATE_2_GRAY,                 -1, -1
+  },
+  {
+    Xfake_door_3,                      TRUE,
+    EL_EM_GATE_3_GRAY,                 -1, -1
+  },
+  {
+    Xfake_door_4,                      TRUE,
+    EL_EM_GATE_4_GRAY,                 -1, -1
+  },
+  {
+    Xfake_door_5,                      TRUE,
+    EL_EMC_GATE_5_GRAY,                        -1, -1
+  },
+  {
+    Xfake_door_6,                      TRUE,
+    EL_EMC_GATE_6_GRAY,                        -1, -1
+  },
+  {
+    Xfake_door_7,                      TRUE,
+    EL_EMC_GATE_7_GRAY,                        -1, -1
+  },
+  {
+    Xfake_door_8,                      TRUE,
+    EL_EMC_GATE_8_GRAY,                        -1, -1
+  },
+  {
+    Xsteel_1,                          TRUE,
+    EL_STEELWALL,                      -1, -1
+  },
+  {
+    Xsteel_2,                          FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xsteel_3,                          TRUE,
+    EL_EMC_STEELWALL_1,                        -1, -1
+  },
+  {
+    Xsteel_4,                          FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xwall_1,                           TRUE,
+    EL_WALL,                           -1, -1
+  },
+  {
+    Xwall_2,                           FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xwall_3,                           FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xwall_4,                           FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xround_wall_1,                     TRUE,
+    EL_WALL_SLIPPERY,                  -1, -1
+  },
+  {
+    Xround_wall_2,                     FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xround_wall_3,                     FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xround_wall_4,                     FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xdecor_1,                          FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xdecor_2,                          TRUE,
+    EL_EMC_WALL_6,                     -1, -1
+  },
+  {
+    Xdecor_3,                          TRUE,
+    EL_EMC_WALL_4,                     -1, -1
+  },
+  {
+    Xdecor_4,                          TRUE,
+    EL_EMC_WALL_5,                     -1, -1
+  },
+  {
+    Xdecor_5,                          TRUE,
+    EL_EMC_WALL_7,                     -1, -1
+  },
+  {
+    Xdecor_6,                          TRUE,
+    EL_EMC_WALL_8,                     -1, -1
+  },
+  {
+    Xdecor_7,                          FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xdecor_8,                          TRUE,
+    EL_EMC_WALL_1,                     -1, -1
+  },
+  {
+    Xdecor_9,                          TRUE,
+    EL_EMC_WALL_2,                     -1, -1
+  },
+  {
+    Xdecor_10,                         TRUE,
+    EL_EMC_WALL_3,                     -1, -1
+  },
+  {
+    Xdecor_11,                         FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xdecor_12,                         FALSE,
+    EL_UNKNOWN,                                -1, -1
+  },
+  {
+    Xalpha_0,                          TRUE,
+    EL_CHAR('0'),                      -1, -1
+  },
+  {
+    Xalpha_1,                          TRUE,
+    EL_CHAR('1'),                      -1, -1
+  },
+  {
+    Xalpha_2,                          TRUE,
+    EL_CHAR('2'),                      -1, -1
+  },
+  {
+    Xalpha_3,                          TRUE,
+    EL_CHAR('3'),                      -1, -1
+  },
+  {
+    Xalpha_4,                          TRUE,
+    EL_CHAR('4'),                      -1, -1
+  },
+  {
+    Xalpha_5,                          TRUE,
+    EL_CHAR('5'),                      -1, -1
+  },
+  {
+    Xalpha_6,                          TRUE,
+    EL_CHAR('6'),                      -1, -1
+  },
+  {
+    Xalpha_7,                          TRUE,
+    EL_CHAR('7'),                      -1, -1
+  },
+  {
+    Xalpha_8,                          TRUE,
+    EL_CHAR('8'),                      -1, -1
+  },
+  {
+    Xalpha_9,                          TRUE,
+    EL_CHAR('9'),                      -1, -1
+  },
+  {
+    Xalpha_excla,                      TRUE,
+    EL_CHAR('!'),                      -1, -1
+  },
+  {
+    Xalpha_quote,                      TRUE,
+    EL_CHAR('"'),                      -1, -1
+  },
+  {
+    Xalpha_comma,                      TRUE,
+    EL_CHAR(','),                      -1, -1
+  },
+  {
+    Xalpha_minus,                      TRUE,
+    EL_CHAR('-'),                      -1, -1
+  },
+  {
+    Xalpha_perio,                      TRUE,
+    EL_CHAR('.'),                      -1, -1
+  },
+  {
+    Xalpha_colon,                      TRUE,
+    EL_CHAR(':'),                      -1, -1
+  },
+  {
+    Xalpha_quest,                      TRUE,
+    EL_CHAR('?'),                      -1, -1
+  },
+  {
+    Xalpha_a,                          TRUE,
+    EL_CHAR('A'),                      -1, -1
+  },
+  {
+    Xalpha_b,                          TRUE,
+    EL_CHAR('B'),                      -1, -1
+  },
+  {
+    Xalpha_c,                          TRUE,
+    EL_CHAR('C'),                      -1, -1
+  },
+  {
+    Xalpha_d,                          TRUE,
+    EL_CHAR('D'),                      -1, -1
+  },
+  {
+    Xalpha_e,                          TRUE,
+    EL_CHAR('E'),                      -1, -1
+  },
+  {
+    Xalpha_f,                          TRUE,
+    EL_CHAR('F'),                      -1, -1
+  },
+  {
+    Xalpha_g,                          TRUE,
+    EL_CHAR('G'),                      -1, -1
+  },
+  {
+    Xalpha_h,                          TRUE,
+    EL_CHAR('H'),                      -1, -1
+  },
+  {
+    Xalpha_i,                          TRUE,
+    EL_CHAR('I'),                      -1, -1
+  },
+  {
+    Xalpha_j,                          TRUE,
+    EL_CHAR('J'),                      -1, -1
+  },
+  {
+    Xalpha_k,                          TRUE,
+    EL_CHAR('K'),                      -1, -1
+  },
+  {
+    Xalpha_l,                          TRUE,
+    EL_CHAR('L'),                      -1, -1
+  },
+  {
+    Xalpha_m,                          TRUE,
+    EL_CHAR('M'),                      -1, -1
+  },
+  {
+    Xalpha_n,                          TRUE,
+    EL_CHAR('N'),                      -1, -1
+  },
+  {
+    Xalpha_o,                          TRUE,
+    EL_CHAR('O'),                      -1, -1
+  },
+  {
+    Xalpha_p,                          TRUE,
+    EL_CHAR('P'),                      -1, -1
+  },
+  {
+    Xalpha_q,                          TRUE,
+    EL_CHAR('Q'),                      -1, -1
+  },
+  {
+    Xalpha_r,                          TRUE,
+    EL_CHAR('R'),                      -1, -1
+  },
+  {
+    Xalpha_s,                          TRUE,
+    EL_CHAR('S'),                      -1, -1
+  },
+  {
+    Xalpha_t,                          TRUE,
+    EL_CHAR('T'),                      -1, -1
+  },
+  {
+    Xalpha_u,                          TRUE,
+    EL_CHAR('U'),                      -1, -1
+  },
+  {
+    Xalpha_v,                          TRUE,
+    EL_CHAR('V'),                      -1, -1
+  },
+  {
+    Xalpha_w,                          TRUE,
+    EL_CHAR('W'),                      -1, -1
+  },
+  {
+    Xalpha_x,                          TRUE,
+    EL_CHAR('X'),                      -1, -1
+  },
+  {
+    Xalpha_y,                          TRUE,
+    EL_CHAR('Y'),                      -1, -1
+  },
+  {
+    Xalpha_z,                          TRUE,
+    EL_CHAR('Z'),                      -1, -1
+  },
+  {
+    Xalpha_arrow_e,                    TRUE,
+    EL_CHAR('>'),                      -1, -1
+  },
+  {
+    Xalpha_arrow_w,                    TRUE,
+    EL_CHAR('<'),                      -1, -1
+  },
+  {
+    Xalpha_copyr,                      TRUE,
+    EL_CHAR('©'),                      -1, -1
+  },
+
+  {
+    Zplayer,                           TRUE,
+    EL_PLAYER_1,                       -1, -1
+  },
+
+  {
+    ZBORDER,                           TRUE,
+    EL_EMC_LEVEL_BORDER,               -1, -1
+  },
+
+  {
+    -1,                                        FALSE,
+    -1,                                        -1, -1
+  }
+};
+
+int map_element_RND_to_EM(int element_rnd)
+{
+  static unsigned short mapping_RND_to_EM[NUM_FILE_ELEMENTS];
+  static boolean mapping_initialized = FALSE;
+
+  if (!mapping_initialized)
+  {
+    int i;
+
+    /* return "Xalpha_quest" for all undefined elements in mapping array */
+    for (i = 0; i < NUM_FILE_ELEMENTS; i++)
+      mapping_RND_to_EM[i] = Xalpha_quest;
+
+    for (i = 0; mapping_EM_to_RND_list[i].element_em != -1; i++)
+      if (mapping_EM_to_RND_list[i].is_rnd_to_em_mapping)
+       mapping_RND_to_EM[mapping_EM_to_RND_list[i].element_rnd] =
+         mapping_EM_to_RND_list[i].element_em;
+
+    mapping_initialized = TRUE;
+  }
+
+  if (element_rnd >= 0 && element_rnd < NUM_FILE_ELEMENTS)
+    return mapping_RND_to_EM[element_rnd];
+
+  Error(ERR_WARN, "invalid RND level element %d", element_rnd);
+
+  return EL_UNKNOWN;
+}
+
+int map_element_EM_to_RND(int element_em)
+{
+  static unsigned short mapping_EM_to_RND[TILE_MAX];
+  static boolean mapping_initialized = FALSE;
+
+  if (!mapping_initialized)
+  {
+    int i;
+
+    /* return "EL_UNKNOWN" for all undefined elements in mapping array */
+    for (i = 0; i < TILE_MAX; i++)
+      mapping_EM_to_RND[i] = EL_UNKNOWN;
+
+    for (i = 0; mapping_EM_to_RND_list[i].element_em != -1; i++)
+      mapping_EM_to_RND[mapping_EM_to_RND_list[i].element_em] =
+       mapping_EM_to_RND_list[i].element_rnd;
+
+    mapping_initialized = TRUE;
+  }
+
+  if (element_em >= 0 && element_em < TILE_MAX)
+    return mapping_EM_to_RND[element_em];
+
+  Error(ERR_WARN, "invalid EM level element %d", element_em);
+
+  return EL_UNKNOWN;
+}
+
+#else
+
 int map_element_RND_to_EM(int element_rnd)
 {
   static unsigned short mapping_RND_to_EM[NUM_FILE_ELEMENTS];
@@ -2938,7 +4575,7 @@ int map_element_RND_to_EM(int element_rnd)
     { Xball_1,                 EL_EMC_GENERATOR_BALL           },
     { Xgrow_ns,                        EL_EMC_GROW                     },
     { Xwonderwall,             EL_MAGIC_WALL                   },
-    { Xameuba_1,               EL_AMOEBA_WET                   },
+    { Xamoeba_1,               EL_AMOEBA_WET                   },
     { Xdoor_1,                 EL_EM_GATE_1                    },
     { Xdoor_2,                 EL_EM_GATE_2                    },
     { Xdoor_3,                 EL_EM_GATE_3                    },
@@ -2972,7 +4609,7 @@ int map_element_RND_to_EM(int element_rnd)
     { Xsand_stone,             EL_QUICKSAND_FULL               },
     { Xplant,                  EL_EMC_PLANT                    },
     { Xlenses,                 EL_EMC_LENSES                   },
-    { Xmagnify,                        EL_EMC_MAGNIFY                  },
+    { Xmagnify,                        EL_EMC_MAGNIFIER                },
     { Xdripper,                        EL_UNKNOWN                      },
     { Xfake_blank,             EL_INVISIBLE_WALL               },
     { Xfake_grass,             EL_INVISIBLE_SAND               },
@@ -3340,14 +4977,14 @@ int map_element_EM_to_RND(int element_em)
     { Ygrow_ew_eat,            EL_EMC_GROW                     },
     { Xwonderwall,             EL_MAGIC_WALL                   },
     { XwonderwallB,            EL_MAGIC_WALL                   },
-    { Xameuba_1,               EL_AMOEBA_WET                   },
-    { Xameuba_2,               EL_AMOEBA_WET                   },
-    { Xameuba_3,               EL_AMOEBA_WET                   },
-    { Xameuba_4,               EL_AMOEBA_WET                   },
-    { Xameuba_5,               EL_AMOEBA_WET                   },
-    { Xameuba_6,               EL_AMOEBA_WET                   },
-    { Xameuba_7,               EL_AMOEBA_WET                   },
-    { Xameuba_8,               EL_AMOEBA_WET                   },
+    { Xamoeba_1,               EL_AMOEBA_WET                   },
+    { Xamoeba_2,               EL_AMOEBA_WET                   },
+    { Xamoeba_3,               EL_AMOEBA_WET                   },
+    { Xamoeba_4,               EL_AMOEBA_WET                   },
+    { Xamoeba_5,               EL_AMOEBA_WET                   },
+    { Xamoeba_6,               EL_AMOEBA_WET                   },
+    { Xamoeba_7,               EL_AMOEBA_WET                   },
+    { Xamoeba_8,               EL_AMOEBA_WET                   },
     { Xdoor_1,                 EL_EM_GATE_1                    },
     { Xdoor_2,                 EL_EM_GATE_2                    },
     { Xdoor_3,                 EL_EM_GATE_3                    },
@@ -3405,7 +5042,7 @@ int map_element_EM_to_RND(int element_em)
     { Xplant,                  EL_EMC_PLANT                    },
     { Yplant,                  EL_EMC_PLANT                    },
     { Xlenses,                 EL_EMC_LENSES                   },
-    { Xmagnify,                        EL_EMC_MAGNIFY                  },
+    { Xmagnify,                        EL_EMC_MAGNIFIER                },
     { Xdripper,                        EL_UNKNOWN                      },
     { XdripperB,               EL_UNKNOWN                      },
     { Xfake_blank,             EL_INVISIBLE_WALL               },
@@ -3521,6 +5158,8 @@ int map_element_EM_to_RND(int element_em)
   return EL_UNKNOWN;
 }
 
+#endif
+
 int get_next_element(int element)
 {
   switch(element)