fixed line style drawing with empty space over MM style walls in editor
authorHolger Schemel <info@artsoft.org>
Tue, 16 May 2017 21:36:08 +0000 (23:36 +0200)
committerHolger Schemel <info@artsoft.org>
Fri, 23 Mar 2018 22:21:13 +0000 (23:21 +0100)
src/editor.c
src/tools.c
src/tools.h

index 1edadc31df46954f0becf7779431c48ad22ef942..dddcaa8e78f1518c46d3f84afffe6ce5d62a0427 100644 (file)
@@ -10297,6 +10297,7 @@ static void SetElementSimpleExt(int x, int y, int dx, int dy, int element,
   int sx = x - level_xpos;
   int sy = y - level_ypos;
   int old_element = Feld[x][y];
+  int new_element = element;
   unsigned int new_bitmask = (getDrawModeHiRes() ? (dx + 1) << (dy * 2) : 0x0f);
   boolean draw_masked = FALSE;
 
@@ -10325,7 +10326,9 @@ static void SetElementSimpleExt(int x, int y, int dx, int dy, int element,
 
   if (IN_ED_FIELD(sx, sy))
   {
-    if (draw_masked)
+    if (IS_MM_WALL(old_element) && new_element == EL_EMPTY)
+      DrawSizedWallParts_MM(sx, sy, EL_EMPTY, ed_tilesize, FALSE, new_bitmask);
+    else if (draw_masked)
       DrawEditorElementThruMask(sx, sy, element);
     else
       DrawEditorElement(sx, sy, element);
index 173c40aa658c7e28a3ea0808b8cc6749a6e5f618..6b817e85cf59cdbc8e012ea189b6c6c1249f8e19 100644 (file)
@@ -2486,12 +2486,14 @@ void DrawLevelField(int x, int y)
 }
 
 static void DrawSizedWallExt_MM(int dst_x, int dst_y, int element, int tilesize,
-                               int (*el2img_function)(int), boolean masked)
+                               int (*el2img_function)(int), boolean masked,
+                               int element_bits_draw)
 {
   int element_base = map_mm_wall_element(element);
   int element_bits = (IS_DF_WALL(element) ?
                      element - EL_DF_WALL_START :
-                     element - EL_MM_WALL_START) & 0x000f;
+                     IS_MM_WALL(element) ?
+                     element - EL_MM_WALL_START : EL_EMPTY) & 0x000f;
   int graphic = el2img_function(element_base);
   int tilesize_draw = tilesize / 2;
   Bitmap *src_bitmap;
@@ -2505,6 +2507,9 @@ static void DrawSizedWallExt_MM(int dst_x, int dst_y, int element, int tilesize,
     int dst_draw_x = dst_x + (i % 2) * tilesize_draw;
     int dst_draw_y = dst_y + (i / 2) * tilesize_draw;
 
+    if (!(element_bits_draw & (1 << i)))
+      continue;
+
     if (element_bits & (1 << i))
     {
       if (masked)
@@ -2523,10 +2528,18 @@ static void DrawSizedWallExt_MM(int dst_x, int dst_y, int element, int tilesize,
   }
 }
 
+void DrawSizedWallParts_MM(int x, int y, int element, int tilesize,
+                          boolean masked, int element_bits_draw)
+{
+  DrawSizedWallExt_MM(SX + x * tilesize, SY + y * tilesize,
+                     element, tilesize, el2edimg, masked, element_bits_draw);
+}
+
 void DrawSizedWall_MM(int dst_x, int dst_y, int element, int tilesize,
                      int (*el2img_function)(int))
 {
-  DrawSizedWallExt_MM(dst_x, dst_y, element, tilesize, el2img_function, FALSE);
+  DrawSizedWallExt_MM(dst_x, dst_y, element, tilesize, el2img_function, FALSE,
+                     0x000f);
 }
 
 void DrawSizedElementExt(int x, int y, int element, int tilesize,
@@ -2535,7 +2548,7 @@ void DrawSizedElementExt(int x, int y, int element, int tilesize,
   if (IS_MM_WALL(element))
   {
     DrawSizedWallExt_MM(SX + x * tilesize, SY + y * tilesize,
-                       element, tilesize, el2edimg, masked);
+                       element, tilesize, el2edimg, masked, 0x000f);
   }
   else
   {
index 7727ab696545a1b16a18a9002f00130778f3e952..794cc085adb300a8b8878cac7de7af26dcc7d0d2 100644 (file)
@@ -178,6 +178,7 @@ void DrawLevelElement(int, int, int);
 void DrawScreenField(int, int);
 void DrawLevelField(int, int);
 
+void DrawSizedWallParts_MM(int, int, int, int, boolean, int);
 void DrawSizedElement(int, int, int, int);
 void DrawSizedElementThruMask(int, int, int, int);
 void DrawSizedElementOrWall(int, int, int, int, int);