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"
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 */