rnd-20000720-1-src
[rocksndiamonds.git] / src / editor.c
index 856523def1fd6ba8b99c168ce521b93170cde8bd..618c272f9971f798162640b3913d03fd89a7ade4 100644 (file)
@@ -736,7 +736,7 @@ int editor_element[] =
   EL_CHAR('U'),
   EL_CHAR('L'),
 
-  EL_CHAR_MINUS,
+  EL_CHAR('-'),
   EL_CHAR('D'),
   EL_CHAR('E'),
   EL_CHAR('R'),
@@ -751,30 +751,30 @@ int editor_element[] =
   EL_ERDREICH,
   EL_BETON,
 
-  EL_FELSBODEN,
-  EL_SIEB2_INAKTIV,
+  EL_BD_WALL,
+  EL_MAGIC_WALL_BD_OFF,
   EL_AUSGANG_ZU,
   EL_AUSGANG_AUF,
 
   EL_EDELSTEIN_BD,
-  EL_BUTTERFLY_O,
-  EL_FIREFLY_O,
-  EL_FELSBROCKEN,
+  EL_BUTTERFLY_UP,
+  EL_FIREFLY_UP,
+  EL_BD_ROCK,
 
-  EL_BUTTERFLY_L,
-  EL_FIREFLY_L,
-  EL_BUTTERFLY_R,
-  EL_FIREFLY_R,
+  EL_BUTTERFLY_LEFT,
+  EL_FIREFLY_LEFT,
+  EL_BUTTERFLY_RIGHT,
+  EL_FIREFLY_RIGHT,
 
   EL_AMOEBE_BD,
-  EL_BUTTERFLY_U,
-  EL_FIREFLY_U,
+  EL_BUTTERFLY_DOWN,
+  EL_FIREFLY_DOWN,
   EL_LEERRAUM,
 
   EL_CHAR('E'),
   EL_CHAR('M'),
   EL_CHAR('E'),
-  EL_CHAR_MINUS,
+  EL_CHAR('-'),
 
   EL_CHAR('R'),
   EL_CHAR('A'),
@@ -799,7 +799,7 @@ int editor_element[] =
   EL_BETON,
   EL_MAUERWERK,
   EL_FELSBODEN,
-  EL_SIEB_INAKTIV,
+  EL_MAGIC_WALL_OFF,
 
   EL_EDELSTEIN,
   EL_DIAMANT,
@@ -811,24 +811,24 @@ int editor_element[] =
   EL_MORAST_LEER,
   EL_MORAST_VOLL,
 
-  EL_DYNAMIT_AUS,
-  EL_DYNAMIT,
+  EL_DYNAMITE_INACTIVE,
+  EL_DYNAMITE_ACTIVE,
   EL_AUSGANG_ZU,
   EL_AUSGANG_AUF,
 
   EL_MAMPFER,
-  EL_KAEFER_O,
-  EL_FLIEGER_O,
+  EL_KAEFER_UP,
+  EL_FLIEGER_UP,
   EL_ROBOT,
 
-  EL_KAEFER_L,
-  EL_FLIEGER_L,
-  EL_KAEFER_R,
-  EL_FLIEGER_R,
+  EL_KAEFER_LEFT,
+  EL_FLIEGER_LEFT,
+  EL_KAEFER_RIGHT,
+  EL_FLIEGER_RIGHT,
 
   EL_ABLENK_AUS,
-  EL_KAEFER_U,
-  EL_FLIEGER_U,
+  EL_KAEFER_DOWN,
+  EL_FLIEGER_DOWN,
   EL_UNSICHTBAR,
 
   EL_BADEWANNE1,
@@ -881,10 +881,10 @@ int editor_element[] =
   EL_PFORTE3X,
   EL_PFORTE4X,
 
-  EL_PFEIL_L,
-  EL_PFEIL_R,
-  EL_PFEIL_O,
-  EL_PFEIL_U,
+  EL_PFEIL_LEFT,
+  EL_PFEIL_RIGHT,
+  EL_PFEIL_UP,
+  EL_PFEIL_DOWN,
 
   EL_AMOEBE_VOLL,
   EL_EDELSTEIN_GELB,
@@ -897,17 +897,17 @@ int editor_element[] =
   EL_ERZ_EDEL_LILA,
 
   EL_LIFE,
-  EL_PACMAN_O,
+  EL_PACMAN_UP,
   EL_ZEIT_VOLL,
   EL_ZEIT_LEER,
 
-  EL_PACMAN_L,
+  EL_PACMAN_LEFT,
   EL_MAMPFER2,
-  EL_PACMAN_R,
+  EL_PACMAN_RIGHT,
   EL_MAUER_LEBT,
 
   EL_LIFE_ASYNC,
-  EL_PACMAN_U,
+  EL_PACMAN_DOWN,
   EL_BIRNE_AUS,
   EL_BIRNE_EIN,
 
@@ -916,11 +916,31 @@ int editor_element[] =
   EL_DYNABOMB_XL,
   EL_BADEWANNE,
 
-  EL_MAULWURF,
+  EL_MOLE,
   EL_PINGUIN,
   EL_SCHWEIN,
   EL_DRACHE,
 
+  EL_LEERRAUM,
+  EL_MOLE_UP,
+  EL_LEERRAUM,
+  EL_LEERRAUM,
+
+  EL_MOLE_LEFT,
+  EL_LEERRAUM,
+  EL_MOLE_RIGHT,
+  EL_LEERRAUM,
+
+  EL_LEERRAUM,
+  EL_MOLE_DOWN,
+  EL_BALLOON,
+  EL_BALLOON_SEND_ANY,
+
+  EL_BALLOON_SEND_LEFT,
+  EL_BALLOON_SEND_RIGHT,
+  EL_BALLOON_SEND_UP,
+  EL_BALLOON_SEND_DOWN,
+
   EL_SONDE,
   EL_MAUER_X,
   EL_MAUER_Y,
@@ -931,12 +951,23 @@ int editor_element[] =
   EL_SPEED_PILL,
   EL_BLACK_ORB,
 
+  EL_EMC_STEEL_WALL_1,
+  EL_EMC_WALL_1,
+  EL_EMC_WALL_2,
+  EL_EMC_WALL_3,
+
+  EL_EMC_WALL_4,
+  EL_EMC_WALL_5,
+  EL_EMC_WALL_6,
+  EL_EMC_WALL_7,
+
+
   EL_CHAR('S'),
   EL_CHAR('O'),
   EL_CHAR('K'),
   EL_CHAR('O'),
 
-  EL_CHAR_MINUS,
+  EL_CHAR('-'),
   EL_CHAR('B'),
   EL_CHAR('A'),
   EL_CHAR('N'),
@@ -946,11 +977,6 @@ int editor_element[] =
   EL_SOKOBAN_FELD_VOLL,
   EL_BETON,
 
-  EL_LEERRAUM,
-  EL_LEERRAUM,
-  EL_LEERRAUM,
-  EL_LEERRAUM,
-
   EL_CHAR('S'),
   EL_CHAR('U'),
   EL_CHAR('P'),
@@ -1011,6 +1037,126 @@ int editor_element[] =
   EL_SP_CHIP_UPPER,
   EL_SP_CHIP_LOWER,
 
+  EL_CHAR('D'),
+  EL_CHAR('I'),
+  EL_CHAR('A'),
+  EL_CHAR('-'),
+
+  EL_CHAR('M'),
+  EL_CHAR('O'),
+  EL_CHAR('N'),
+  EL_CHAR('D'),
+
+  EL_CHAR('C'),
+  EL_CHAR('A'),
+  EL_CHAR('V'),
+  EL_CHAR('E'),
+
+  EL_CHAR('S'),
+  EL_CHAR(' '),
+  EL_CHAR('I'),
+  EL_CHAR('I'),
+
+  EL_PEARL,
+  EL_CRYSTAL,
+  EL_WALL_PEARL,
+  EL_WALL_CRYSTAL,
+
+  EL_BELT1_LEFT,
+  EL_BELT1_MIDDLE,
+  EL_BELT1_RIGHT,
+  EL_BELT1_SWITCH_MIDDLE,
+
+  EL_BELT2_LEFT,
+  EL_BELT2_MIDDLE,
+  EL_BELT2_RIGHT,
+  EL_BELT2_SWITCH_MIDDLE,
+
+  EL_BELT3_LEFT,
+  EL_BELT3_MIDDLE,
+  EL_BELT3_RIGHT,
+  EL_BELT3_SWITCH_MIDDLE,
+
+  EL_BELT4_LEFT,
+  EL_BELT4_MIDDLE,
+  EL_BELT4_RIGHT,
+  EL_BELT4_SWITCH_MIDDLE,
+
+  EL_BELT1_SWITCH_LEFT,
+  EL_BELT2_SWITCH_LEFT,
+  EL_BELT3_SWITCH_LEFT,
+  EL_BELT4_SWITCH_LEFT,
+
+  EL_BELT1_SWITCH_RIGHT,
+  EL_BELT2_SWITCH_RIGHT,
+  EL_BELT3_SWITCH_RIGHT,
+  EL_BELT4_SWITCH_RIGHT,
+
+  EL_SWITCHGATE_OPEN,
+  EL_SWITCHGATE_CLOSED,
+  EL_SWITCHGATE_SWITCH_1,
+  EL_ENVELOPE,
+
+  EL_TIMEGATE_CLOSED,
+  EL_TIMEGATE_OPEN,
+  EL_TIMEGATE_SWITCH_OFF,
+  EL_LEERRAUM,
+
+  EL_LANDMINE,
+  EL_SAND_INVISIBLE,
+  EL_STEEL_SLANTED,
+  EL_LEERRAUM,
+
+  EL_SIGN_EXCLAMATION,
+  EL_SIGN_STOP,
+  EL_LIGHT_SWITCH_OFF,
+  EL_LIGHT_SWITCH_ON,
+
+  EL_SHIELD_PASSIVE,
+  EL_SHIELD_ACTIVE,
+  EL_EXTRA_TIME,
+  EL_LEERRAUM,
+
+  EL_CHAR('D'),
+  EL_CHAR('X'),
+  EL_CHAR('-'),
+  EL_CHAR(' '),
+
+  EL_CHAR('B'),
+  EL_CHAR('O'),
+  EL_CHAR('U'),
+  EL_CHAR('L'),
+
+  EL_CHAR('-'),
+  EL_CHAR('D'),
+  EL_CHAR('E'),
+  EL_CHAR('R'),
+
+  EL_CHAR('D'),
+  EL_CHAR('A'),
+  EL_CHAR('S'),
+  EL_CHAR('H'),
+
+  EL_SPRING,
+  EL_TUBE_RIGHT_DOWN,
+  EL_TUBE_HORIZ_DOWN,
+  EL_TUBE_LEFT_DOWN,
+
+  EL_TUBE_HORIZONTAL,
+  EL_TUBE_VERT_RIGHT,
+  EL_TUBE_CROSS,
+  EL_TUBE_VERT_LEFT,
+
+  EL_TUBE_VERTICAL,
+  EL_TUBE_RIGHT_UP,
+  EL_TUBE_HORIZ_UP,
+  EL_TUBE_LEFT_UP,
+
+  EL_TRAP_INACTIVE,
+  EL_DX_SUPABOMB,
+  EL_LEERRAUM,
+  EL_LEERRAUM,
+
   /*
   EL_CHAR('D'),
   EL_CHAR('Y'),
@@ -1121,13 +1267,13 @@ static void ScrollMiniLevel(int from_x, int from_y, int scroll)
   int dx = (scroll == ED_SCROLL_LEFT ? -1 : scroll == ED_SCROLL_RIGHT ? 1 : 0);
   int dy = (scroll == ED_SCROLL_UP   ? -1 : scroll == ED_SCROLL_DOWN  ? 1 : 0);
 
-  XCopyArea(display, drawto, drawto, gc,
-           SX + (dx == -1 ? MINI_TILEX : 0),
-           SY + (dy == -1 ? MINI_TILEY : 0),
-           (ed_fieldx * MINI_TILEX) - (dx != 0 ? MINI_TILEX : 0),
-           (ed_fieldy * MINI_TILEY) - (dy != 0 ? MINI_TILEY : 0),
-           SX + (dx == +1 ? MINI_TILEX : 0),
-           SY + (dy == +1 ? MINI_TILEY : 0));
+  BlitBitmap(drawto, drawto,
+            SX + (dx == -1 ? MINI_TILEX : 0),
+            SY + (dy == -1 ? MINI_TILEY : 0),
+            (ed_fieldx * MINI_TILEX) - (dx != 0 ? MINI_TILEX : 0),
+            (ed_fieldy * MINI_TILEY) - (dy != 0 ? MINI_TILEY : 0),
+            SX + (dx == +1 ? MINI_TILEX : 0),
+            SY + (dy == +1 ? MINI_TILEY : 0));
   if (dx)
   {
     x = (dx == 1 ? 0 : ed_fieldx - 1);
@@ -1147,7 +1293,7 @@ static void ScrollMiniLevel(int from_x, int from_y, int scroll)
 
 static void CreateControlButtons()
 {
-  Pixmap gd_pixmap = pix[PIX_DOOR];
+  Bitmap gd_bitmap = pix[PIX_DOOR];
   struct GadgetInfo *gi;
   unsigned long event_mask;
   int i;
@@ -1231,10 +1377,10 @@ static void CreateControlButtons()
                      GDI_STATE, GD_BUTTON_UNPRESSED,
                      GDI_RADIO_NR, radio_button_nr,
                      GDI_CHECKED, checked,
-                     GDI_DESIGN_UNPRESSED, gd_pixmap, gd_x1, gd_y1,
-                     GDI_DESIGN_PRESSED, gd_pixmap, gd_x2, gd_y1,
-                     GDI_ALT_DESIGN_UNPRESSED, gd_pixmap, gd_x1, gd_y2,
-                     GDI_ALT_DESIGN_PRESSED, gd_pixmap, gd_x2, gd_y2,
+                     GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x1, gd_y1,
+                     GDI_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y1,
+                     GDI_ALT_DESIGN_UNPRESSED, gd_bitmap, gd_x1, gd_y2,
+                     GDI_ALT_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y2,
                      GDI_EVENT_MASK, event_mask,
                      GDI_CALLBACK_ACTION, HandleControlButtons,
                      GDI_END);
@@ -1290,8 +1436,8 @@ static void CreateControlButtons()
                      GDI_HEIGHT, height,
                      GDI_TYPE, GD_TYPE_NORMAL_BUTTON,
                      GDI_STATE, GD_BUTTON_UNPRESSED,
-                     GDI_DESIGN_UNPRESSED, gd_pixmap, gd_x1, gd_y1,
-                     GDI_DESIGN_PRESSED, gd_pixmap, gd_x2, gd_y2,
+                     GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x1, gd_y1,
+                     GDI_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y2,
                      GDI_EVENT_MASK, event_mask,
                      GDI_CALLBACK_ACTION, HandleControlButtons,
                      GDI_END);
@@ -1305,7 +1451,7 @@ static void CreateControlButtons()
   /* create buttons for element list */
   for (i=0; i<ED_NUM_ELEMENTLIST_BUTTONS; i++)
   {
-    Pixmap deco_pixmap;
+    Bitmap deco_bitmap;
     int deco_x, deco_y, deco_xpos, deco_ypos;
     int gd_xoffset, gd_yoffset;
     int gd_x1, gd_x2, gd_y;
@@ -1323,7 +1469,7 @@ static void CreateControlButtons()
     gd_y  = DOOR_GFX_PAGEY1 + ED_ELEMENTLIST_YPOS;
 
     getMiniGraphicSource(el2gfx(editor_element[i]),
-                        &deco_pixmap, &deco_x, &deco_y);
+                        &deco_bitmap, &deco_x, &deco_y);
     deco_xpos = (ED_ELEMENTLIST_XSIZE - MINI_TILEX) / 2;
     deco_ypos = (ED_ELEMENTLIST_YSIZE - MINI_TILEY) / 2;
 
@@ -1336,9 +1482,9 @@ static void CreateControlButtons()
                      GDI_HEIGHT, ED_ELEMENTLIST_YSIZE,
                      GDI_TYPE, GD_TYPE_NORMAL_BUTTON,
                      GDI_STATE, GD_BUTTON_UNPRESSED,
-                     GDI_DESIGN_UNPRESSED, gd_pixmap, gd_x1, gd_y,
-                     GDI_DESIGN_PRESSED, gd_pixmap, gd_x2, gd_y,
-                     GDI_DECORATION_DESIGN, deco_pixmap, deco_x, deco_y,
+                     GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x1, gd_y,
+                     GDI_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y,
+                     GDI_DECORATION_DESIGN, deco_bitmap, deco_x, deco_y,
                      GDI_DECORATION_POSITION, deco_xpos, deco_ypos,
                      GDI_DECORATION_SIZE, MINI_TILEX, MINI_TILEY,
                      GDI_DECORATION_SHIFTING, 1, 1,
@@ -1365,7 +1511,7 @@ static void CreateCounterButtons()
 
     for (j=0; j<2; j++)
     {
-      Pixmap gd_pixmap = pix[PIX_DOOR];
+      Bitmap gd_bitmap = pix[PIX_DOOR];
       struct GadgetInfo *gi;
       int id = (j == 0 ?
                counterbutton_info[i].gadget_id_down :
@@ -1418,8 +1564,8 @@ static void CreateCounterButtons()
                        GDI_HEIGHT, y_size,
                        GDI_TYPE, GD_TYPE_NORMAL_BUTTON,
                        GDI_STATE, GD_BUTTON_UNPRESSED,
-                       GDI_DESIGN_UNPRESSED, gd_pixmap, gd_x1, gd_y,
-                       GDI_DESIGN_PRESSED, gd_pixmap, gd_x2, gd_y,
+                       GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x1, gd_y,
+                       GDI_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y,
                        GDI_EVENT_MASK, event_mask,
                        GDI_CALLBACK_ACTION, HandleCounterButtons,
                        GDI_END);
@@ -1466,8 +1612,8 @@ static void CreateCounterButtons()
                          GDI_NUMBER_MAX, counterbutton_info[i].max_value,
                          GDI_TEXT_SIZE, 3,
                          GDI_TEXT_FONT, font_type,
-                         GDI_DESIGN_UNPRESSED, gd_pixmap, gd_x, gd_y,
-                         GDI_DESIGN_PRESSED, gd_pixmap, gd_x, gd_y,
+                         GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x, gd_y,
+                         GDI_DESIGN_PRESSED, gd_bitmap, gd_x, gd_y,
                          GDI_BORDER_SIZE, ED_BORDER_SIZE,
                          GDI_TEXTINPUT_DESIGN_WIDTH, gd_width,
                          GDI_EVENT_MASK, event_mask,
@@ -1585,7 +1731,7 @@ static void CreateTextInputGadgets()
 
   for (i=0; i<ED_NUM_TEXTINPUT; i++)
   {
-    Pixmap gd_pixmap = pix[PIX_DOOR];
+    Bitmap gd_bitmap = pix[PIX_DOOR];
     int gd_x, gd_y;
     struct GadgetInfo *gi;
     unsigned long event_mask;
@@ -1609,8 +1755,8 @@ static void CreateTextInputGadgets()
                      GDI_TEXT_VALUE, textinput_info[i].value,
                      GDI_TEXT_SIZE, textinput_info[i].size,
                      GDI_TEXT_FONT, FC_YELLOW,
-                     GDI_DESIGN_UNPRESSED, gd_pixmap, gd_x, gd_y,
-                     GDI_DESIGN_PRESSED, gd_pixmap, gd_x, gd_y,
+                     GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x, gd_y,
+                     GDI_DESIGN_PRESSED, gd_bitmap, gd_x, gd_y,
                      GDI_BORDER_SIZE, ED_BORDER_SIZE,
                      GDI_TEXTINPUT_DESIGN_WIDTH, ED_WIN_COUNT_XSIZE,
                      GDI_EVENT_MASK, event_mask,
@@ -1631,7 +1777,7 @@ static void CreateScrollbarGadgets()
   for (i=0; i<ED_NUM_SCROLLBARS; i++)
   {
     int id = scrollbar_info[i].gadget_id;
-    Pixmap gd_pixmap = pix[PIX_DOOR];
+    Bitmap gd_bitmap = pix[PIX_DOOR];
     int gd_x1, gd_x2, gd_y1, gd_y2;
     struct GadgetInfo *gi;
     int items_max, items_visible, item_position;
@@ -1679,8 +1825,8 @@ static void CreateScrollbarGadgets()
                      GDI_SCROLLBAR_ITEMS_VISIBLE, items_visible,
                      GDI_SCROLLBAR_ITEM_POSITION, item_position,
                      GDI_STATE, GD_BUTTON_UNPRESSED,
-                     GDI_DESIGN_UNPRESSED, gd_pixmap, gd_x1, gd_y1,
-                     GDI_DESIGN_PRESSED, gd_pixmap, gd_x2, gd_y2,
+                     GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x1, gd_y1,
+                     GDI_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y2,
                      GDI_BORDER_SIZE, ED_BORDER_SIZE,
                      GDI_EVENT_MASK, event_mask,
                      GDI_CALLBACK_ACTION, HandleControlButtons,
@@ -1695,7 +1841,7 @@ static void CreateScrollbarGadgets()
 
 static void CreateCheckbuttonGadgets()
 {
-  Pixmap gd_pixmap = pix[PIX_DOOR];
+  Bitmap gd_bitmap = pix[PIX_DOOR];
   struct GadgetInfo *gi;
   unsigned long event_mask;
   int gd_x1, gd_x2, gd_x3, gd_x4, gd_y;
@@ -1727,10 +1873,10 @@ static void CreateCheckbuttonGadgets()
                      GDI_TYPE, GD_TYPE_RADIO_BUTTON,
                      GDI_RADIO_NR, radiobutton_info[i].radio_button_nr,
                      GDI_CHECKED, checked,
-                     GDI_DESIGN_UNPRESSED, gd_pixmap, gd_x1, gd_y,
-                     GDI_DESIGN_PRESSED, gd_pixmap, gd_x2, gd_y,
-                     GDI_ALT_DESIGN_UNPRESSED, gd_pixmap, gd_x3, gd_y,
-                     GDI_ALT_DESIGN_PRESSED, gd_pixmap, gd_x4, gd_y,
+                     GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x1, gd_y,
+                     GDI_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y,
+                     GDI_ALT_DESIGN_UNPRESSED, gd_bitmap, gd_x3, gd_y,
+                     GDI_ALT_DESIGN_PRESSED, gd_bitmap, gd_x4, gd_y,
                      GDI_EVENT_MASK, event_mask,
                      GDI_CALLBACK_ACTION, HandleRadiobuttons,
                      GDI_END);
@@ -1759,10 +1905,10 @@ static void CreateCheckbuttonGadgets()
                      GDI_HEIGHT, ED_CHECKBUTTON_YSIZE,
                      GDI_TYPE, GD_TYPE_CHECK_BUTTON,
                      GDI_CHECKED, *checkbutton_info[i].value,
-                     GDI_DESIGN_UNPRESSED, gd_pixmap, gd_x1, gd_y,
-                     GDI_DESIGN_PRESSED, gd_pixmap, gd_x2, gd_y,
-                     GDI_ALT_DESIGN_UNPRESSED, gd_pixmap, gd_x3, gd_y,
-                     GDI_ALT_DESIGN_PRESSED, gd_pixmap, gd_x4, gd_y,
+                     GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x1, gd_y,
+                     GDI_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y,
+                     GDI_ALT_DESIGN_UNPRESSED, gd_bitmap, gd_x3, gd_y,
+                     GDI_ALT_DESIGN_PRESSED, gd_bitmap, gd_x4, gd_y,
                      GDI_EVENT_MASK, event_mask,
                      GDI_CALLBACK_ACTION, HandleCheckbuttons,
                      GDI_END);
@@ -1810,8 +1956,8 @@ static void MapControlButtons()
   /* map buttons to select level */
   counter_id = ED_COUNTER_ID_SELECT_LEVEL;
   ModifyEditorCounterLimits(counter_id,
-                           leveldir[leveldir_nr].first_level,
-                           leveldir[leveldir_nr].last_level);
+                           leveldir_current->first_level,
+                           leveldir_current->last_level);
   ModifyEditorCounter(counter_id, *counterbutton_info[counter_id].value);
   MapCounterButtons(counter_id);
 }
@@ -1963,8 +2109,8 @@ void DrawLevelEd()
   }
 
   /* copy default editor door content to main double buffer */
-  XCopyArea(display, pix[PIX_DOOR], drawto, gc,
-           DOOR_GFX_PAGEX6, DOOR_GFX_PAGEY1, DXSIZE, DYSIZE, DX, DY);
+  BlitBitmap(pix[PIX_DOOR], drawto,
+            DOOR_GFX_PAGEX6, DOOR_GFX_PAGEY1, DXSIZE, DYSIZE, DX, DY);
 
   /* draw mouse button brush elements */
   DrawMiniGraphicExt(drawto, gc,
@@ -1981,18 +2127,16 @@ void DrawLevelEd()
   DrawSpecialEditorDoor();
 
   /* draw new control window */
-  XCopyArea(display, pix[PIX_DOOR], drawto, gc,
-           DOOR_GFX_PAGEX8, 236,
-           EXSIZE, EYSIZE,
-           EX, EY);
+  BlitBitmap(pix[PIX_DOOR], drawto,
+            DOOR_GFX_PAGEX8, 236, EXSIZE, EYSIZE, EX, EY);
 
   redraw_mask |= REDRAW_ALL;
 
   MapControlButtons();
 
   /* copy actual editor door content to door double buffer for OpenDoor() */
-  XCopyArea(display, drawto, pix[PIX_DB_DOOR], gc,
-           DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1);
+  BlitBitmap(drawto, pix[PIX_DB_DOOR],
+            DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1);
 
   DrawEditModeWindow();
 
@@ -2197,14 +2341,14 @@ static void DrawRandomPlacementBackgroundArea()
     for (x=0; x<2; x++)
       DrawMiniElement(area_x + x, area_y + y, EL_ERDREICH);
 
-  XFillRectangle(display, drawto, gc,
+  ClearRectangle(drawto,
                 area_sx + MINI_TILEX/2 - 1, area_sy + MINI_TILEY/2 - 1,
                 MINI_TILEX + 2, MINI_TILEY + 2);
 
   /* copy border to the right location */
-  XCopyArea(display, drawto, drawto, gc,
-           area_sx, area_sy, 3 * MINI_TILEX, 3 * MINI_TILEY,
-           area_sx - MINI_TILEX/2, area_sy - MINI_TILEY/2);
+  BlitBitmap(drawto, drawto,
+            area_sx, area_sy, 3 * MINI_TILEX, 3 * MINI_TILEY,
+            area_sx - MINI_TILEX/2, area_sy - MINI_TILEY/2);
 
   DrawMiniElement(area_x, area_y, ElementContent[0][0][0]);
 
@@ -2319,14 +2463,14 @@ static void DrawAmoebaContentArea()
     for (x=0; x<2; x++)
       DrawMiniElement(area_x + x, area_y + y, EL_ERDREICH);
 
-  XFillRectangle(display, drawto, gc,
+  ClearRectangle(drawto,
                 area_sx + MINI_TILEX/2 - 1, area_sy + MINI_TILEY/2 - 1,
                 MINI_TILEX + 2, MINI_TILEY + 2);
 
   /* copy border to the right location */
-  XCopyArea(display, drawto, drawto, gc,
-           area_sx, area_sy, 3 * MINI_TILEX, 3 * MINI_TILEY,
-           area_sx - MINI_TILEX/2, area_sy - MINI_TILEY/2);
+  BlitBitmap(drawto, drawto,
+            area_sx, area_sy, 3 * MINI_TILEX, 3 * MINI_TILEY,
+            area_sx - MINI_TILEX/2, area_sy - MINI_TILEY/2);
 
   DrawText(area_sx + TILEX, area_sy + 1, "Content of amoeba",
           FS_SMALL, font_color);
@@ -2365,7 +2509,7 @@ static void DrawElementContentAreas()
   MapCounterButtons(counter_id);
 
   /* delete content areas in case of reducing number of them */
-  XFillRectangle(display, backbuffer, gc,
+  ClearRectangle(backbuffer,
                 SX, area_sy - MINI_TILEX,
                 SXSIZE, 12 * MINI_TILEY);
 
@@ -2377,16 +2521,16 @@ static void DrawElementContentAreas()
        DrawMiniElement(area_x + 5 * (i % 4) + x, area_y + 6 * (i / 4) + y,
                        EL_ERDREICH);
 
-    XFillRectangle(display, drawto, gc,
+    ClearRectangle(drawto,
                   area_sx + 5 * (i % 4) * MINI_TILEX + MINI_TILEX/2 - 1,
                   area_sy + 6 * (i / 4) * MINI_TILEY + MINI_TILEY/2 - 1,
                   3 * MINI_TILEX + 2, 3 * MINI_TILEY + 2);
   }
 
   /* copy border to the right location */
-  XCopyArea(display, drawto, drawto, gc,
-           area_sx, area_sy, (5 * 4 + 1) * MINI_TILEX, 11 * MINI_TILEY,
-           area_sx - MINI_TILEX/2, area_sy - MINI_TILEY/2);
+  BlitBitmap(drawto, drawto,
+            area_sx, area_sy, (5 * 4 + 1) * MINI_TILEX, 11 * MINI_TILEY,
+            area_sx - MINI_TILEX/2, area_sy - MINI_TILEY/2);
 
   DrawText(area_sx + (5 * 4 - 1) * MINI_TILEX, area_sy + 0 * MINI_TILEY + 1,
           "Content", FS_SMALL, font_color);
@@ -2443,31 +2587,31 @@ static void DrawPropertiesWindow()
     { EL_EDELSTEIN_ROT,        &level.score[SC_EDELSTEIN],     TEXT_COLLECTING },
     { EL_EDELSTEIN_LILA,&level.score[SC_EDELSTEIN],    TEXT_COLLECTING },
     { EL_DIAMANT,      &level.score[SC_DIAMANT],       TEXT_COLLECTING },
-    { EL_KAEFER_R,     &level.score[SC_KAEFER],        TEXT_SMASHING },
-    { EL_KAEFER_O,     &level.score[SC_KAEFER],        TEXT_SMASHING },
-    { EL_KAEFER_L,     &level.score[SC_KAEFER],        TEXT_SMASHING },
-    { EL_KAEFER_U,     &level.score[SC_KAEFER],        TEXT_SMASHING },
-    { EL_BUTTERFLY_R,  &level.score[SC_KAEFER],        TEXT_SMASHING },
-    { EL_BUTTERFLY_O,  &level.score[SC_KAEFER],        TEXT_SMASHING },
-    { EL_BUTTERFLY_L,  &level.score[SC_KAEFER],        TEXT_SMASHING },
-    { EL_BUTTERFLY_U,  &level.score[SC_KAEFER],        TEXT_SMASHING },
-    { EL_FLIEGER_R,    &level.score[SC_FLIEGER],       TEXT_SMASHING },
-    { EL_FLIEGER_O,    &level.score[SC_FLIEGER],       TEXT_SMASHING },
-    { EL_FLIEGER_L,    &level.score[SC_FLIEGER],       TEXT_SMASHING },
-    { EL_FLIEGER_U,    &level.score[SC_FLIEGER],       TEXT_SMASHING },
-    { EL_FIREFLY_R,    &level.score[SC_FLIEGER],       TEXT_SMASHING },
-    { EL_FIREFLY_O,    &level.score[SC_FLIEGER],       TEXT_SMASHING },
-    { EL_FIREFLY_L,    &level.score[SC_FLIEGER],       TEXT_SMASHING },
-    { EL_FIREFLY_U,    &level.score[SC_FLIEGER],       TEXT_SMASHING },
+    { EL_KAEFER_RIGHT, &level.score[SC_KAEFER],        TEXT_SMASHING },
+    { EL_KAEFER_UP,    &level.score[SC_KAEFER],        TEXT_SMASHING },
+    { EL_KAEFER_LEFT,  &level.score[SC_KAEFER],        TEXT_SMASHING },
+    { EL_KAEFER_DOWN,  &level.score[SC_KAEFER],        TEXT_SMASHING },
+    { EL_BUTTERFLY_RIGHT,&level.score[SC_KAEFER],      TEXT_SMASHING },
+    { EL_BUTTERFLY_UP, &level.score[SC_KAEFER],        TEXT_SMASHING },
+    { EL_BUTTERFLY_LEFT,&level.score[SC_KAEFER],       TEXT_SMASHING },
+    { EL_BUTTERFLY_DOWN,&level.score[SC_KAEFER],       TEXT_SMASHING },
+    { EL_FLIEGER_RIGHT,        &level.score[SC_FLIEGER],       TEXT_SMASHING },
+    { EL_FLIEGER_UP,   &level.score[SC_FLIEGER],       TEXT_SMASHING },
+    { EL_FLIEGER_LEFT, &level.score[SC_FLIEGER],       TEXT_SMASHING },
+    { EL_FLIEGER_DOWN, &level.score[SC_FLIEGER],       TEXT_SMASHING },
+    { EL_FIREFLY_RIGHT,        &level.score[SC_FLIEGER],       TEXT_SMASHING },
+    { EL_FIREFLY_UP,   &level.score[SC_FLIEGER],       TEXT_SMASHING },
+    { EL_FIREFLY_LEFT, &level.score[SC_FLIEGER],       TEXT_SMASHING },
+    { EL_FIREFLY_DOWN, &level.score[SC_FLIEGER],       TEXT_SMASHING },
     { EL_MAMPFER,      &level.score[SC_MAMPFER],       TEXT_SMASHING },
     { EL_MAMPFER2,     &level.score[SC_MAMPFER],       TEXT_SMASHING },
     { EL_ROBOT,                &level.score[SC_ROBOT],         TEXT_SMASHING },
-    { EL_PACMAN_R,     &level.score[SC_PACMAN],        TEXT_SMASHING },
-    { EL_PACMAN_O,     &level.score[SC_PACMAN],        TEXT_SMASHING },
-    { EL_PACMAN_L,     &level.score[SC_PACMAN],        TEXT_SMASHING },
-    { EL_PACMAN_U,     &level.score[SC_PACMAN],        TEXT_SMASHING },
+    { EL_PACMAN_RIGHT, &level.score[SC_PACMAN],        TEXT_SMASHING },
+    { EL_PACMAN_UP,    &level.score[SC_PACMAN],        TEXT_SMASHING },
+    { EL_PACMAN_LEFT,  &level.score[SC_PACMAN],        TEXT_SMASHING },
+    { EL_PACMAN_DOWN,  &level.score[SC_PACMAN],        TEXT_SMASHING },
     { EL_KOKOSNUSS,    &level.score[SC_KOKOSNUSS],     TEXT_CRACKING },
-    { EL_DYNAMIT_AUS,  &level.score[SC_DYNAMIT],       TEXT_COLLECTING },
+    { EL_DYNAMITE_INACTIVE,&level.score[SC_DYNAMIT],   TEXT_COLLECTING },
     { EL_SCHLUESSEL1,  &level.score[SC_SCHLUESSEL],    TEXT_COLLECTING },
     { EL_SCHLUESSEL2,  &level.score[SC_SCHLUESSEL],    TEXT_COLLECTING },
     { EL_SCHLUESSEL3,  &level.score[SC_SCHLUESSEL],    TEXT_COLLECTING },
@@ -2480,7 +2624,7 @@ static void DrawPropertiesWindow()
     { EL_AMOEBE_NORM,  &level.amoeba_speed,            TEXT_SPEED },
     { EL_AMOEBE_VOLL,  &level.amoeba_speed,            TEXT_SPEED },
     { EL_AMOEBE_BD,    &level.amoeba_speed,            TEXT_SPEED },
-    { EL_SIEB_INAKTIV, &level.time_magic_wall,         TEXT_DURATION },
+    { EL_MAGIC_WALL_OFF,&level.time_magic_wall,                TEXT_DURATION },
     { EL_ABLENK_AUS,   &level.time_wheel,              TEXT_DURATION },
     { -1, NULL, NULL }
   };
@@ -2496,28 +2640,28 @@ static void DrawPropertiesWindow()
     for (x=0; x<3; x++)
       DrawMiniElement(xstart + x , ystart + y, EL_ERDREICH);
 
-  XFillRectangle(display, drawto, gc,
+  ClearRectangle(drawto,
                 SX + xstart * MINI_TILEX + MINI_TILEX/2 - 1,
                 SY + ystart * MINI_TILEY + MINI_TILEY/2 - 1,
                 TILEX + 2, TILEY + 2);
 
   /* copy border to the right location */
-  XCopyArea(display, drawto, drawto, gc,
-           SX + xstart * MINI_TILEX,
-           SY + ystart * MINI_TILEY,
-           2 * TILEX, 2 * TILEY,
-           SX + xstart * MINI_TILEX - MINI_TILEX/2,
-           SY + ystart * MINI_TILEY - MINI_TILEY/2);
+  BlitBitmap(drawto, drawto,
+            SX + xstart * MINI_TILEX,
+            SY + ystart * MINI_TILEY,
+            2 * TILEX, 2 * TILEY,
+            SX + xstart * MINI_TILEX - MINI_TILEX/2,
+            SY + ystart * MINI_TILEY - MINI_TILEY/2);
 
   DrawGraphic(xstart/2, ystart/2, el2gfx(properties_element));
 
   /* copy the whole stuff to the definitive location */
-  XCopyArea(display, drawto, drawto, gc,
-           SX + xstart * MINI_TILEX - MINI_TILEX/2,
-           SY + ystart * MINI_TILEY - MINI_TILEY,
-           2 * TILEX, 2 * TILEY,
-           SX + xstart * MINI_TILEX - MINI_TILEX/2,
-           SY + ystart * MINI_TILEY - MINI_TILEY/2);
+  BlitBitmap(drawto, drawto,
+            SX + xstart * MINI_TILEX - MINI_TILEX/2,
+            SY + ystart * MINI_TILEY - MINI_TILEY,
+            2 * TILEX, 2 * TILEY,
+            SX + xstart * MINI_TILEX - MINI_TILEX/2,
+            SY + ystart * MINI_TILEY - MINI_TILEY/2);
 
   DrawTextF((xstart + 3) * MINI_TILEX, (ystart + 1) * MINI_TILEY,
            font_color, element_info[properties_element]);
@@ -2569,26 +2713,6 @@ static void DrawPropertiesWindow()
   }
 }
 
-static void swap_numbers(int *i1, int *i2)
-{
-  int help = *i1;
-
-  *i1 = *i2;
-  *i2 = help;
-}
-
-static void swap_number_pairs(int *x1, int *y1, int *x2, int *y2)
-{
-  int help_x = *x1;
-  int help_y = *y1;
-
-  *x1 = *x2;
-  *x2 = help_x;
-
-  *y1 = *y2;
-  *y2 = help_y;
-}
-
 static void DrawLineElement(int sx, int sy, int element, boolean change_level)
 {
   int lx = sx + level_xpos;
@@ -2768,14 +2892,10 @@ static void DrawAreaBorder(int from_x, int from_y, int to_x, int to_y)
   to_sx = SX + to_x * MINI_TILEX + MINI_TILEX - 1;
   to_sy = SY + to_y * MINI_TILEY + MINI_TILEY - 1;
 
-  XSetForeground(display, gc, WhitePixel(display, screen));
-
-  XDrawLine(display, drawto, gc, from_sx, from_sy, to_sx, from_sy);
-  XDrawLine(display, drawto, gc, to_sx, from_sy, to_sx, to_sy);
-  XDrawLine(display, drawto, gc, to_sx, to_sy, from_sx, to_sy);
-  XDrawLine(display, drawto, gc, from_sx, to_sy, from_sx, from_sy);
-
-  XSetForeground(display, gc, BlackPixel(display, screen));
+  DrawSimpleWhiteLine(drawto, from_sx, from_sy, to_sx, from_sy);
+  DrawSimpleWhiteLine(drawto, to_sx, from_sy, to_sx, to_sy);
+  DrawSimpleWhiteLine(drawto, to_sx, to_sy, from_sx, to_sy);
+  DrawSimpleWhiteLine(drawto, from_sx, to_sy, from_sx, from_sy);
 
   if (from_x == to_x && from_y == to_y)
     MarkTileDirty(from_x/2, from_y/2);
@@ -3636,7 +3756,7 @@ static void HandleControlButtons(struct GadgetInfo *gi)
        int element = editor_element[element_shift + i];
 
        UnmapGadget(gi);
-       getMiniGraphicSource(el2gfx(element), &gd->pixmap, &gd->x, &gd->y);
+       getMiniGraphicSource(el2gfx(element), &gd->bitmap, &gd->x, &gd->y);
        ModifyGadget(gi, GDI_INFO_TEXT, element_info[element], GDI_END);
        MapGadget(gi);
       }
@@ -3731,7 +3851,7 @@ static void HandleControlButtons(struct GadgetInfo *gi)
       break;
 
     case GADGET_ID_SAVE:
-      if (leveldir[leveldir_nr].readonly)
+      if (leveldir_current->readonly)
       {
        Request("This level is read only !", REQ_CONFIRM);
        break;
@@ -3798,9 +3918,9 @@ static void HandleControlButtons(struct GadgetInfo *gi)
       else
       {
        CloseDoor(DOOR_CLOSE_1);
-       XCopyArea(display, pix[PIX_DB_DOOR], pix[PIX_DB_DOOR], gc,
-                 DOOR_GFX_PAGEX2, DOOR_GFX_PAGEY1, DXSIZE,DYSIZE,
-                 DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1);
+       BlitBitmap(pix[PIX_DB_DOOR], pix[PIX_DB_DOOR],
+                  DOOR_GFX_PAGEX2, DOOR_GFX_PAGEY1, DXSIZE,DYSIZE,
+                  DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1);
        OpenDoor(DOOR_OPEN_1);
       }
       break;
@@ -3890,6 +4010,8 @@ void HandleLevelEditorKeyInput(KeySym key)
       ClickOnGadget(level_editor_gadget[id], button);
     else if (letter == '.')
       ClickOnGadget(level_editor_gadget[GADGET_ID_SINGLE_ITEMS], button);
+    else if (key == XK_space || key == XK_Return)
+      ClickOnGadget(level_editor_gadget[GADGET_ID_TEST], button);
     else
       for (i=0; i<ED_NUM_CTRL_BUTTONS; i++)
        if (letter && letter == control_info[i].shortcut)
@@ -3900,7 +4022,7 @@ void HandleLevelEditorKeyInput(KeySym key)
 
 void ClearEditorGadgetInfoText()
 {
-  XFillRectangle(display, drawto, gc,
+  ClearRectangle(drawto,
                 INFOTEXT_XPOS, INFOTEXT_YPOS, INFOTEXT_XSIZE, INFOTEXT_YSIZE);
   redraw_mask |= REDRAW_FIELD;
 }
@@ -3909,7 +4031,7 @@ void HandleEditorGadgetInfoText(void *ptr)
 {
   struct GadgetInfo *gi = (struct GadgetInfo *)ptr;
   char infotext[MAX_INFOTEXT_LEN + 1];
-  char shortcut[20];
+  char shortcut[MAX_INFOTEXT_LEN + 1];
 
   ClearEditorGadgetInfoText();
 
@@ -3929,10 +4051,13 @@ void HandleEditorGadgetInfoText(void *ptr)
 
     if (key)
     {
-      sprintf(shortcut, " ('%s%c')",
-             (key >= 'A' && key <= 'Z' ? "Shift-" :
-              gi->custom_id == GADGET_ID_SINGLE_ITEMS ? ".' or '" : ""),
-             key);
+      if (gi->custom_id == GADGET_ID_SINGLE_ITEMS)     /* special case 1 */
+       sprintf(shortcut, " ('.' or '%c')", key);
+      else if (gi->custom_id == GADGET_ID_TEST)                /* special case 2 */
+       sprintf(shortcut, " ('Enter' or 'Shift-%c')", key);
+      else                                             /* normal case */
+       sprintf(shortcut, " ('%s%c')",
+               (key >= 'A' && key <= 'Z' ? "Shift-" : ""), key);
 
       if (strlen(infotext) + strlen(shortcut) <= MAX_INFOTEXT_LEN)
        strcat(infotext, shortcut);