rnd-20040321-2-src
authorHolger Schemel <info@artsoft.org>
Sun, 21 Mar 2004 00:46:13 +0000 (01:46 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:46:31 +0000 (10:46 +0200)
* fixed bug with custom elements digging and leaving elements

ChangeLog
src/conftime.h
src/game.c
src/main.h

index 28dfe09cdca2e03b5da01e535c610f04ba478e5e..8a71ec2d0ff075cc92f1a57b5de2a62469108866 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 2004-03-20
        * added copy and paste functions for custom change pages
        * enhanced graphical display and functionality of tape recorder
+       * fixed bug with custom elements digging and leaving elements
 
 2004-03-19
        * added move speed faster than "very fast" for custom elements
index 4c5a44214acb726a55474e658f2c3529d6e53f39..61003e20bec5b0c90511d2dce1a22ad2090b7e4f 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2004-03-21 00:07]"
+#define COMPILE_DATE_STRING "[2004-03-21 01:39]"
index 917fcbb2fffeb704a694f35381d11a14fa6a6ebc..0c4100d2f6da2afb37174b7c373eaf1341b2590e 100644 (file)
@@ -1351,6 +1351,7 @@ static void InitGameEngine()
     element_info[e].move_stepsize = move_stepsize_list[i].move_stepsize;
   }
 
+#if 0
   /* ---------- initialize move dig/leave ---------------------------------- */
 
   for (i = 0; i < MAX_NUM_ELEMENTS; i++)
@@ -1358,6 +1359,7 @@ static void InitGameEngine()
     element_info[i].can_leave_element = FALSE;
     element_info[i].can_leave_element_last = FALSE;
   }
+#endif
 
   /* ---------- initialize gem count --------------------------------------- */
 
@@ -5556,8 +5558,15 @@ void StartMoving(int x, int y)
        PlayLevelSoundAction(x, y, action);
       }
 
+#if 1
+      Store[newx][newy] = EL_EMPTY;
+      if (IS_EQUAL_OR_IN_GROUP(new_element, MOVE_ENTER_EL(element)) ||
+         element_info[element].move_leave_type == LEAVE_TYPE_UNLIMITED)
+       Store[newx][newy] = element_info[element].move_leave_element;
+#else
       if (IS_EQUAL_OR_IN_GROUP(new_element, MOVE_ENTER_EL(element)))
        element_info[element].can_leave_element = TRUE;
+#endif
 
       if (move_pattern & MV_MAZE_RUNNER_STYLE)
       {
@@ -5864,8 +5873,21 @@ void ContinueMoving(int x, int y)
   {
     element = Feld[newx][newy] = EL_ACID;
   }
+#if 1
+  else if (IS_CUSTOM_ELEMENT(element) && !IS_PLAYER(x, y) &&
+          ei->move_leave_element != EL_EMPTY && Store[x][y] != EL_EMPTY)
+  {
+    /* some elements can leave other elements behind after moving */
+
+    Feld[x][y] = Store[x][y];
+    InitField(x, y, FALSE);
+
+    if (GFX_CRUMBLED(Feld[x][y]))
+      DrawLevelFieldCrumbledSandNeighbours(x, y);
+  }
+#endif
 
-  Store[x][y] = 0;
+  Store[x][y] = EL_EMPTY;
   MovPos[x][y] = MovDir[x][y] = MovDelay[x][y] = 0;
   MovDelay[newx][newy] = 0;
 
@@ -5893,7 +5915,7 @@ void ContinueMoving(int x, int y)
 
   ResetGfxAnimation(x, y);     /* reset animation values for old field */
 
-#if 1
+#if 0
   /* some elements can leave other elements behind after moving */
   if (IS_CUSTOM_ELEMENT(element) && !IS_PLAYER(x, y) &&
       ei->move_leave_element != EL_EMPTY &&
index a6d70583521a53697cefde5f2c24977a386129af..c5cabbc4bcc317d05844faa45a462ae09ebc5da1 100644 (file)
@@ -1671,8 +1671,10 @@ struct ElementInfo
 
   boolean in_group[NUM_GROUP_ELEMENTS];
 
+#if 0
   boolean can_leave_element;   /* element can leave other element behind */
   boolean can_leave_element_last;
+#endif
 
   /* ---------- internal values used in level editor ---------- */