rnd-20080930-1-src
authorHolger Schemel <info@artsoft.org>
Mon, 29 Sep 2008 22:16:39 +0000 (00:16 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:57:08 +0000 (10:57 +0200)
* fixed bug with player relocation while the player switches an element
* fixed bug with EM/DC style exit and EM/DC style steel exit which was
  not walkable (and did not let the player enter) when in process of
  opening, but not fully open yet (which can cause the player not being
  able to enter the exit in EM/DC style levels in time)

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

index 8349425ea1bef0e7f925aa04d6c1a42f24edc76a..568026958c463d9a7dd6b6cf71023df16816f5dd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-09-29
+       * fixed bug with player relocation while the player switches an element
+
+2008-09-24
+       * fixed bug with EM/DC style exit and EM/DC style steel exit which was
+         not walkable (and did not let the player enter) when in process of
+         opening, but not fully open yet (which can cause the player not being
+         able to enter the exit in EM/DC style levels in time)
+
 2008-08-02
        * fixed some bugs regarding the new level/CE random seed reset options
 
index 82f62ae4e35d139200ba687ab915c356bdb83fc5..42a8c611add6681c6a381e0765fb6b9a1a02949e 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2008-08-03 10:43"
+#define COMPILE_DATE_STRING "2008-09-30 00:05"
index a32fcfa7f5e4111302fe2a814b7363248861660a..ce62844112c7360d8d833ad87ba72c7ae53325f7 100644 (file)
@@ -5641,6 +5641,21 @@ void RelocatePlayer(int jx, int jy, int el_player_raw)
 
   CheckTriggeredElementChangeByPlayer(jx, jy, element, CE_PLAYER_ENTERS_X,
                                      player->index_bit, enter_side);
+
+#if 1
+  if (player->is_switching)
+  {
+    /* ensure that relocation while still switching an element does not cause
+       a new element to be treated as also switched directly after relocation
+       (this is important for teleporter switches that teleport the player to
+       a place where another teleporter switch is in the same direction, which
+       would then incorrectly be treated as immediately switched before the
+       direction key that caused the switch was released) */
+
+    player->switch_x += jx - old_jx;
+    player->switch_y += jy - old_jy;
+  }
+#endif
 }
 
 void Explode(int ex, int ey, int phase, int mode)
@@ -13622,8 +13637,14 @@ void ScrollPlayer(struct PlayerInfo *player, int mode)
 
     if (Feld[jx][jy] == EL_EXIT_OPEN ||
        Feld[jx][jy] == EL_EM_EXIT_OPEN ||
+#if 1
+       Feld[jx][jy] == EL_EM_EXIT_OPENING ||
+#endif
        Feld[jx][jy] == EL_STEEL_EXIT_OPEN ||
        Feld[jx][jy] == EL_EM_STEEL_EXIT_OPEN ||
+#if 1
+       Feld[jx][jy] == EL_EM_STEEL_EXIT_OPENING ||
+#endif
        Feld[jx][jy] == EL_SP_EXIT_OPEN ||
        Feld[jx][jy] == EL_SP_EXIT_OPENING)     /* <-- special case */
     {
@@ -14760,8 +14781,14 @@ static int DigField(struct PlayerInfo *player,
     }
     else if (element == EL_EXIT_OPEN ||
             element == EL_EM_EXIT_OPEN ||
+#if 1
+            element == EL_EM_EXIT_OPENING ||
+#endif
             element == EL_STEEL_EXIT_OPEN ||
             element == EL_EM_STEEL_EXIT_OPEN ||
+#if 1
+            element == EL_EM_STEEL_EXIT_OPENING ||
+#endif
             element == EL_SP_EXIT_OPEN ||
             element == EL_SP_EXIT_OPENING)
     {
index 6b7cc72e6d8fbe8529e758d281f82d843cfa551b..9dab9371e449ca0d78369721134f346fe34443cc 100644 (file)
@@ -3153,10 +3153,16 @@ void InitElementPropertiesStatic()
     EL_SOKOBAN_FIELD_EMPTY,
     EL_EXIT_OPEN,
     EL_EM_EXIT_OPEN,
+#if 1
+    EL_EM_EXIT_OPENING,
+#endif
     EL_SP_EXIT_OPEN,
     EL_SP_EXIT_OPENING,
     EL_STEEL_EXIT_OPEN,
     EL_EM_STEEL_EXIT_OPEN,
+#if 1
+    EL_EM_STEEL_EXIT_OPENING,
+#endif
     EL_GATE_1,
     EL_GATE_2,
     EL_GATE_3,