rnd-20040506-1-src
authorHolger Schemel <info@artsoft.org>
Thu, 6 May 2004 07:19:37 +0000 (09:19 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:47:11 +0000 (10:47 +0200)
* fixed bug with exploding dynabomb under player due to other explosion

ChangeLog
src/conftime.h
src/game.c

index 14a869f3ae87668807821992bcdc6141701634c0..f01f8f63d643981a814c4f9447e10bbc243bd8c2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
 2004-05-05
        * fixed bug that caused two activated toolbox buttons in level editor
+       * fixed bug with exploding dynabomb under player due to other explosion
 
 2004-05-02
        * fixed bug with creating walkable custom element under player (again)
index ff3747657771ea5a55ddb2d46e78ae2d7456d570..c351f23fd475c44a5e1f6a007f49cb7d24b6ba23 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2004-05-05 22:30]"
+#define COMPILE_DATE_STRING "[2004-05-06 01:36]"
index f0f4dbf7905b677f46f7bfba82c580b95231a94e..9b0a14b952bb008ad10b4d9bc364ffda646bc902 100644 (file)
@@ -3059,10 +3059,17 @@ void Explode(int ex, int ey, int phase, int mode)
        continue;
 #else
       /* indestructible elements can only explode in center (but not flames) */
+#if 1
+      if ((IS_EXPLOSION_PROOF(element) && (x != ex || y != ey ||
+                                          mode == EX_TYPE_BORDER)) ||
+         element == EL_FLAMES)
+       continue;
+#else
       if ((IS_EXPLOSION_PROOF(element) && (x != ex || y != ey)) ||
          element == EL_FLAMES)
        continue;
 #endif
+#endif
 
 #else
       if ((IS_INDESTRUCTIBLE(element) &&
@@ -3075,7 +3082,7 @@ void Explode(int ex, int ey, int phase, int mode)
 #if 1
       if (IS_PLAYER(x, y) && SHIELD_ON(PLAYERINFO(x, y)) &&
          (game.engine_version < VERSION_IDENT(3,1,0,0) ||
-          (x == ex && y == ey)))
+          (x == ex && y == ey && mode != EX_TYPE_BORDER)))
 #else
       if (IS_PLAYER(x, y) && SHIELD_ON(PLAYERINFO(x, y)))
 #endif
@@ -3090,6 +3097,12 @@ void Explode(int ex, int ey, int phase, int mode)
          Feld[x][y] = (Store[x][y] ? Store[x][y] : EL_EMPTY);
          Store[x][y] = 0;
 #endif
+
+#if 0
+       printf("::: %d,%d: %d %s [%d, %d]\n", x, y, Feld[x][y],
+              element_info[Feld[x][y]].token_name,
+              Store[x][y], Store2[x][y]);
+#endif
        }
 
        continue;
@@ -3101,9 +3114,15 @@ void Explode(int ex, int ey, int phase, int mode)
        Back[x][y] = element;
 #else
 #if 1
+#if 1
+      if (IS_WALKABLE(element) && IS_INDESTRUCTIBLE(element) &&
+         (x != ex || y != ey || mode == EX_TYPE_BORDER))
+       Back[x][y] = element;
+#else
       if (IS_WALKABLE(element) && IS_INDESTRUCTIBLE(element) &&
          (x != ex || y != ey))
        Back[x][y] = element;
+#endif
 #else
       if (IS_WALKABLE(element) && IS_INDESTRUCTIBLE(element))
        Back[x][y] = element;
@@ -3192,10 +3211,15 @@ void Explode(int ex, int ey, int phase, int mode)
       else
        Store[x][y] = EL_EMPTY;
 
-      if (x != ex || y != ey ||
-         center_element == EL_AMOEBA_TO_DIAMOND || mode == EX_TYPE_BORDER)
+      if (x != ex || y != ey || mode == EX_TYPE_BORDER ||
+         center_element == EL_AMOEBA_TO_DIAMOND)
        Store2[x][y] = element;
 
+#if 0
+      printf("::: %d,%d: %d %s\n", x, y, Store2[x][y],
+            element_info[Store2[x][y]].token_name);
+#endif
+
 #if 0
       if (AmoebaNr[x][y] &&
          (element == EL_AMOEBA_FULL ||
@@ -3242,6 +3266,11 @@ void Explode(int ex, int ey, int phase, int mode)
       game.yamyam_content_nr =
        (game.yamyam_content_nr + 1) % level.num_yamyam_contents;
 
+#if 0
+  printf("::: %d,%d: %d %s [%d]\n", ex + 1, ey, Feld[ex + 1][ey],
+        element_info[Feld[ex + 1][ey]].token_name, Store2[ex + 1][ey]);
+#endif
+
     return;
   }
 
@@ -3295,6 +3324,11 @@ void Explode(int ex, int ey, int phase, int mode)
     border_element = StorePlayer[x][y];
 #endif
 
+#if 0
+  printf("::: %d,%d: %d %s [%d]\n", x, y, border_element,
+        element_info[border_element].token_name, Store2[x][y]);
+#endif
+
 #if 0
   printf("::: phase == %d\n", phase);
 #endif
@@ -3325,6 +3359,11 @@ void Explode(int ex, int ey, int phase, int mode)
     }
     else if (CAN_EXPLODE_BY_EXPLOSION(border_element))
     {
+#if 0
+      printf("::: %d,%d: %d %s\n", x, y, border_element,
+            element_info[border_element].token_name);
+#endif
+
       Feld[x][y] = Store2[x][y];
       Store2[x][y] = 0;
       Bang(x, y);