rnd-20070114-1-src
[rocksndiamonds.git] / src / editor.c
index e1dad2ed4c8e03c1391c979e5e4b2b5cb39f0c05..b5ea11e1f3ba854803771be9452a8ebb623b59bf 100644 (file)
@@ -2516,7 +2516,7 @@ static struct
     GADGET_ID_EM_SLIPPERY_GEMS,                GADGET_ID_NONE,
     &level.em_slippery_gems,
     NULL,
-    "slip down from certain flat walls","use EM style slipping behaviour"
+    "slip down from certain flat walls","use EM/DC style slipping behaviour"
   },
   {
     ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(2),
@@ -3574,15 +3574,20 @@ static int editor_el_diamond_caves[] =
   EL_CONVEYOR_BELT_3_SWITCH_RIGHT,
   EL_CONVEYOR_BELT_4_SWITCH_RIGHT,
 
+  EL_TIMEGATE_CLOSED,
+  EL_TIMEGATE_OPEN,
+  EL_TIMEGATE_SWITCH,
+  EL_DC_TIMEGATE_SWITCH,
+
   EL_SWITCHGATE_CLOSED,
   EL_SWITCHGATE_OPEN,
   EL_SWITCHGATE_SWITCH_UP,
   EL_SWITCHGATE_SWITCH_DOWN,
 
-  EL_TIMEGATE_CLOSED,
-  EL_TIMEGATE_OPEN,
-  EL_TIMEGATE_SWITCH,
   EL_EMPTY,
+  EL_EMPTY,
+  EL_DC_SWITCHGATE_SWITCH_UP,
+  EL_DC_SWITCHGATE_SWITCH_DOWN,
 
   EL_SIGN_EXCLAMATION,
   EL_SIGN_STOP,
@@ -3592,7 +3597,7 @@ static int editor_el_diamond_caves[] =
   EL_STEELWALL_SLIPPERY,
   EL_INVISIBLE_SAND,
   EL_LANDMINE,
-  EL_EMPTY,
+  EL_DC_LANDMINE,
 
   EL_SHIELD_NORMAL,
   EL_SHIELD_DEADLY,
@@ -3634,9 +3639,49 @@ static int editor_el_diamond_caves[] =
   EL_EMPTY,
   EL_EMPTY,
 
+  EL_DC_STEELWALL_2_SINGLE,
+  EL_DC_STEELWALL_2_TOP,
   EL_STEEL_EXIT_CLOSED,
   EL_STEEL_EXIT_OPEN,
+
+  EL_DC_STEELWALL_2_LEFT,
+  EL_DC_STEELWALL_2_MIDDLE,
+  EL_DC_STEELWALL_2_HORIZONTAL,
+  EL_DC_STEELWALL_2_RIGHT,
+
+  EL_DC_STEELWALL_1_TOPLEFT,
+  EL_DC_STEELWALL_2_VERTICAL,
+  EL_DC_STEELWALL_1_TOPRIGHT,
+  EL_EMPTY,
+
+  EL_DC_STEELWALL_1_VERTICAL,
+  EL_DC_STEELWALL_2_BOTTOM,
+  EL_EMPTY,
+  EL_EMPTY,
+
+  EL_DC_STEELWALL_1_BOTTOMLEFT,
+  EL_DC_STEELWALL_1_HORIZONTAL,
+  EL_DC_STEELWALL_1_BOTTOMRIGHT,
+  EL_EMPTY,
+
+  EL_DC_STEELWALL_1_BOTTOMRIGHT_2,
+  EL_DC_STEELWALL_1_BOTTOM,
+  EL_DC_STEELWALL_1_BOTTOMLEFT_2,
+  EL_EMPTY,
+
+  EL_DC_STEELWALL_1_RIGHT,
   EL_EMPTY,
+  EL_DC_STEELWALL_1_LEFT,
+  EL_EMPTY,
+
+  EL_DC_STEELWALL_1_TOPRIGHT_2,
+  EL_DC_STEELWALL_1_TOP,
+  EL_DC_STEELWALL_1_TOPLEFT_2,
+  EL_EMPTY,
+
+  EL_EXPANDABLE_STEELWALL_HORIZONTAL,
+  EL_EXPANDABLE_STEELWALL_VERTICAL,
+  EL_EXPANDABLE_STEELWALL_ANY,
   EL_EMPTY,
 };
 static int *editor_hl_diamond_caves_ptr = editor_hl_diamond_caves;
@@ -3789,115 +3834,115 @@ static int *editor_el_chars_ptr = editor_el_chars;
 static int num_editor_hl_chars = SIZEOF_ARRAY_INT(editor_hl_chars);
 static int num_editor_el_chars = SIZEOF_ARRAY_INT(editor_el_chars);
 
-static int editor_hl_steelchars[] =
+static int editor_hl_steel_chars[] =
 {
-  EL_INTERNAL_CASCADE_STEELCHARS_ACTIVE,
-  EL_STEELCHAR('T'),
-  EL_STEELCHAR('X'),
-  EL_STEELCHAR('T'),
+  EL_INTERNAL_CASCADE_STEEL_CHARS_ACTIVE,
+  EL_STEEL_CHAR('T'),
+  EL_STEEL_CHAR('X'),
+  EL_STEEL_CHAR('T'),
 };
 
-static int editor_el_steelchars[] =
-{
-  EL_STEELCHAR(' '),
-  EL_STEELCHAR('!'),
-  EL_STEELCHAR('"'),
-  EL_STEELCHAR('#'),
-
-  EL_STEELCHAR('$'),
-  EL_STEELCHAR('%'),
-  EL_STEELCHAR('&'),
-  EL_STEELCHAR('\''),
-
-  EL_STEELCHAR('('),
-  EL_STEELCHAR(')'),
-  EL_STEELCHAR('*'),
-  EL_STEELCHAR('+'),
-
-  EL_STEELCHAR(','),
-  EL_STEELCHAR('-'),
-  EL_STEELCHAR('.'),
-  EL_STEELCHAR('/'),
-
-  EL_STEELCHAR('0'),
-  EL_STEELCHAR('1'),
-  EL_STEELCHAR('2'),
-  EL_STEELCHAR('3'),
-
-  EL_STEELCHAR('4'),
-  EL_STEELCHAR('5'),
-  EL_STEELCHAR('6'),
-  EL_STEELCHAR('7'),
-
-  EL_STEELCHAR('8'),
-  EL_STEELCHAR('9'),
-  EL_STEELCHAR(':'),
-  EL_STEELCHAR(';'),
-
-  EL_STEELCHAR('<'),
-  EL_STEELCHAR('='),
-  EL_STEELCHAR('>'),
-  EL_STEELCHAR('?'),
-
-  EL_STEELCHAR('@'),
-  EL_STEELCHAR('A'),
-  EL_STEELCHAR('B'),
-  EL_STEELCHAR('C'),
-
-  EL_STEELCHAR('D'),
-  EL_STEELCHAR('E'),
-  EL_STEELCHAR('F'),
-  EL_STEELCHAR('G'),
-
-  EL_STEELCHAR('H'),
-  EL_STEELCHAR('I'),
-  EL_STEELCHAR('J'),
-  EL_STEELCHAR('K'),
-
-  EL_STEELCHAR('L'),
-  EL_STEELCHAR('M'),
-  EL_STEELCHAR('N'),
-  EL_STEELCHAR('O'),
-
-  EL_STEELCHAR('P'),
-  EL_STEELCHAR('Q'),
-  EL_STEELCHAR('R'),
-  EL_STEELCHAR('S'),
-
-  EL_STEELCHAR('T'),
-  EL_STEELCHAR('U'),
-  EL_STEELCHAR('V'),
-  EL_STEELCHAR('W'),
-
-  EL_STEELCHAR('X'),
-  EL_STEELCHAR('Y'),
-  EL_STEELCHAR('Z'),
-  EL_STEELCHAR('['),
-
-  EL_STEELCHAR('\\'),
-  EL_STEELCHAR(']'),
-  EL_STEELCHAR('^'),
-  EL_STEELCHAR('_'),
-
-  EL_STEELCHAR('©'),
-  EL_STEELCHAR('Ä'),
-  EL_STEELCHAR('Ö'),
-  EL_STEELCHAR('Ü'),
-
-  EL_STEELCHAR('°'),
-  EL_STEELCHAR('®'),
-  EL_STEELCHAR(FONT_ASCII_CURSOR),
-  EL_STEELCHAR(FONT_ASCII_BUTTON),
-
-  EL_STEELCHAR(FONT_ASCII_UP),
-  EL_STEELCHAR(FONT_ASCII_DOWN),
-  EL_STEELCHAR(' '),
-  EL_STEELCHAR(' ')
+static int editor_el_steel_chars[] =
+{
+  EL_STEEL_CHAR(' '),
+  EL_STEEL_CHAR('!'),
+  EL_STEEL_CHAR('"'),
+  EL_STEEL_CHAR('#'),
+
+  EL_STEEL_CHAR('$'),
+  EL_STEEL_CHAR('%'),
+  EL_STEEL_CHAR('&'),
+  EL_STEEL_CHAR('\''),
+
+  EL_STEEL_CHAR('('),
+  EL_STEEL_CHAR(')'),
+  EL_STEEL_CHAR('*'),
+  EL_STEEL_CHAR('+'),
+
+  EL_STEEL_CHAR(','),
+  EL_STEEL_CHAR('-'),
+  EL_STEEL_CHAR('.'),
+  EL_STEEL_CHAR('/'),
+
+  EL_STEEL_CHAR('0'),
+  EL_STEEL_CHAR('1'),
+  EL_STEEL_CHAR('2'),
+  EL_STEEL_CHAR('3'),
+
+  EL_STEEL_CHAR('4'),
+  EL_STEEL_CHAR('5'),
+  EL_STEEL_CHAR('6'),
+  EL_STEEL_CHAR('7'),
+
+  EL_STEEL_CHAR('8'),
+  EL_STEEL_CHAR('9'),
+  EL_STEEL_CHAR(':'),
+  EL_STEEL_CHAR(';'),
+
+  EL_STEEL_CHAR('<'),
+  EL_STEEL_CHAR('='),
+  EL_STEEL_CHAR('>'),
+  EL_STEEL_CHAR('?'),
+
+  EL_STEEL_CHAR('@'),
+  EL_STEEL_CHAR('A'),
+  EL_STEEL_CHAR('B'),
+  EL_STEEL_CHAR('C'),
+
+  EL_STEEL_CHAR('D'),
+  EL_STEEL_CHAR('E'),
+  EL_STEEL_CHAR('F'),
+  EL_STEEL_CHAR('G'),
+
+  EL_STEEL_CHAR('H'),
+  EL_STEEL_CHAR('I'),
+  EL_STEEL_CHAR('J'),
+  EL_STEEL_CHAR('K'),
+
+  EL_STEEL_CHAR('L'),
+  EL_STEEL_CHAR('M'),
+  EL_STEEL_CHAR('N'),
+  EL_STEEL_CHAR('O'),
+
+  EL_STEEL_CHAR('P'),
+  EL_STEEL_CHAR('Q'),
+  EL_STEEL_CHAR('R'),
+  EL_STEEL_CHAR('S'),
+
+  EL_STEEL_CHAR('T'),
+  EL_STEEL_CHAR('U'),
+  EL_STEEL_CHAR('V'),
+  EL_STEEL_CHAR('W'),
+
+  EL_STEEL_CHAR('X'),
+  EL_STEEL_CHAR('Y'),
+  EL_STEEL_CHAR('Z'),
+  EL_STEEL_CHAR('['),
+
+  EL_STEEL_CHAR('\\'),
+  EL_STEEL_CHAR(']'),
+  EL_STEEL_CHAR('^'),
+  EL_STEEL_CHAR('_'),
+
+  EL_STEEL_CHAR('©'),
+  EL_STEEL_CHAR('Ä'),
+  EL_STEEL_CHAR('Ö'),
+  EL_STEEL_CHAR('Ü'),
+
+  EL_STEEL_CHAR('°'),
+  EL_STEEL_CHAR('®'),
+  EL_STEEL_CHAR(FONT_ASCII_CURSOR),
+  EL_STEEL_CHAR(FONT_ASCII_BUTTON),
+
+  EL_STEEL_CHAR(FONT_ASCII_UP),
+  EL_STEEL_CHAR(FONT_ASCII_DOWN),
+  EL_STEEL_CHAR(' '),
+  EL_STEEL_CHAR(' ')
 };
-static int *editor_hl_steelchars_ptr = editor_hl_steelchars;
-static int *editor_el_steelchars_ptr = editor_el_steelchars;
-static int num_editor_hl_steelchars = SIZEOF_ARRAY_INT(editor_hl_steelchars);
-static int num_editor_el_steelchars = SIZEOF_ARRAY_INT(editor_el_steelchars);
+static int *editor_hl_steel_chars_ptr = editor_hl_steel_chars;
+static int *editor_el_steel_chars_ptr = editor_el_steel_chars;
+static int num_editor_hl_steel_chars = SIZEOF_ARRAY_INT(editor_hl_steel_chars);
+static int num_editor_el_steel_chars = SIZEOF_ARRAY_INT(editor_el_steel_chars);
 
 static int editor_hl_custom[] =
 {
@@ -4456,10 +4501,10 @@ editor_elements_info[] =
     &editor_el_chars_ptr,              &num_editor_el_chars
   },
   {
-    &setup.editor.el_steelchars,
-    &setup.editor_cascade.el_steelchars,
-    &editor_hl_steelchars_ptr,         &num_editor_hl_steelchars,
-    &editor_el_steelchars_ptr,         &num_editor_el_steelchars
+    &setup.editor.el_steel_chars,
+    &setup.editor_cascade.el_steel_chars,
+    &editor_hl_steel_chars_ptr,                &num_editor_hl_steel_chars,
+    &editor_el_steel_chars_ptr,                &num_editor_el_steel_chars
   },
   {
     &setup.editor.el_custom,
@@ -7724,7 +7769,8 @@ static struct
   { EL_BD_MAGIC_WALL,  &level.time_magic_wall,         TEXT_DURATION   },
   { EL_ROBOT_WHEEL,    &level.time_wheel,              TEXT_DURATION   },
 
-  { EL_TIMEGATE_SWITCH,        &level.time_timegate,           TEXT_DURATION   },
+  { EL_TIMEGATE_SWITCH,          &level.time_timegate,         TEXT_DURATION   },
+  { EL_DC_TIMEGATE_SWITCH,&level.time_timegate,                TEXT_DURATION   },
   { EL_LIGHT_SWITCH,   &level.time_light,              TEXT_DURATION   },
   { EL_LIGHT_SWITCH_ACTIVE, &level.time_light,         TEXT_DURATION   },
   { EL_SHIELD_NORMAL,  &level.shield_normal_time,      TEXT_DURATION   },
@@ -8591,33 +8637,7 @@ void DumpBrush_Small()
 
 static void FloodFill(int from_x, int from_y, int fill_element)
 {
-  int i,x,y;
-  int old_element;
-  static int check[4][2] = { {-1,0}, {0,-1}, {1,0}, {0,1} };
-  static int safety = 0;
-
-  /* check if starting field still has the desired content */
-  if (Feld[from_x][from_y] == fill_element)
-    return;
-
-  safety++;
-
-  if (safety > lev_fieldx*lev_fieldy)
-    Error(ERR_EXIT, "Something went wrong in 'FloodFill()'. Please debug.");
-
-  old_element = Feld[from_x][from_y];
-  Feld[from_x][from_y] = fill_element;
-
-  for (i = 0; i < 4; i++)
-  {
-    x = from_x + check[i][0];
-    y = from_y + check[i][1];
-
-    if (IN_LEV_FIELD(x,y) && Feld[x][y] == old_element)
-      FloodFill(x, y, fill_element);
-  }
-
-  safety--;
+  FloodFillLevel(from_x, from_y, fill_element, Feld, lev_fieldx, lev_fieldy);
 }
 
 /* values for DrawLevelText() modes */