rnd-20030417-3-src
[rocksndiamonds.git] / src / main.h
index 656481d5581a5c0a982a2c26e43ba62d8a3bcac4..6448eb4bed7a296376e6c3549f447d6222485936 100644 (file)
@@ -60,7 +60,7 @@
 #define IN_SCR_FIELD(x,y) ((x)>=BX1 && (x)<=BX2 && (y)>=BY1 &&(y)<=BY2)
 #define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
 
-/* values for base properties */
+/* values for base properties (storable) */
 #define EP_AMOEBALIVE          0
 #define EP_AMOEBOID            1
 #define EP_CAN_BE_CRUMBLED     2
 #define EP_PUSHABLE            24
 #define EP_PLAYER              25
 #define EP_WALKABLE_OVER       26
-#define EP_WALKABLE_THROUGH    27
+#define EP_WALKABLE_INSIDE     27
 #define EP_WALKABLE_UNDER      28
 #define EP_PASSABLE_OVER       29
-#define EP_PASSABLE_THROUGH    30
+#define EP_PASSABLE_INSIDE     30
 #define EP_PASSABLE_UNDER      31
 
-/* values for runtime properties */
-#define EP_WALKABLE            32
-#define EP_PASSABLE            33
-#define EP_PLAYER_OVER         34
-#define EP_PLAYER_INSIDE       35
-#define EP_PLAYER_UNDER                36
-#define EP_DIGGABLE            37
-#define EP_COLLECTIBLE         38
-#define EP_OVER_PLAYER         39
+/* values for runtime properties (non-storable) */
+#define EP_ACCESSIBLE_OVER     32
+#define EP_ACCESSIBLE_INSIDE   33
+#define EP_ACCESSIBLE_UNDER    34
+#define EP_WALKABLE            35
+#define EP_PASSABLE            36
+#define EP_ACCESSIBLE          37
+#define EP_DIGGABLE            38
+#define EP_COLLECTIBLE         39
 #define EP_ACTIVE_BOMB         40
 #define EP_BELT                        41
 #define EP_BELT_ACTIVE         42
 #define EP_BELT_SWITCH         43
 #define EP_SP_ELEMENT          44
 #define EP_HAS_CONTENT         45
+#define EP_TUBE                        46
 
-#define NUM_ELEMENT_PROPERTIES 46
+#define NUM_ELEMENT_PROPERTIES 47
 
 #define NUM_EP_BITFIELDS       ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE       0
 #define IS_PUSHABLE(e)         HAS_PROPERTY(e, EP_PUSHABLE)
 #define ELEM_IS_PLAYER(e)      HAS_PROPERTY(e, EP_PLAYER)
 #define IS_WALKABLE_OVER(e)    HAS_PROPERTY(e, EP_WALKABLE_OVER)
-#define IS_WALKABLE_THROUGH(e) HAS_PROPERTY(e, EP_WALKABLE_THROUGH)
+#define IS_WALKABLE_INSIDE(e)  HAS_PROPERTY(e, EP_WALKABLE_INSIDE)
 #define IS_WALKABLE_UNDER(e)   HAS_PROPERTY(e, EP_WALKABLE_UNDER)
 #define IS_PASSABLE_OVER(e)    HAS_PROPERTY(e, EP_PASSABLE_OVER)
-#define IS_PASSABLE_THROUGH(e) HAS_PROPERTY(e, EP_PASSABLE_THROUGH)
+#define IS_PASSABLE_INSIDE(e)  HAS_PROPERTY(e, EP_PASSABLE_INSIDE)
 #define IS_PASSABLE_UNDER(e)   HAS_PROPERTY(e, EP_PASSABLE_UNDER)
 
 /* macros for runtime properties */
+#define IS_ACCESSIBLE_OVER(e)  HAS_PROPERTY(e, EP_ACCESSIBLE_OVER)
+#define IS_ACCESSIBLE_INSIDE(e)        HAS_PROPERTY(e, EP_ACCESSIBLE_INSIDE)
+#define IS_ACCESSIBLE_UNDER(e) HAS_PROPERTY(e, EP_ACCESSIBLE_UNDER)
 #define IS_WALKABLE(e)         HAS_PROPERTY(e, EP_WALKABLE)
 #define IS_PASSABLE(e)         HAS_PROPERTY(e, EP_PASSABLE)
-#define IS_PLAYER_OVER(e)      HAS_PROPERTY(e, EP_PLAYER_OVER)
-#define IS_PLAYER_INSIDE(e)    HAS_PROPERTY(e, EP_PLAYER_INSIDE)
-#define IS_PLAYER_UNDER(e)     HAS_PROPERTY(e, EP_PLAYER_UNDER)
+#define IS_ACCESSIBLE(e)       HAS_PROPERTY(e, EP_ACCESSIBLE)
 #define IS_DIGGABLE(e)         HAS_PROPERTY(e, EP_DIGGABLE)
 #define IS_COLLECTIBLE(e)      HAS_PROPERTY(e, EP_COLLECTIBLE)
-#define IS_OVER_PLAYER(e)      HAS_PROPERTY(e, EP_OVER_PLAYER)
 #define IS_ACTIVE_BOMB(e)      HAS_PROPERTY(e, EP_ACTIVE_BOMB)
 #define IS_BELT(e)             HAS_PROPERTY(e, EP_BELT)
 #define IS_BELT_ACTIVE(e)      HAS_PROPERTY(e, EP_BELT_ACTIVE)
 #define IS_BELT_SWITCH(e)      HAS_PROPERTY(e, EP_BELT_SWITCH)
 #define IS_SP_ELEMENT(e)       HAS_PROPERTY(e, EP_SP_ELEMENT)
 #define HAS_CONTENT(e)         HAS_PROPERTY(e, EP_HAS_CONTENT)
+#define IS_TUBE(e)             HAS_PROPERTY(e, EP_TUBE)
 
 #define IS_CUSTOM_ELEMENT(e)   ((e) >= EL_CUSTOM_START &&      \
                                 (e) <= EL_CUSTOM_END)
 
 #define PLAYERINFO(x,y)                (&stored_player[StorePlayer[x][y]-EL_PLAYER_1])
 #define SHIELD_ON(p)           ((p)->shield_normal_time_left > 0)
-#define PROTECTED_FIELD(x,y)   (IS_WALKABLE_UNDER(Feld[x][y]) &&       \
+#define PROTECTED_FIELD(x,y)   (IS_ACCESSIBLE_INSIDE(Feld[x][y]) &&    \
                                 IS_INDESTRUCTIBLE(Feld[x][y]))
 #define PLAYER_PROTECTED(x,y)  (SHIELD_ON(PLAYERINFO(x, y)) ||         \
                                 PROTECTED_FIELD(x, y))