rnd-20100216-4-src
authorHolger Schemel <info@artsoft.org>
Tue, 16 Feb 2010 22:01:57 +0000 (23:01 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:58:34 +0000 (10:58 +0200)
* fixed bug with re-initializing already existing elements in function
  RelocatePlayer() in src/game.c (causing problems with Sokoban fields
  counted a second time, making the currently playing level unsolvable)

ChangeLog
src/conftime.h
src/game.c

index 7bab90c53c682be21045e0cbbb211916118a0354..59251bf1af90c9330cfa6b07e9d414c83cbd8f7d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2010-02-16
        * fixed bug in native Supaplex engine that broke several demo solutions
+       * fixed bug with re-initializing already existing elements in function
+         RelocatePlayer() in src/game.c (causing problems with Sokoban fields
+         counted a second time, making the currently playing level unsolvable)
        * done integrating R'n'D graphics engine into file "SnikSnaks.c"
        * done integrating R'n'D graphics engine into file "Electrons.c"
        * done integrating R'n'D graphics engine into file "Zonk.c"
index f6b24ec44faf4746581484e14bdc43c3685f2207..b2c80b93e964e0e324cba9102d6f09f8d354ce7d 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2010-02-16 17:44"
+#define COMPILE_DATE_STRING "2010-02-16 22:55"
index 1a04be1c3b6be86a8cb2786d60b7eee30968fd81..f8b9a085891166c4db14cdb306e9546810c87800 100644 (file)
@@ -5772,10 +5772,19 @@ void RelocatePlayer(int jx, int jy, int el_player_raw)
   Feld[jx][jy] = el_player;
   InitPlayerField(jx, jy, el_player, TRUE);
 
+  /* "InitPlayerField()" above sets Feld[jx][jy] to EL_EMPTY, but it may be
+     possible that the relocation target field did not contain a player element,
+     but a walkable element, to which the new player was relocated -- in this
+     case, restore that (already initialized!) element on the player field */
   if (!ELEM_IS_PLAYER(element))        /* player may be set on walkable element */
   {
-    Feld[jx][jy] = element;
+    Feld[jx][jy] = element;    /* restore previously existing element */
+#if 0
+    /* !!! do not initialize already initialized element a second time !!! */
+    /* (this causes at least problems with "element creation" CE trigger for
+       already existing elements, and existing Sokoban fields counted twice) */
     InitField(jx, jy, FALSE);
+#endif
   }
 
   /* only visually relocate centered player */