rnd-20040129-2-src
authorHolger Schemel <info@artsoft.org>
Thu, 29 Jan 2004 17:55:23 +0000 (18:55 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:45:40 +0000 (10:45 +0200)
* fixed bug: when gravity active, port above player can now be entered
* removed "one white dot" mouse pointer which irritated some people

ChangeLog
src/conftime.h
src/game.c
src/init.c
src/libgame/system.c
src/main.h

index 3f77708c044a9ac4235020688dd0439f094dd46e..9a1a7788a716334591df3129083b2cd0dde3cd7e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2004-01-29
        * fixed bug: infotron can now smash yellow disks
+       * fixed bug: when gravity active, port above player can now be entered
+       * removed "one white dot" mouse pointer which irritated some people
 
 2004-01-26
        * added "choice type" for group element selection
index c163785e19076b4af24025f425bde8d76b51225c..488aa6b8a3b033f85fc5a59cd50dad14b2add860 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2004-01-29 17:39]"
+#define COMPILE_DATE_STRING "[2004-01-29 18:51]"
index 6e5475ebd9bf1bba0b561fd55d9485de5900501c..7b225c5eac9621eb61e6ee2dc195b16d6a4b4c76 100644 (file)
@@ -7550,10 +7550,8 @@ void ScrollLevel(int dx, int dy)
   redraw_mask |= REDRAW_FIELD;
 }
 
-static boolean canEnterSupaplexPort(int x, int y, int move_dir)
+static boolean canEnterSupaplexPort(int x, int y, int dx, int dy)
 {
-  int dx = (move_dir & MV_LEFT ? -1 : move_dir & MV_RIGHT ? +1 : 0);
-  int dy = (move_dir & MV_UP ? -1 : move_dir & MV_DOWN ? +1 : 0);
   int nextx = x + dx, nexty = y + dy;
   int element = Feld[x][y];
 
@@ -7603,7 +7601,9 @@ static void CheckGravityMovement(struct PlayerInfo *player)
     boolean player_is_moving_to_valid_field =
       (IN_LEV_FIELD(new_jx, new_jy) &&
        (Feld[new_jx][new_jy] == EL_SP_BASE ||
-       Feld[new_jx][new_jy] == EL_SAND));
+       Feld[new_jx][new_jy] == EL_SAND ||
+       (IS_SP_PORT(Feld[new_jx][new_jy]) &&
+        canEnterSupaplexPort(new_jx, new_jy, dx, dy))));
     /* !!! extend EL_SAND to anything diggable !!! */
 
     if (field_under_player_is_free &&
@@ -8806,6 +8806,10 @@ int DigField(struct PlayerInfo *player,
     case EL_SP_GRAVITY_PORT_RIGHT:
     case EL_SP_GRAVITY_PORT_UP:
     case EL_SP_GRAVITY_PORT_DOWN:
+#if 1
+      if (!canEnterSupaplexPort(x, y, dx, dy))
+       return MF_NO_ACTION;
+#else
       if ((dx == -1 &&
           element != EL_SP_PORT_LEFT &&
           element != EL_SP_GRAVITY_PORT_LEFT &&
@@ -8829,6 +8833,7 @@ int DigField(struct PlayerInfo *player,
          !IN_LEV_FIELD(nextx, nexty) ||
          !IS_FREE(nextx, nexty))
        return MF_NO_ACTION;
+#endif
 
       if (element == EL_SP_GRAVITY_PORT_LEFT ||
          element == EL_SP_GRAVITY_PORT_RIGHT ||
index ecbe8b61bf05d74a262b556fa60d93579b16b04b..69158a75d27e6a3a7d7f022949d1a80de955630f 100644 (file)
@@ -3119,6 +3119,11 @@ void InitElementPropertiesEngine(int engine_version)
     SET_PROPERTY(i, EP_CAN_EXPLODE_3X3, (CAN_EXPLODE(i) &&
                                         !CAN_EXPLODE_1X1(i) &&
                                         !CAN_EXPLODE_DYNA(i)));
+
+    /* ---------- SP_PORT -------------------------------------------------- */
+    SET_PROPERTY(i, EP_SP_PORT, (IS_SP_ELEMENT(i) &&
+                                IS_PASSABLE_INSIDE(i)));
+
 #if 0
     if (i == EL_CUSTOM_START + 253)
       printf("::: %d, %d, %d -> %d\n",
index 9934650f753173d935459d8b13dc00f7b83a9d09..656d97f90d732e5e988b65e7d1fe838786072b93 100644 (file)
@@ -868,6 +868,31 @@ static const char *cursor_image_playfield[] =
   ". c #ffffff",
   "  c None",
 
+#if 1
+  /* some people complained about a "white dot" on the screen and thought it
+     was a graphical error... OK, let's just remove the whole pointer :-) */
+
+  /* pixels */
+  "                ",
+  "                ",
+  "                ",
+  "                ",
+  "                ",
+  "                ",
+  "                ",
+  "                ",
+  "                ",
+  "                ",
+  "                ",
+  "                ",
+  "                ",
+  "                ",
+  "                ",
+  "                ",
+
+  /* hot spot */
+  "0,0"
+#else
   /* pixels */
   " X              ",
   "X.X             ",
@@ -888,6 +913,7 @@ static const char *cursor_image_playfield[] =
 
   /* hot spot */
   "1,1"
+#endif
 };
 
 #if defined(TARGET_SDL)
index 9d78b18a008fdf70bded85d3c9fdaea6cbce07db..ae2aa5d0e5df5aba5b23e00bf499c4d5653aa0d7 100644 (file)
 #define EP_CAN_SMASH           69
 #define EP_CAN_EXPLODE         70
 #define EP_CAN_EXPLODE_3X3     71
+#define EP_SP_PORT             72
 
 /* values for internal purpose only (level editor) */
-#define EP_EXPLODE_RESULT      72
-#define EP_WALK_TO_OBJECT      73
-#define EP_DEADLY              74
+#define EP_EXPLODE_RESULT      73
+#define EP_WALK_TO_OBJECT      74
+#define EP_DEADLY              75
 
-#define NUM_ELEMENT_PROPERTIES 75
+#define NUM_ELEMENT_PROPERTIES 76
 
 #define NUM_EP_BITFIELDS       ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE       0
 #define CAN_SMASH(e)           HAS_PROPERTY(e, EP_CAN_SMASH)
 #define CAN_EXPLODE(e)         HAS_PROPERTY(e, EP_CAN_EXPLODE)
 #define CAN_EXPLODE_3X3(e)     HAS_PROPERTY(e, EP_CAN_EXPLODE_3X3)
+#define IS_SP_PORT(e)          HAS_PROPERTY(e, EP_SP_PORT)
 
 /* special macros used in game engine */
 #define IS_CUSTOM_ELEMENT(e)   ((e) >= EL_CUSTOM_START &&              \