rnd-19981204-2
[rocksndiamonds.git] / src / editor.c
index ae7e7e8cb5d95671148d68115d1eb987c0adf62f..2955faecfba6787249536d83bcab1ccae933c9d3 100644 (file)
@@ -1,13 +1,12 @@
 /***********************************************************
 *  Rocks'n'Diamonds -- McDuffin Strikes Back!              *
 *----------------------------------------------------------*
-*  ©1995 Artsoft Development                               *
-*        Holger Schemel                                    *
-*        33659 Bielefeld-Senne                             *
-*        Telefon: (0521) 493245                            *
-*        eMail: aeglos@valinor.owl.de                      *
-*               aeglos@uni-paderborn.de                    *
-*               q99492@pbhrzx.uni-paderborn.de             *
+*  (c) 1995-98 Artsoft Entertainment                       *
+*              Holger Schemel                              *
+*              Oststrasse 11a                              *
+*              33604 Bielefeld                             *
+*              phone: ++49 +521 290471                     *
+*              email: aeglos@valinor.owl.de                *
 *----------------------------------------------------------*
 *  editor.c                                                *
 ***********************************************************/
 #include "buttons.h"
 #include "files.h"
 
+/* positions in the level editor */
+#define ED_WIN_MB_LEFT_XPOS    7
+#define ED_WIN_MB_LEFT_YPOS    6
+#define ED_WIN_LEVELNR_XPOS    77
+#define ED_WIN_LEVELNR_YPOS    7
+#define ED_WIN_MB_MIDDLE_XPOS  7
+#define ED_WIN_MB_MIDDLE_YPOS  258
+#define ED_WIN_MB_RIGHT_XPOS   77
+#define ED_WIN_MB_RIGHT_YPOS   258
+
+/* other constants for the editor */
+#define ED_SCROLL_NO           0
+#define ED_SCROLL_LEFT         1
+#define ED_SCROLL_RIGHT                2
+#define ED_SCROLL_UP           4
+#define ED_SCROLL_DOWN         8
+
+/* delay value to avoid too fast scrolling etc. */
 #define CHOICE_DELAY_VALUE     100
 
 static int level_xpos,level_ypos;
-static BOOL edit_mode;
-static BOOL name_typing;
+static boolean edit_mode;
+static boolean name_typing;
 static int new_element1 = EL_MAUERWERK;
 static int new_element2 = EL_LEERRAUM;
 static int new_element3 = EL_ERDREICH;
@@ -207,9 +224,9 @@ int editor_element[] =
   EL_DRACHE,
 
   EL_SONDE,
-  EL_LEERRAUM,
-  EL_LEERRAUM,
-  EL_LEERRAUM,
+  EL_MAUER_X,
+  EL_MAUER_Y,
+  EL_MAUER_XY,
 
   EL_CHAR_A + ('S' - 'A'),
   EL_CHAR_A + ('O' - 'A'),
@@ -611,24 +628,25 @@ void FloodFill(int from_x, int from_y, int fill_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)
-  {
-    fprintf(stderr,"Something went wrong in 'FloodFill()'. Please debug.\n");
-    exit(-1);
-  }
+  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];
+    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);
+    if (IN_LEV_FIELD(x,y) && Feld[x][y] == old_element)
+      FloodFill(x, y, fill_element);
   }
 
   safety--;
@@ -638,7 +656,7 @@ void LevelEd(int mx, int my, int button)
 {
   static int last_button = 0;
   static int in_field_pressed = FALSE;
-  static BOOL use_floodfill = FALSE;
+  static boolean use_floodfill = FALSE;
   int x = (mx-SX)/MINI_TILEX; 
   int y = (my-SY)/MINI_TILEY; 
 
@@ -676,7 +694,7 @@ void LevelEd(int mx, int my, int button)
   }
   else                         /********** EDIT/CTRL-FENSTER **********/
   {
-    static long choice_delay = 0;
+    static unsigned long choice_delay = 0;
     int choice = CheckElemButtons(mx,my,button);
     int elem_pos = choice-ED_BUTTON_ELEM;
 
@@ -746,7 +764,7 @@ void LevelEd(int mx, int my, int button)
          edit_mode = FALSE;
          break;
        case ED_BUTTON_FILL:
-         AreYouSure("Caution ! Flood fill mode ! Choose area !",AYS_OPEN);
+         Request("Caution ! Flood fill mode ! Choose area !",REQ_OPEN);
          use_floodfill = TRUE;
          return;
          break;
@@ -1011,7 +1029,7 @@ void LevelEd(int mx, int my, int button)
          edit_mode = TRUE;
          break;
        case ED_BUTTON_CLEAR:
-         if (AreYouSure("Are you sure to clear this level ?",AYS_ASK))
+         if (Request("Are you sure to clear this level ?",REQ_ASK))
          {
            for(x=0;x<MAX_LEV_FIELDX;x++) 
              for(y=0;y<MAX_LEV_FIELDY;y++) 
@@ -1021,7 +1039,7 @@ void LevelEd(int mx, int my, int button)
          break;
        case ED_BUTTON_UNDO:
          if (leveldir[leveldir_nr].readonly ||
-             AreYouSure("Exit without saving ?",AYS_ASK | AYS_STAY_OPEN))
+             Request("Exit without saving ?",REQ_ASK | REQ_STAY_OPEN))
          {
            CloseDoor(DOOR_CLOSE_BOTH);
            game_status=MAINMENU;
@@ -1039,7 +1057,7 @@ void LevelEd(int mx, int my, int button)
 
            if (leveldir[leveldir_nr].readonly)
            {
-             AreYouSure("This level is read only !",AYS_CONFIRM);
+             Request("This level is read only !",REQ_CONFIRM);
              break;
            }
 
@@ -1049,12 +1067,12 @@ void LevelEd(int mx, int my, int button)
                  figur_vorhanden = TRUE;
 
            if (!figur_vorhanden)
-             AreYouSure("No Level without Gregor Mc Duffin please !",
-                        AYS_CONFIRM);
+             Request("No Level without Gregor Mc Duffin please !",
+                        REQ_CONFIRM);
            else
            {
-             if (AreYouSure("Save this level and kill the old ?",
-                            AYS_ASK | AYS_STAY_OPEN))
+             if (Request("Save this level and kill the old ?",
+                            REQ_ASK | REQ_STAY_OPEN))
              {
                for(x=0;x<lev_fieldx;x++)
                  for(y=0;y<lev_fieldy;y++)