(e) <= EL_DF_MIRROR_END)
#define IS_DF_MIRROR_AUTO(e) ((e) >= EL_DF_MIRROR_AUTO_START && \
(e) <= EL_DF_MIRROR_AUTO_END)
+#define IS_DF_MIRROR_FIXED(e) ((e) >= EL_DF_MIRROR_FIXED_START && \
+ (e) <= EL_DF_MIRROR_FIXED_END)
+#define IS_DF_SLOPE(e) ((e) >= EL_DF_SLOPE_START && \
+ (e) <= EL_DF_SLOPE_END)
#define IS_LASER(e) ((e) >= EL_LASER_START && \
(e) <= EL_LASER_END)
#define IS_RECEIVER(e) ((e) >= EL_RECEIVER_START && \
(e) == EL_BOMB || \
IS_WALL_AMOEBA(e))
+#define IS_ABSORBING_BLOCK(e) (IS_WALL_WOOD(e) || \
+ IS_DF_WALL_WOOD(e) || \
+ (e) == EL_BLOCK_WOOD || \
+ (e) == EL_GATE_WOOD || \
+ (e) == EL_EXIT_CLOSED || \
+ (e) == EL_EXIT_OPEN)
+
#define IS_ENVELOPE_OPENING(e) ((e) >= EL_ENVELOPE_OPENING_START && \
(e) <= EL_ENVELOPE_OPENING_END)
#define ENVELOPE_OPENING_NR(e) ((e) - EL_ENVELOPE_1_OPENING)
#define CAN_MOVE(e) ((e) == EL_PACMAN)
-#define IS_FREE(x,y) (Tile[x][y] == EL_EMPTY)
-
-#define IS_MOVING(x,y) (MovPos[x][y] != 0)
-#define IS_BLOCKED(x,y) (Tile[x][y] == EL_BLOCKED)
-#define IS_DRAWABLE(e) ((e) < EL_BLOCKED)
-#define IS_NOT_DRAWABLE(e) ((e) >= EL_BLOCKED)
+#define IS_FREE(x, y) (Tile[x][y] == EL_EMPTY)
-#define PLAYERINFO(x,y) (&stored_player[StorePlayer[x][y]-EL_SPIELER1])
+#define IS_MOVING(x, y) (MovPos[x][y] != 0)
+#define IS_BLOCKED(x, y) (Tile[x][y] == EL_BLOCKED)
+#define IS_DRAWABLE(e) ((e) < EL_BLOCKED)
+#define IS_NOT_DRAWABLE(e) ((e) >= EL_BLOCKED)
#define WALL_BASE(e) ((e) & 0xfff0)
#define WALL_BITS(e) ((e) & 0x000f)
#define LEVEL_SCORE_ELEMENTS 16 // level elements with score
-extern DrawBuffer *drawto_field;
+extern DrawBuffer *drawto_mm;
extern DrawBuffer *bitmap_db_field;
extern int game_status;
#define EL_DF_WALL_STEEL 429
#define EL_DF_WALL_WOOD 430
-#define EL_MM_END_2 430
+#define EL_DF_MIRROR_FIXED_START 431
+#define EL_DF_MIRROR_FIXED_00 (EL_DF_MIRROR_FIXED_START + 0)
+#define EL_DF_MIRROR_FIXED_01 (EL_DF_MIRROR_FIXED_START + 1)
+#define EL_DF_MIRROR_FIXED_02 (EL_DF_MIRROR_FIXED_START + 2)
+#define EL_DF_MIRROR_FIXED_03 (EL_DF_MIRROR_FIXED_START + 3)
+#define EL_DF_MIRROR_FIXED_04 (EL_DF_MIRROR_FIXED_START + 4)
+#define EL_DF_MIRROR_FIXED_05 (EL_DF_MIRROR_FIXED_START + 5)
+#define EL_DF_MIRROR_FIXED_06 (EL_DF_MIRROR_FIXED_START + 6)
+#define EL_DF_MIRROR_FIXED_07 (EL_DF_MIRROR_FIXED_START + 7)
+#define EL_DF_MIRROR_FIXED_08 (EL_DF_MIRROR_FIXED_START + 8)
+#define EL_DF_MIRROR_FIXED_09 (EL_DF_MIRROR_FIXED_START + 9)
+#define EL_DF_MIRROR_FIXED_10 (EL_DF_MIRROR_FIXED_START + 10)
+#define EL_DF_MIRROR_FIXED_11 (EL_DF_MIRROR_FIXED_START + 11)
+#define EL_DF_MIRROR_FIXED_12 (EL_DF_MIRROR_FIXED_START + 12)
+#define EL_DF_MIRROR_FIXED_13 (EL_DF_MIRROR_FIXED_START + 13)
+#define EL_DF_MIRROR_FIXED_14 (EL_DF_MIRROR_FIXED_START + 14)
+#define EL_DF_MIRROR_FIXED_15 (EL_DF_MIRROR_FIXED_START + 15)
+#define EL_DF_MIRROR_FIXED_END EL_DF_MIRROR_FIXED_15
+
+#define EL_DF_SLOPE_START 447
+#define EL_DF_SLOPE_00 (EL_DF_SLOPE_START + 0)
+#define EL_DF_SLOPE_01 (EL_DF_SLOPE_START + 1)
+#define EL_DF_SLOPE_02 (EL_DF_SLOPE_START + 2)
+#define EL_DF_SLOPE_03 (EL_DF_SLOPE_START + 3)
+#define EL_DF_SLOPE_END EL_DF_SLOPE_03
+
+#define EL_MM_END_2 450
#define EL_MM_END EL_MM_END_2
// "real" (and therefore drawable) runtime elements
#define ANG_RAY_270 12
#define IS_22_5_ANGLE(angle) ((angle) % 2)
#define IS_90_ANGLE(angle) (!((angle) % 4))
+#define IS_45_ANGLE(angle) (!(((angle) + 2) % 4))
#define IS_HORIZ_ANGLE(angle) (!((angle) % 8))
-#define IS_VERT_ANGLE(angle) ((angle) % 8)
+#define IS_VERT_ANGLE(angle) (!(((angle) + 4) % 8))
// mirror angles
#define ANG_MIRROR_0 0
#define HIT_MASK_RIGHT (HIT_MASK_TOPRIGHT | HIT_MASK_BOTTOMRIGHT)
#define HIT_MASK_TOP (HIT_MASK_TOPLEFT | HIT_MASK_TOPRIGHT)
#define HIT_MASK_BOTTOM (HIT_MASK_BOTTOMLEFT | HIT_MASK_BOTTOMRIGHT)
+#define HIT_MASK_DIAGONAL_1 (HIT_MASK_TOPLEFT | HIT_MASK_BOTTOMRIGHT)
+#define HIT_MASK_DIAGONAL_2 (HIT_MASK_TOPRIGHT | HIT_MASK_BOTTOMLEFT)
#define HIT_MASK_ALL (HIT_MASK_LEFT | HIT_MASK_RIGHT)
// step values for rotating elements
#define GAME_OVER_NO_ENERGY 1
#define GAME_OVER_OVERLOADED 2
#define GAME_OVER_BOMB 3
-#define GAME_OVER_DELAYED 4
#define PROGRAM_VERSION_MAJOR 2
#define PROGRAM_VERSION_MINOR 0