#define EP_AMOEBALIVE 0
#define EP_AMOEBOID 1
#define EP_CAN_BE_CRUMBLED 2
-#define EP_PFORTE 3
+
#define EP_SOLID 4
#define EP_INDESTRUCTIBLE 5
#define EP_SLIPPERY 6
#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 (non-storable) */
-#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
+#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 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_INDESTRUCTIBLE(e) HAS_PROPERTY(e, EP_INDESTRUCTIBLE)
#define IS_SLIPPERY(e) HAS_PROPERTY(e, EP_SLIPPERY)
#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 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_THROUGH(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 EL_KEY_2 33
#define EL_KEY_3 34
#define EL_KEY_4 35
-#define EL_GATE_1 36
-#define EL_GATE_2 37
-#define EL_GATE_3 38
-#define EL_GATE_4 39
-#define EL_GATE_1_GRAY 40
-#define EL_GATE_2_GRAY 41
-#define EL_GATE_3_GRAY 42
-#define EL_GATE_4_GRAY 43
+#define EL_GATE_1_CLOSED 36
+#define EL_GATE_2_CLOSED 37
+#define EL_GATE_3_CLOSED 38
+#define EL_GATE_4_CLOSED 39
+#define EL_GATE_1_GRAY_CLOSED 40
+#define EL_GATE_2_GRAY_CLOSED 41
+#define EL_GATE_3_GRAY_CLOSED 42
+#define EL_GATE_4_GRAY_CLOSED 43
#define EL_DYNAMITE 44
#define EL_PACMAN 45
#define EL_INVISIBLE_WALL 46
#define EL_EXPANDABLE_WALL_VERTICAL 201
#define EL_EXPANDABLE_WALL_ANY 202
-#define EL_EM_GATE_1 203
-#define EL_EM_GATE_2 204
-#define EL_EM_GATE_3 205
-#define EL_EM_GATE_4 206
+#define EL_EM_GATE_1_CLOSED 203
+#define EL_EM_GATE_2_CLOSED 204
+#define EL_EM_GATE_3_CLOSED 205
+#define EL_EM_GATE_4_CLOSED 206
#define EL_EM_KEY_2_FILE 207
#define EL_EM_KEY_3_FILE 208
#define EL_SP_CHIP_BOTTOM (EL_SP_START + 39)
#define EL_SP_END (EL_SP_START + 39)
-#define EL_EM_GATE_1_GRAY 250
-#define EL_EM_GATE_2_GRAY 251
-#define EL_EM_GATE_3_GRAY 252
-#define EL_EM_GATE_4_GRAY 253
+#define EL_EM_GATE_1_GRAY_CLOSED 250
+#define EL_EM_GATE_2_GRAY_CLOSED 251
+#define EL_EM_GATE_3_GRAY_CLOSED 252
+#define EL_EM_GATE_4_GRAY_CLOSED 253
#define EL_UNUSED_254 254
#define EL_UNUSED_255 255
#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 43)
#define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 44)
#define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 45)
+#define EL_GATE_1_OPEN (EL_FIRST_RUNTIME_REAL + 46)
+#define EL_GATE_2_OPEN (EL_FIRST_RUNTIME_REAL + 47)
+#define EL_GATE_3_OPEN (EL_FIRST_RUNTIME_REAL + 48)
+#define EL_GATE_4_OPEN (EL_FIRST_RUNTIME_REAL + 49)
+#define EL_GATE_1_GRAY_OPEN (EL_FIRST_RUNTIME_REAL + 50)
+#define EL_GATE_2_GRAY_OPEN (EL_FIRST_RUNTIME_REAL + 51)
+#define EL_GATE_3_GRAY_OPEN (EL_FIRST_RUNTIME_REAL + 52)
+#define EL_GATE_4_GRAY_OPEN (EL_FIRST_RUNTIME_REAL + 53)
+#define EL_EM_GATE_1_OPEN (EL_FIRST_RUNTIME_REAL + 54)
+#define EL_EM_GATE_2_OPEN (EL_FIRST_RUNTIME_REAL + 55)
+#define EL_EM_GATE_3_OPEN (EL_FIRST_RUNTIME_REAL + 56)
+#define EL_EM_GATE_4_OPEN (EL_FIRST_RUNTIME_REAL + 57)
+#define EL_EM_GATE_1_GRAY_OPEN (EL_FIRST_RUNTIME_REAL + 58)
+#define EL_EM_GATE_2_GRAY_OPEN (EL_FIRST_RUNTIME_REAL + 59)
+#define EL_EM_GATE_3_GRAY_OPEN (EL_FIRST_RUNTIME_REAL + 60)
+#define EL_EM_GATE_4_GRAY_OPEN (EL_FIRST_RUNTIME_REAL + 61)
/* "unreal" (and therefore not drawable) runtime elements */
-#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 46)
+#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 62)
#define EL_BLOCKED (EL_FIRST_RUNTIME_UNREAL + 0)
#define EL_EXPLOSION (EL_FIRST_RUNTIME_UNREAL + 1)
#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.0rc6"
#define PROGRAM_TITLE_STRING "Rocks'n'Diamonds"
#define PROGRAM_AUTHOR_STRING "Holger Schemel"
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];