rnd-20030423-1-src
[rocksndiamonds.git] / src / main.h
index 6e46f348e52bb8a531acd74c74bd45484554a0c4..f4243bf685b651c43b517eb0281993528cf8275a 100644 (file)
 #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)
 
-/* property values */
+/* values for base properties (storable) */
 #define EP_AMOEBALIVE          0
 #define EP_AMOEBOID            1
 #define EP_CAN_BE_CRUMBLED     2
-#define EP_PFORTE              3
-#define EP_SOLID               4
+#define EP_KEYGATE             3
+#define EP_HISTORIC_SOLID      4
 #define EP_INDESTRUCTIBLE      5
 #define EP_SLIPPERY            6
 #define EP_ENEMY               7
-#define EP_MAUER               8
+#define EP_HISTORIC_WALL       8
 #define EP_CAN_FALL            9
 #define EP_CAN_SMASH           10
 #define EP_CAN_CHANGE          11
 #define EP_PUSHABLE            24
 #define EP_PLAYER              25
 #define EP_WALKABLE_OVER       26
-#define EP_DIGGABLE            27
-#define EP_COLLECTIBLE         28
-#define EP_WALKABLE_THROUGH    29
-#define EP_OVER_PLAYER         30
-#define EP_ACTIVE_BOMB         31
-
-#define EP_BELT                        32
-#define EP_BELT_ACTIVE         33
-#define EP_BELT_SWITCH         34
-#define EP_WALKABLE_UNDER      35
-#define EP_SP_ELEMENT          36
-#define EP_HAS_CONTENT         37
-#define EP_SOLID_NEW           38
-
-#define NUM_ELEMENT_PROPERTIES 39
+#define EP_WALKABLE_INSIDE     27
+#define EP_WALKABLE_UNDER      28
+#define EP_PASSABLE_OVER       29
+#define EP_PASSABLE_INSIDE     30
+#define EP_PASSABLE_UNDER      31
+
+/* 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 EP_WALL                        47
+
+#define NUM_ELEMENT_PROPERTIES 48
 
 #define NUM_EP_BITFIELDS       ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE       0
 
+#define EP_BITMASK_DEFAULT     0
+
 #define PROPERTY_BIT(p)                (1 << ((p) % 32))
 #define PROPERTY_VAR(e, p)     (Properties[e][(p) / 32])
 #define HAS_PROPERTY(e, p)     ((PROPERTY_VAR(e, p) & PROPERTY_BIT(p)) != 0)
                                 (PROPERTY_VAR(e,p) |=  PROPERTY_BIT(p)) : \
                                 (PROPERTY_VAR(e,p) &= ~PROPERTY_BIT(p)))
 
-/* property bit masks */
-#define EP_BIT_AMOEBALIVE      PROPERTY_BIT(EP_AMOEBALIVE)
-#define EP_BIT_AMOEBOID                PROPERTY_BIT(EP_AMOEBOID)
-#define EP_BIT_CAN_BE_CRUMBLED PROPERTY_BIT(EP_CAN_BE_CRUMBLED)
-#define EP_BIT_PFORTE          PROPERTY_BIT(EP_PFORTE)
-#define EP_BIT_SOLID           PROPERTY_BIT(EP_SOLID)
-#define EP_BIT_INDESTRUCTIBLE  PROPERTY_BIT(EP_INDESTRUCTIBLE)
-#define EP_BIT_SLIPPERY                PROPERTY_BIT(EP_SLIPPERY)
-#define EP_BIT_ENEMY           PROPERTY_BIT(EP_ENEMY)
-#define EP_BIT_MAUER           PROPERTY_BIT(EP_MAUER)
-#define EP_BIT_CAN_FALL                PROPERTY_BIT(EP_CAN_FALL)
-#define EP_BIT_CAN_SMASH       PROPERTY_BIT(EP_CAN_SMASH)
-#define EP_BIT_CAN_CHANGE      PROPERTY_BIT(EP_CAN_CHANGE)
-#define EP_BIT_CAN_MOVE                PROPERTY_BIT(EP_CAN_MOVE)
-#define EP_BIT_COULD_MOVE      PROPERTY_BIT(EP_COULD_MOVE)
-#define EP_BIT_DONT_TOUCH      PROPERTY_BIT(EP_DONT_TOUCH)
-#define EP_BIT_DONT_GO_TO      PROPERTY_BIT(EP_DONT_GO_TO)
-#define EP_BIT_FOOD_DARK_YAMYAM        PROPERTY_BIT(EP_FOOD_DARK_YAMYAM)
-#define EP_BIT_EM_SLIPPERY_WALL        PROPERTY_BIT(EP_EM_SLIPPERY_WALL)
-#define EP_BIT_BD_ELEMENT      PROPERTY_BIT(EP_BD_ELEMENT)
-#define EP_BIT_SB_ELEMENT      PROPERTY_BIT(EP_SB_ELEMENT)
-#define EP_BIT_GEM             PROPERTY_BIT(EP_GEM)
-#define EP_BIT_INACTIVE                PROPERTY_BIT(EP_INACTIVE)
-#define EP_BIT_EXPLOSIVE       PROPERTY_BIT(EP_EXPLOSIVE)
-#define EP_BIT_FOOD_PENGUIN    PROPERTY_BIT(EP_FOOD_PENGUIN)
-#define EP_BIT_PUSHABLE                PROPERTY_BIT(EP_PUSHABLE)
-#define EP_BIT_PLAYER          PROPERTY_BIT(EP_PLAYER)
-#define EP_BIT_WALKABLE_OVER   PROPERTY_BIT(EP_WALKABLE_OVER)
-#define EP_BIT_DIGGABLE                PROPERTY_BIT(EP_DIGGABLE)
-#define EP_BIT_COLLECTIBLE     PROPERTY_BIT(EP_COLLECTIBLE)
-#define EP_BIT_WALKABLE_THROUGH PROPERTY_BIT(EP_WALKABLE_THROUGH)
-#define EP_BIT_OVER_PLAYER     PROPERTY_BIT(EP_OVER_PLAYER)
-#define EP_BIT_ACTIVE_BOMB     PROPERTY_BIT(EP_ACTIVE_BOMB)
-
-#define EP_BIT_BELT            PROPERTY_BIT(EP_BELT)
-#define EP_BIT_BELT_ACTIVE     PROPERTY_BIT(EP_BELT_ACTIVE)
-#define EP_BIT_BELT_SWITCH     PROPERTY_BIT(EP_BELT_SWITCH)
-#define EP_BIT_WALKABLE_UNDER  PROPERTY_BIT(EP_WALKABLE_UNDER)
-#define EP_BIT_SP_ELEMENT      PROPERTY_BIT(EP_SP_ELEMENT)
-#define EP_BIT_HAS_CONTENT     PROPERTY_BIT(EP_HAS_CONTENT)
-#define EP_BIT_SOLID_NEW       PROPERTY_BIT(EP_SOLID_NEW)
-
-
-#define EP_BITMASK_DEFAULT     0
-
-/* property macros */
+/* macros for base properties */
 #define IS_AMOEBALIVE(e)       HAS_PROPERTY(e, EP_AMOEBALIVE)
 #define IS_AMOEBOID(e)         HAS_PROPERTY(e, EP_AMOEBOID)
 #define CAN_BE_CRUMBLED(e)     HAS_PROPERTY(e, EP_CAN_BE_CRUMBLED)
-#define IS_PFORTE(e)           HAS_PROPERTY(e, EP_PFORTE)
-#define IS_SOLID(e)            HAS_PROPERTY(e, EP_SOLID)
+#define IS_KEYGATE(e)          HAS_PROPERTY(e, EP_KEYGATE)
+#define IS_HISTORIC_SOLID(e)   HAS_PROPERTY(e, EP_HISTORIC_SOLID)
 #define IS_INDESTRUCTIBLE(e)   HAS_PROPERTY(e, EP_INDESTRUCTIBLE)
 #define IS_SLIPPERY(e)         HAS_PROPERTY(e, EP_SLIPPERY)
 #define IS_ENEMY(e)            HAS_PROPERTY(e, EP_ENEMY)
-#define IS_MAUER(e)            HAS_PROPERTY(e, EP_MAUER)
+#define IS_HISTORIC_WALL(e)    HAS_PROPERTY(e, EP_HISTORIC_WALL)
 #define CAN_FALL(e)            HAS_PROPERTY(e, EP_CAN_FALL)
 #define CAN_SMASH(e)           HAS_PROPERTY(e, EP_CAN_SMASH)
 #define CAN_CHANGE(e)          HAS_PROPERTY(e, EP_CAN_CHANGE)
 #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_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_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_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_WALKABLE_THROUGH(e) HAS_PROPERTY(e, EP_WALKABLE_THROUGH)
-#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_WALKABLE_UNDER(e)   HAS_PROPERTY(e, EP_WALKABLE_UNDER)
 #define IS_SP_ELEMENT(e)       HAS_PROPERTY(e, EP_SP_ELEMENT)
 #define HAS_CONTENT(e)         HAS_PROPERTY(e, EP_HAS_CONTENT)
-#define IS_SOLID_NEW(e)                HAS_PROPERTY(e, EP_SOLID_NEW)
+#define IS_TUBE(e)             HAS_PROPERTY(e, EP_TUBE)
+#define IS_WALL(e)             HAS_PROPERTY(e, EP_WALL)
 
 #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))
 #define FONT_TEXT_2                            9
 #define FONT_TEXT_3                            10
 #define FONT_TEXT_4                            11
-#define FONT_INPUT_1                           12
-#define FONT_INPUT_1_ACTIVE                    13
-#define FONT_INPUT_2                           14
-#define FONT_INPUT_2_ACTIVE                    15
+#define FONT_INPUT_1_ACTIVE                    12
+#define FONT_INPUT_1                           13
+#define FONT_INPUT_2_ACTIVE                    14
+#define FONT_INPUT_2                           15
 #define FONT_OPTION_OFF                                16
 #define FONT_OPTION_ON                         17
 #define FONT_VALUE_1                           18
 #define PROGRAM_VERSION_MAJOR  2
 #define PROGRAM_VERSION_MINOR  2
 #define PROGRAM_VERSION_PATCH  0
-#define PROGRAM_VERSION_STRING "2.2.0rc4"
+#define PROGRAM_VERSION_STRING "2.2.0rc7"
 
 #define PROGRAM_TITLE_STRING   "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING  "Holger Schemel"
@@ -1228,6 +1205,7 @@ extern short                      MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short                   Back[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern boolean                 Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];