rnd-20070121-2-src
[rocksndiamonds.git] / src / main.h
index 62764d596b2d99f3a0e999e89dc3e50e5ce2724e..28b4574afbb5522cafe243456039b76d8ae9d050 100644 (file)
@@ -72,6 +72,7 @@
 #define IN_SCR_FIELD(x, y)             IN_FIELD_MINMAX(x,y, BX1,BY1, BX2,BY2)
 
 /* values for configurable properties (custom elem's only, else pre-defined) */
+/* (never change these values, as they are stored in level files!) */
 #define EP_DIGGABLE                    0
 #define EP_COLLECTIBLE_ONLY            1
 #define EP_DONT_RUN_INTO               2
 #define EP_GRAVITY_REACHABLE           30
 
 /* values for pre-defined properties */
+/* (from here on, values can be changed by inserting new values) */
 #define EP_PLAYER                      32
 #define EP_CAN_PASS_MAGIC_WALL         33
-#define EP_SWITCHABLE                  34
-#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_EDITOR_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_CAN_PASS_DC_MAGIC_WALL      34
+#define EP_SWITCHABLE                  35
+#define EP_BD_ELEMENT                  36
+#define EP_SP_ELEMENT                  37
+#define EP_SB_ELEMENT                  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_EDITOR_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_EXPLODES_3X3_OLD            72
-#define EP_CAN_EXPLODE_BY_FIRE         73
-#define EP_CAN_EXPLODE_SMASHED         74
-#define EP_CAN_EXPLODE_IMPACT          75
-#define EP_SP_PORT                     76
-#define EP_CAN_EXPLODE_BY_DRAGONFIRE   77
-#define EP_CAN_EXPLODE_BY_EXPLOSION    78
-#define EP_COULD_MOVE_INTO_ACID                79
-#define EP_MAYBE_DONT_COLLIDE_WITH     80
-#define EP_CAN_BE_CLONED_BY_ANDROID    81
+#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_EXPLODES_3X3_OLD            73
+#define EP_CAN_EXPLODE_BY_FIRE         74
+#define EP_CAN_EXPLODE_SMASHED         75
+#define EP_CAN_EXPLODE_IMPACT          76
+#define EP_SP_PORT                     77
+#define EP_CAN_EXPLODE_BY_DRAGONFIRE   78
+#define EP_CAN_EXPLODE_BY_EXPLOSION    79
+#define EP_COULD_MOVE_INTO_ACID                80
+#define EP_MAYBE_DONT_COLLIDE_WITH     81
+#define EP_CAN_BE_CLONED_BY_ANDROID    82
 
 /* values for internal purpose only (level editor) */
-#define EP_WALK_TO_OBJECT              82
-#define EP_DEADLY                      83
-#define EP_EDITOR_CASCADE              84
-#define EP_EDITOR_CASCADE_ACTIVE       85
-#define EP_EDITOR_CASCADE_INACTIVE     86
+#define EP_WALK_TO_OBJECT              83
+#define EP_DEADLY                      84
+#define EP_EDITOR_CASCADE              85
+#define EP_EDITOR_CASCADE_ACTIVE       86
+#define EP_EDITOR_CASCADE_INACTIVE     87
 
 /* values for internal purpose only (game engine) */
-#define EP_HAS_ACTION                  87
-#define EP_CAN_CHANGE_OR_HAS_ACTION    88
+#define EP_HAS_ACTION                  88
+#define EP_CAN_CHANGE_OR_HAS_ACTION    89
 
 /* values for internal purpose only (other) */
-#define EP_OBSOLETE                    89
+#define EP_OBSOLETE                    90
 
-#define NUM_ELEMENT_PROPERTIES         90
+#define NUM_ELEMENT_PROPERTIES         91
 
 #define NUM_EP_BITFIELDS               ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE_NR            0
 /* macros for pre-defined properties */
 #define ELEM_IS_PLAYER(e)      HAS_PROPERTY(e, EP_PLAYER)
 #define CAN_PASS_MAGIC_WALL(e) HAS_PROPERTY(e, EP_CAN_PASS_MAGIC_WALL)
+#define CAN_PASS_DC_MAGIC_WALL(e) HAS_PROPERTY(e, EP_CAN_PASS_DC_MAGIC_WALL)
 #define IS_SWITCHABLE(e)       HAS_PROPERTY(e, EP_SWITCHABLE)
 #define IS_BD_ELEMENT(e)       HAS_PROPERTY(e, EP_BD_ELEMENT)
 #define IS_SP_ELEMENT(e)       HAS_PROPERTY(e, EP_SP_ELEMENT)
                                 (e) == EL_EMERALD_RED    ? EL_DIAMOND :    \
                                 (e) == EL_EMERALD_PURPLE ? EL_DIAMOND :    \
                                 EL_ROCK)
-#define EL_CHANGED2(e)         ((e) == EL_ROCK           ? EL_BD_DIAMOND : \
+#define EL_CHANGED_BD(e)       ((e) == EL_ROCK           ? EL_BD_DIAMOND : \
                                 (e) == EL_BD_ROCK        ? EL_BD_DIAMOND : \
                                 EL_BD_ROCK)
+#define EL_CHANGED_DC(e)       ((e) == EL_ROCK           ? EL_EMERALD :    \
+                                (e) == EL_BD_ROCK        ? EL_BD_DIAMOND : \
+                                (e) == EL_EMERALD        ? EL_DIAMOND :    \
+                                (e) == EL_EMERALD_YELLOW ? EL_DIAMOND :    \
+                                (e) == EL_EMERALD_RED    ? EL_DIAMOND :    \
+                                (e) == EL_EMERALD_PURPLE ? EL_DIAMOND :    \
+                                (e) == EL_PEARL          ? EL_BOMB    :    \
+                                (e) == EL_CRYSTAL        ? EL_CRYSTAL :    \
+                                EL_ROCK)
 #define IS_DRAWABLE(e)         ((e) < EL_BLOCKED)
 #define IS_NOT_DRAWABLE(e)     ((e) >= EL_BLOCKED)
 #define TAPE_IS_EMPTY(x)       ((x).length == 0)
 
 #define EL_DC_GATE_FAKE_GRAY           859
 
-#define NUM_FILE_ELEMENTS              860
+#define EL_DC_MAGIC_WALL               860
+
+#define EL_QUICKSAND_FAST_EMPTY                861
+#define EL_QUICKSAND_FAST_FULL         862
+
+#define NUM_FILE_ELEMENTS              863
 
 
 /* "real" (and therefore drawable) runtime elements */
 #define EL_SP_MURPHY_CLONE             (EL_FIRST_RUNTIME_REAL + 40)
 #define EL_AMOEBA_DROPPING             (EL_FIRST_RUNTIME_REAL + 41)
 #define EL_QUICKSAND_EMPTYING          (EL_FIRST_RUNTIME_REAL + 42)
-#define EL_MAGIC_WALL_ACTIVE           (EL_FIRST_RUNTIME_REAL + 43)
-#define EL_BD_MAGIC_WALL_ACTIVE                (EL_FIRST_RUNTIME_REAL + 44)
-#define EL_MAGIC_WALL_FULL             (EL_FIRST_RUNTIME_REAL + 45)
-#define EL_BD_MAGIC_WALL_FULL          (EL_FIRST_RUNTIME_REAL + 46)
-#define EL_MAGIC_WALL_EMPTYING         (EL_FIRST_RUNTIME_REAL + 47)
-#define EL_BD_MAGIC_WALL_EMPTYING      (EL_FIRST_RUNTIME_REAL + 48)
-#define EL_MAGIC_WALL_DEAD             (EL_FIRST_RUNTIME_REAL + 49)
-#define EL_BD_MAGIC_WALL_DEAD          (EL_FIRST_RUNTIME_REAL + 50)
-#define EL_EMC_FAKE_GRASS_ACTIVE       (EL_FIRST_RUNTIME_REAL + 51)
-#define EL_GATE_1_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 52)
-#define EL_GATE_2_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 53)
-#define EL_GATE_3_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 54)
-#define EL_GATE_4_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 55)
-#define EL_EM_GATE_1_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 56)
-#define EL_EM_GATE_2_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 57)
-#define EL_EM_GATE_3_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 58)
-#define EL_EM_GATE_4_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 59)
-#define EL_EMC_GATE_5_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 60)
-#define EL_EMC_GATE_6_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 61)
-#define EL_EMC_GATE_7_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 62)
-#define EL_EMC_GATE_8_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 63)
-#define EL_DC_GATE_WHITE_GRAY_ACTIVE   (EL_FIRST_RUNTIME_REAL + 64)
-#define EL_EMC_DRIPPER_ACTIVE          (EL_FIRST_RUNTIME_REAL + 65)
-#define EL_EMC_SPRING_BUMPER_ACTIVE    (EL_FIRST_RUNTIME_REAL + 66)
+#define EL_QUICKSAND_FAST_EMPTYING     (EL_FIRST_RUNTIME_REAL + 43)
+#define EL_MAGIC_WALL_ACTIVE           (EL_FIRST_RUNTIME_REAL + 44)
+#define EL_BD_MAGIC_WALL_ACTIVE                (EL_FIRST_RUNTIME_REAL + 45)
+#define EL_DC_MAGIC_WALL_ACTIVE                (EL_FIRST_RUNTIME_REAL + 46)
+#define EL_MAGIC_WALL_FULL             (EL_FIRST_RUNTIME_REAL + 47)
+#define EL_BD_MAGIC_WALL_FULL          (EL_FIRST_RUNTIME_REAL + 48)
+#define EL_DC_MAGIC_WALL_FULL          (EL_FIRST_RUNTIME_REAL + 49)
+#define EL_MAGIC_WALL_EMPTYING         (EL_FIRST_RUNTIME_REAL + 50)
+#define EL_BD_MAGIC_WALL_EMPTYING      (EL_FIRST_RUNTIME_REAL + 51)
+#define EL_DC_MAGIC_WALL_EMPTYING      (EL_FIRST_RUNTIME_REAL + 52)
+#define EL_MAGIC_WALL_DEAD             (EL_FIRST_RUNTIME_REAL + 53)
+#define EL_BD_MAGIC_WALL_DEAD          (EL_FIRST_RUNTIME_REAL + 54)
+#define EL_DC_MAGIC_WALL_DEAD          (EL_FIRST_RUNTIME_REAL + 55)
+#define EL_EMC_FAKE_GRASS_ACTIVE       (EL_FIRST_RUNTIME_REAL + 56)
+#define EL_GATE_1_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 57)
+#define EL_GATE_2_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 58)
+#define EL_GATE_3_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 59)
+#define EL_GATE_4_GRAY_ACTIVE          (EL_FIRST_RUNTIME_REAL + 60)
+#define EL_EM_GATE_1_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 61)
+#define EL_EM_GATE_2_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 62)
+#define EL_EM_GATE_3_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 63)
+#define EL_EM_GATE_4_GRAY_ACTIVE       (EL_FIRST_RUNTIME_REAL + 64)
+#define EL_EMC_GATE_5_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 65)
+#define EL_EMC_GATE_6_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 66)
+#define EL_EMC_GATE_7_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 67)
+#define EL_EMC_GATE_8_GRAY_ACTIVE      (EL_FIRST_RUNTIME_REAL + 68)
+#define EL_DC_GATE_WHITE_GRAY_ACTIVE   (EL_FIRST_RUNTIME_REAL + 69)
+#define EL_EMC_DRIPPER_ACTIVE          (EL_FIRST_RUNTIME_REAL + 70)
+#define EL_EMC_SPRING_BUMPER_ACTIVE    (EL_FIRST_RUNTIME_REAL + 71)
 
 /* "unreal" (and therefore not drawable) runtime elements */
-#define EL_FIRST_RUNTIME_UNREAL                (EL_FIRST_RUNTIME_REAL + 67)
+#define EL_FIRST_RUNTIME_UNREAL                (EL_FIRST_RUNTIME_REAL + 72)
 
 #define EL_BLOCKED                     (EL_FIRST_RUNTIME_UNREAL + 0)
 #define EL_EXPLOSION                   (EL_FIRST_RUNTIME_UNREAL + 1)
 #define EL_PLAYER_IS_EXPLODING_3       (EL_FIRST_RUNTIME_UNREAL + 14)
 #define EL_PLAYER_IS_EXPLODING_4       (EL_FIRST_RUNTIME_UNREAL + 15)
 #define EL_QUICKSAND_FILLING           (EL_FIRST_RUNTIME_UNREAL + 16)
-#define EL_MAGIC_WALL_FILLING          (EL_FIRST_RUNTIME_UNREAL + 17)
-#define EL_BD_MAGIC_WALL_FILLING       (EL_FIRST_RUNTIME_UNREAL + 18)
-#define EL_ELEMENT_SNAPPING            (EL_FIRST_RUNTIME_UNREAL + 19)
-#define EL_DIAGONAL_SHRINKING          (EL_FIRST_RUNTIME_UNREAL + 20)
-#define EL_DIAGONAL_GROWING            (EL_FIRST_RUNTIME_UNREAL + 21)
-
-#define NUM_RUNTIME_ELEMENTS           (EL_FIRST_RUNTIME_UNREAL + 22)
+#define EL_QUICKSAND_FAST_FILLING      (EL_FIRST_RUNTIME_UNREAL + 17)
+#define EL_MAGIC_WALL_FILLING          (EL_FIRST_RUNTIME_UNREAL + 18)
+#define EL_BD_MAGIC_WALL_FILLING       (EL_FIRST_RUNTIME_UNREAL + 19)
+#define EL_DC_MAGIC_WALL_FILLING       (EL_FIRST_RUNTIME_UNREAL + 20)
+#define EL_ELEMENT_SNAPPING            (EL_FIRST_RUNTIME_UNREAL + 21)
+#define EL_DIAGONAL_SHRINKING          (EL_FIRST_RUNTIME_UNREAL + 22)
+#define EL_DIAGONAL_GROWING            (EL_FIRST_RUNTIME_UNREAL + 23)
+
+#define NUM_RUNTIME_ELEMENTS           (EL_FIRST_RUNTIME_UNREAL + 24)
 
 /* dummy elements (never used as game elements, only used as graphics) */
 #define EL_FIRST_DUMMY                 NUM_RUNTIME_ELEMENTS