rnd-20060716-2-src
authorHolger Schemel <info@artsoft.org>
Sun, 16 Jul 2006 21:09:07 +0000 (23:09 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:52:16 +0000 (10:52 +0200)
* fixed bug (very special case) with CE_SCORE_GETS_ZERO, which can
  affect multiple instances of the same CE, although this kind of
  change condition usually only affects one single custom element

ChangeLog
src/conftime.h
src/game.c

index b568e17a414ceeb3e203bce0b339c2d0e8e3734b..4a0bb135689851d8155d21ed30e00aad8cf58af1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-07-16
+       * fixed bug (very special case) with CE_SCORE_GETS_ZERO, which can
+         affect multiple instances of the same CE, although this kind of
+         change condition usually only affects one single custom element
+
 2006-07-16
        * version number set to 3.2.1
 
index 34832b944553ea4ab8a20fae8461c056dcc8ff47..200c0a4363e127850a1f3c2d45a9d342c321bf15 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2006-07-16 14:46]"
+#define COMPILE_DATE_STRING "[2006-07-16 23:06]"
index f06c86d855c06673b6c050100ba3bb9aafc7947c..20491136b82b53a4a802c5b6acd4d64a0447ee89 100644 (file)
@@ -8420,6 +8420,8 @@ static void ExecuteCustomElementAction(int x, int y, int element, int page)
 
        if (ei->collect_score == 0)
        {
+         int xx, yy;
+
 #if 0
          printf("::: CE_SCORE_GETS_ZERO\n");
 #endif
@@ -8430,6 +8432,26 @@ static void ExecuteCustomElementAction(int x, int y, int element, int page)
 #if 0
          printf("::: RESULT: %d, %d\n", Feld[x][y], ChangePage[x][y]);
 #endif
+
+#if 1
+         /*
+           This is a very special case that seems to be a mixture between
+           CheckElementChange() and CheckTriggeredElementChange(): while
+           the first one only affects single elements that are triggered
+           directly, the second one affects multiple elements in the playfield
+           that are triggered indirectly by another element. This is a third
+           case: Changing the CE score always affects multiple identical CEs,
+           so every affected CE must be checked, not only the single CE for
+           which the CE score was changed in the first place (as every instance
+           of that CE shares the same CE score, and therefore also can change)!
+         */
+         SCAN_PLAYFIELD(xx, yy)
+         {
+           if (Feld[xx][yy] == element)
+             CheckElementChange(xx, yy, element, EL_UNDEFINED,
+                                CE_SCORE_GETS_ZERO);
+         }
+#endif
        }
       }