rnd-20040423-1-src
authorHolger Schemel <info@artsoft.org>
Fri, 23 Apr 2004 19:40:04 +0000 (21:40 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:47:00 +0000 (10:47 +0200)
* fixed graphical bug when pushing things from elements walkable inside

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

index 1f52e0d57366c69945dbcdc270a61fd18be8743c..3abd5c1fc3db45cda807db24aab088fd6d75e4d3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,7 @@
        * added "replace when walkable" to relocate player to walkable element
        * added "enter"/"leave" event for elements affected by relocation
        * fixed "direct"/"indirect" change order also for "when change" event
+       * fixed graphical bug when pushing things from elements walkable inside
 
 2004-04-18
        * fixed graphic bug when player is snapping while moving in old levels
index c9566923bea7f52f8b56da929a592c9713150531..bbf0b89ca9b6d6c34d275a3bb9cc3127836ce84b 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2004-04-22 00:31]"
+#define COMPILE_DATE_STRING "[2004-04-23 09:52]"
index 0077517dc4f10e01beaa9114fe298556cba1e65f..f0e568b826623e36dd6b933a77a068142344d1db 100644 (file)
@@ -3503,9 +3503,15 @@ void DynaExplode(int ex, int ey)
       Explode(x, y, EX_PHASE_START, EX_TYPE_BORDER);
 
 #if 1
+#if 1
+      if (element != EL_EMPTY && element != EL_EXPLOSION &&
+         !IS_DIGGABLE(element) && !dynabomb_xl)
+       break;
+#else
       if (element != EL_EMPTY && element != EL_EXPLOSION &&
          !CAN_GROW_INTO(element) && !dynabomb_xl)
        break;
+#endif
 #else
       /* !!! extend EL_SAND to anything diggable (but maybe not SP_BASE) !!! */
       if (element != EL_EMPTY && element != EL_EXPLOSION &&
@@ -7554,7 +7560,7 @@ static boolean ChangeElementNow(int x, int y, int element, int page)
   }
 
 #if 1
-  /* !!! indirect change before direct change !!! */
+  /* this uses direct change before indirect change */
   CheckTriggeredElementChangeByPage(x,y,old_element,CE_OTHER_IS_CHANGING,page);
 #endif
 
@@ -9009,7 +9015,7 @@ static boolean canMoveToValidFieldWithGravity(int x, int y, int move_dir)
 
 #if 1
   return (IN_LEV_FIELD(newx, newy) && !IS_FREE_OR_PLAYER(newx, newy) &&
-         (IS_DIGGABLE(Feld[newx][newy]) ||
+         (IS_DIGGABLE_WITH_GRAVITY(Feld[newx][newy]) ||
           IS_WALKABLE_FROM(Feld[newx][newy], opposite_dir) ||
           canPassField(newx, newy, move_dir)));
 #else
index 58595e5bc3448146d15a624f3eac5705e94cdef0..b19f825bf6021b0738285dc70dd32c3d6e5dd4cb 100644 (file)
@@ -2428,6 +2428,14 @@ void InitElementPropertiesStatic()
     -1
   };
 
+  static int ep_sp_buggy_base[] =
+  {
+    EL_SP_BUGGY_BASE,
+    EL_SP_BUGGY_BASE_ACTIVATING,
+    EL_SP_BUGGY_BASE_ACTIVE,
+    -1
+  };
+
   static int ep_gem[] =
   {
     EL_BD_DIAMOND,
@@ -3072,6 +3080,7 @@ void InitElementPropertiesStatic()
     { ep_bd_element,           EP_BD_ELEMENT           },
     { ep_sp_element,           EP_SP_ELEMENT           },
     { ep_sb_element,           EP_SB_ELEMENT           },
+    { ep_sp_buggy_base,                EP_SP_BUGGY_BASE        },
     { ep_gem,                  EP_GEM                  },
     { ep_food_dark_yamyam,     EP_FOOD_DARK_YAMYAM     },
     { ep_food_penguin,         EP_FOOD_PENGUIN         },
@@ -3378,6 +3387,10 @@ void InitElementPropertiesEngine(int engine_version)
     SET_PROPERTY(i, EP_MAYBE_DONT_COLLIDE_WITH, (i == EL_SP_SNIKSNAK ||
                                                 i == EL_SP_ELECTRON));
 
+    /* ---------- DIGGABLE_WITH_GRAVITY ------------------------------------ */
+    SET_PROPERTY(i, EP_DIGGABLE_WITH_GRAVITY, (IS_DIGGABLE(i) &&
+                                              !IS_SP_BUGGY_BASE(i)));
+
     /* ---------- CAN_MOVE_INTO_ACID --------------------------------------- */
     if (COULD_MOVE_INTO_ACID(i) && !IS_CUSTOM_ELEMENT(i))
       SET_PROPERTY(i, EP_CAN_MOVE_INTO_ACID,
index 7b7342e9f274b304a9ac832169a845cda25efef7..9637f6ad12a2413edc956a856c2e45e1875bbea9 100644 (file)
 #define EP_BD_ELEMENT          35
 #define EP_SP_ELEMENT          36
 #define EP_SB_ELEMENT          37
-#define EP_GEM                 38
-#define EP_FOOD_DARK_YAMYAM    39
-#define EP_FOOD_PENGUIN                40
-#define EP_FOOD_PIG            41
-#define EP_HISTORIC_WALL       42
-#define EP_HISTORIC_SOLID      43
-#define EP_CLASSIC_ENEMY       44
-#define EP_BELT                        45
-#define EP_BELT_ACTIVE         46
-#define EP_BELT_SWITCH         47
-#define EP_TUBE                        48
-#define EP_KEYGATE             49
-#define EP_AMOEBOID            50
-#define EP_AMOEBALIVE          51
-#define EP_HAS_CONTENT         52
-#define EP_CAN_TURN_EACH_MOVE  53
-#define EP_CAN_GROW            54
-#define EP_ACTIVE_BOMB         55
-#define EP_INACTIVE            56
+#define EP_SP_BUGGY_BASE       38
+#define EP_GEM                 39
+#define EP_FOOD_DARK_YAMYAM    40
+#define EP_FOOD_PENGUIN                41
+#define EP_FOOD_PIG            42
+#define EP_HISTORIC_WALL       43
+#define EP_HISTORIC_SOLID      44
+#define EP_CLASSIC_ENEMY       45
+#define EP_BELT                        46
+#define EP_BELT_ACTIVE         47
+#define EP_BELT_SWITCH         48
+#define EP_TUBE                        49
+#define EP_KEYGATE             50
+#define EP_AMOEBOID            51
+#define EP_AMOEBALIVE          52
+#define EP_HAS_CONTENT         53
+#define EP_CAN_TURN_EACH_MOVE  54
+#define EP_CAN_GROW            55
+#define EP_ACTIVE_BOMB         56
+#define EP_INACTIVE            57
 
 /* values for special configurable properties (depending on level settings) */
-#define EP_EM_SLIPPERY_WALL    57
+#define EP_EM_SLIPPERY_WALL    58
 
 /* values for special graphics properties (no effect on game engine) */
-#define EP_GFX_CRUMBLED                58
+#define EP_GFX_CRUMBLED                59
 
 /* values for derived properties (determined from properties above) */
-#define EP_ACCESSIBLE_OVER     59
-#define EP_ACCESSIBLE_INSIDE   60
-#define EP_ACCESSIBLE_UNDER    61
-#define EP_WALKABLE            62
-#define EP_PASSABLE            63
-#define EP_ACCESSIBLE          64
-#define EP_COLLECTIBLE         65
-#define EP_SNAPPABLE           66
-#define EP_WALL                        67
-#define EP_SOLID_FOR_PUSHING   68
-#define EP_DRAGONFIRE_PROOF    69
-#define EP_EXPLOSION_PROOF     70
-#define EP_CAN_SMASH           71
-#define EP_CAN_EXPLODE         72
-#define EP_CAN_EXPLODE_3X3     73
-#define EP_SP_PORT             74
-#define EP_CAN_EXPLODE_BY_DRAGONFIRE   75
-#define EP_CAN_EXPLODE_BY_EXPLOSION    76
-#define EP_COULD_MOVE_INTO_ACID                77
-#define EP_MAYBE_DONT_COLLIDE_WITH     78
+#define EP_ACCESSIBLE_OVER     60
+#define EP_ACCESSIBLE_INSIDE   61
+#define EP_ACCESSIBLE_UNDER    62
+#define EP_WALKABLE            63
+#define EP_PASSABLE            64
+#define EP_ACCESSIBLE          65
+#define EP_COLLECTIBLE         66
+#define EP_SNAPPABLE           67
+#define EP_WALL                        68
+#define EP_SOLID_FOR_PUSHING   69
+#define EP_DRAGONFIRE_PROOF    70
+#define EP_EXPLOSION_PROOF     71
+#define EP_CAN_SMASH           72
+#define EP_CAN_EXPLODE         73
+#define EP_CAN_EXPLODE_3X3     74
+#define EP_SP_PORT             75
+#define EP_CAN_EXPLODE_BY_DRAGONFIRE   76
+#define EP_CAN_EXPLODE_BY_EXPLOSION    77
+#define EP_COULD_MOVE_INTO_ACID                78
+#define EP_MAYBE_DONT_COLLIDE_WITH     79
+#define EP_DIGGABLE_WITH_GRAVITY       80
 
 /* values for internal purpose only (level editor) */
-#define EP_EXPLODE_RESULT      79
-#define EP_WALK_TO_OBJECT      80
-#define EP_DEADLY              81
+#define EP_EXPLODE_RESULT      81
+#define EP_WALK_TO_OBJECT      82
+#define EP_DEADLY              83
 
-#define NUM_ELEMENT_PROPERTIES 82
+#define NUM_ELEMENT_PROPERTIES 84
 
 #define NUM_EP_BITFIELDS       ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE       0
 #define IS_BD_ELEMENT(e)       HAS_PROPERTY(e, EP_BD_ELEMENT)
 #define IS_SP_ELEMENT(e)       HAS_PROPERTY(e, EP_SP_ELEMENT)
 #define IS_SB_ELEMENT(e)       HAS_PROPERTY(e, EP_SB_ELEMENT)
+#define IS_SP_BUGGY_BASE(e)    HAS_PROPERTY(e, EP_SP_BUGGY_BASE)
 #define IS_GEM(e)              HAS_PROPERTY(e, EP_GEM)
 #define IS_FOOD_DARK_YAMYAM(e) HAS_PROPERTY(e, EP_FOOD_DARK_YAMYAM)
 #define IS_FOOD_PENGUIN(e)     HAS_PROPERTY(e, EP_FOOD_PENGUIN)
 #define CAN_EXPLODE_BY_EXPLOSION(e)    \
                                HAS_PROPERTY(e, EP_CAN_EXPLODE_BY_EXPLOSION)
 #define COULD_MOVE_INTO_ACID(e)        HAS_PROPERTY(e, EP_COULD_MOVE_INTO_ACID)
-#define MAYBE_DONT_COLLIDE_WITH(e)  HAS_PROPERTY(e, EP_MAYBE_DONT_COLLIDE_WITH)
+#define MAYBE_DONT_COLLIDE_WITH(e) HAS_PROPERTY(e, EP_MAYBE_DONT_COLLIDE_WITH)
+#define IS_DIGGABLE_WITH_GRAVITY(e) HAS_PROPERTY(e, EP_DIGGABLE_WITH_GRAVITY)
 
 /* special macros used in game engine */
 #define IS_CUSTOM_ELEMENT(e)   ((e) >= EL_CUSTOM_START &&              \