rnd-20040424-2-src
[rocksndiamonds.git] / src / main.h
index e89d1fee3b7a18386e8294c2992d02bc34e3a2d5..541139ceeaf0a0337398b4f6da72872dc7d338bf 100644 (file)
@@ -74,9 +74,9 @@
 #define EP_CAN_SMASH_PLAYER    10
 #define EP_CAN_SMASH_ENEMIES   11
 #define EP_CAN_SMASH_EVERYTHING        12
-#define EP_CAN_EXPLODE_BY_FIRE 13
-#define EP_CAN_EXPLODE_SMASHED 14
-#define EP_CAN_EXPLODE_IMPACT  15
+#define EP_EXPLODES_BY_FIRE    13
+#define EP_EXPLODES_SMASHED    14
+#define EP_EXPLODES_IMPACT     15
 #define EP_WALKABLE_OVER       16
 #define EP_WALKABLE_INSIDE     17
 #define EP_WALKABLE_UNDER      18
 #define EP_PASSABLE_INSIDE     20
 #define EP_PASSABLE_UNDER      21
 #define EP_DROPPABLE           22
-#define EP_CAN_EXPLODE_1X1     23
+#define EP_EXPLODES_1X1_OLD    23
 #define EP_PUSHABLE            24
-#define EP_CAN_EXPLODE_CROSS   25
+#define EP_EXPLODES_CROSS_OLD  25
 #define EP_PROTECTED           26
 #define EP_CAN_MOVE_INTO_ACID  27
 #define EP_THROWABLE           28
+#define EP_CAN_EXPLODE         29
 
 /* values for pre-defined properties */
 #define EP_PLAYER              32
 #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_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_SP_BUGGY_BASE       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_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_CAN_EXPLODE         72
-#define EP_CAN_EXPLODE_3X3     73
-#define EP_SP_PORT             74
-#define EP_CAN_EXPLODE_BY_DRAGONFIRE   75
-#define EP_CAN_EXPLODE_BY_EXPLOSION    76
-#define EP_COULD_MOVE_INTO_ACID                77
-#define EP_MAYBE_DONT_COLLIDE_WITH     78
+#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_DIGGABLE_WITH_GRAVITY       82
 
 /* values for internal purpose only (level editor) */
-#define EP_EXPLODE_RESULT      79
-#define EP_WALK_TO_OBJECT      80
-#define EP_DEADLY              81
+#define EP_WALK_TO_OBJECT      83
+#define EP_DEADLY              84
 
-#define NUM_ELEMENT_PROPERTIES 82
+#define NUM_ELEMENT_PROPERTIES 85
 
 #define NUM_EP_BITFIELDS       ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE       0
 #define CP_WHEN_DESTRUCTIBLE   2
 #define CP_WHEN_COLLECTIBLE    3
 #define CP_WHEN_REMOVABLE      4
+#define CP_WHEN_WALKABLE       5
 
 /* values for custom move patterns (bits 0 - 3: basic move directions) */
 #define MV_BIT_TOWARDS_PLAYER  4
 #define SLIPPERY_ONLY_LEFT     3
 #define SLIPPERY_ONLY_RIGHT    4
 
+/* values for explosion type for custom elements */
+#define EXPLODES_3X3           0
+#define EXPLODES_1X1           1
+#define EXPLODES_CROSS         2
+
 /* macros for configurable properties */
 #define IS_DIGGABLE(e)         HAS_PROPERTY(e, EP_DIGGABLE)
 #define IS_COLLECTIBLE_ONLY(e) HAS_PROPERTY(e, EP_COLLECTIBLE_ONLY)
 #define CAN_SMASH_PLAYER(e)    HAS_PROPERTY(e, EP_CAN_SMASH_PLAYER)
 #define CAN_SMASH_ENEMIES(e)   HAS_PROPERTY(e, EP_CAN_SMASH_ENEMIES)
 #define CAN_SMASH_EVERYTHING(e)        HAS_PROPERTY(e, EP_CAN_SMASH_EVERYTHING)
-#define CAN_EXPLODE_BY_FIRE(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_BY_FIRE)
-#define CAN_EXPLODE_SMASHED(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_SMASHED)
-#define CAN_EXPLODE_IMPACT(e)  HAS_PROPERTY(e, EP_CAN_EXPLODE_IMPACT)
+#define EXPLODES_BY_FIRE(e)    HAS_PROPERTY(e, EP_EXPLODES_BY_FIRE)
+#define EXPLODES_SMASHED(e)    HAS_PROPERTY(e, EP_EXPLODES_SMASHED)
+#define EXPLODES_IMPACT(e)     HAS_PROPERTY(e, EP_EXPLODES_IMPACT)
 #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_INSIDE(e)  HAS_PROPERTY(e, EP_PASSABLE_INSIDE)
 #define IS_PASSABLE_UNDER(e)   HAS_PROPERTY(e, EP_PASSABLE_UNDER)
 #define IS_DROPPABLE(e)                HAS_PROPERTY(e, EP_DROPPABLE)
-#define CAN_EXPLODE_1X1(e)     HAS_PROPERTY(e, EP_CAN_EXPLODE_1X1)
+#define EXPLODES_1X1_OLD(e)    HAS_PROPERTY(e, EP_EXPLODES_1X1_OLD)
 #define IS_PUSHABLE(e)         HAS_PROPERTY(e, EP_PUSHABLE)
-#define CAN_EXPLODE_CROSS(e)   HAS_PROPERTY(e, EP_CAN_EXPLODE_CROSS)
+#define EXPLODES_CROSS_OLD(e)  HAS_PROPERTY(e, EP_EXPLODES_CROSS_OLD)
 #define IS_PROTECTED(e)                HAS_PROPERTY(e, EP_PROTECTED)
 #define CAN_MOVE_INTO_ACID(e)  HAS_PROPERTY(e, EP_CAN_MOVE_INTO_ACID)
 #define IS_THROWABLE(e)                HAS_PROPERTY(e, EP_THROWABLE)
+#define CAN_EXPLODE(e)         HAS_PROPERTY(e, EP_CAN_EXPLODE)
 
 /* macros for special configurable properties */
 #define IS_EM_SLIPPERY_WALL(e) HAS_PROPERTY(e, EP_EM_SLIPPERY_WALL)
 #define IS_BD_ELEMENT(e)       HAS_PROPERTY(e, EP_BD_ELEMENT)
 #define IS_SP_ELEMENT(e)       HAS_PROPERTY(e, EP_SP_ELEMENT)
 #define IS_SB_ELEMENT(e)       HAS_PROPERTY(e, EP_SB_ELEMENT)
+#define IS_SP_BUGGY_BASE(e)    HAS_PROPERTY(e, EP_SP_BUGGY_BASE)
 #define IS_GEM(e)              HAS_PROPERTY(e, EP_GEM)
 #define IS_FOOD_DARK_YAMYAM(e) HAS_PROPERTY(e, EP_FOOD_DARK_YAMYAM)
 #define IS_FOOD_PENGUIN(e)     HAS_PROPERTY(e, EP_FOOD_PENGUIN)
 #define IS_DRAGONFIRE_PROOF(e) HAS_PROPERTY(e, EP_DRAGONFIRE_PROOF)
 #define IS_EXPLOSION_PROOF(e)  HAS_PROPERTY(e, EP_EXPLOSION_PROOF)
 #define CAN_SMASH(e)           HAS_PROPERTY(e, EP_CAN_SMASH)
-#define CAN_EXPLODE(e)         HAS_PROPERTY(e, EP_CAN_EXPLODE)
-#define CAN_EXPLODE_3X3(e)     HAS_PROPERTY(e, EP_CAN_EXPLODE_3X3)
+#define EXPLODES_3X3_OLD(e)    HAS_PROPERTY(e, EP_EXPLODES_3X3_OLD)
+#define CAN_EXPLODE_BY_FIRE(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_BY_FIRE)
+#define CAN_EXPLODE_SMASHED(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_SMASHED)
+#define CAN_EXPLODE_IMPACT(e)  HAS_PROPERTY(e, EP_CAN_EXPLODE_IMPACT)
 #define IS_SP_PORT(e)          HAS_PROPERTY(e, EP_SP_PORT)
 #define CAN_EXPLODE_BY_DRAGONFIRE(e)   \
                                HAS_PROPERTY(e, EP_CAN_EXPLODE_BY_DRAGONFIRE)
 #define CAN_EXPLODE_BY_EXPLOSION(e)    \
                                HAS_PROPERTY(e, EP_CAN_EXPLODE_BY_EXPLOSION)
 #define COULD_MOVE_INTO_ACID(e)        HAS_PROPERTY(e, EP_COULD_MOVE_INTO_ACID)
-#define MAYBE_DONT_COLLIDE_WITH(e)  HAS_PROPERTY(e, EP_MAYBE_DONT_COLLIDE_WITH)
+#define MAYBE_DONT_COLLIDE_WITH(e) HAS_PROPERTY(e, EP_MAYBE_DONT_COLLIDE_WITH)
+#define IS_DIGGABLE_WITH_GRAVITY(e) HAS_PROPERTY(e, EP_DIGGABLE_WITH_GRAVITY)
 
 /* special macros used in game engine */
 #define IS_CUSTOM_ELEMENT(e)   ((e) >= EL_CUSTOM_START &&              \
 #define PROGRAM_VERSION_MAJOR  3
 #define PROGRAM_VERSION_MINOR  1
 #define PROGRAM_VERSION_PATCH  0
-#define PROGRAM_VERSION_BUILD  2
+#define PROGRAM_VERSION_BUILD  3
 
 #define PROGRAM_TITLE_STRING   "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING  "Holger Schemel"
@@ -1682,6 +1697,7 @@ struct ElementInfo
 
   int content[3][3];           /* new elements after explosion */
 
+  int explosion_type;          /* type of explosion, like 3x3, 3+3 or 1x1 */
   int explosion_delay;         /* duration of explosion of this element */
   int ignition_delay;          /* delay for explosion by other explosion */
 
@@ -1715,7 +1731,6 @@ struct ElementInfo
   int walk_to_action;          /* diggable/collectible/pushable */
   int smash_targets;           /* can smash player/enemies/everything */
   int deadliness;              /* deadly when running/colliding/touching */
-  int consistency;             /* indestructible/can explode */
 
   boolean can_explode_by_fire; /* element explodes by fire */
   boolean can_explode_smashed; /* element explodes when smashed */