rnd-20040424-1-src
[rocksndiamonds.git] / src / main.h
index c58dbfbe8ecc81897578a1f1ff66035bd4c78818..9637f6ad12a2413edc956a856c2e45e1875bbea9 100644 (file)
@@ -89,6 +89,7 @@
 #define EP_CAN_EXPLODE_CROSS   25
 #define EP_PROTECTED           26
 #define EP_CAN_MOVE_INTO_ACID  27
+#define EP_THROWABLE           28
 
 /* 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_ACTIVE_BOMB         54
-#define EP_INACTIVE            55
+#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    56
+#define EP_EM_SLIPPERY_WALL    58
 
 /* values for special graphics properties (no effect on game engine) */
-#define EP_GFX_CRUMBLED                57
+#define EP_GFX_CRUMBLED                59
 
 /* values for derived properties (determined from properties above) */
-#define EP_ACCESSIBLE_OVER     58
-#define EP_ACCESSIBLE_INSIDE   59
-#define EP_ACCESSIBLE_UNDER    60
-#define EP_WALKABLE            61
-#define EP_PASSABLE            62
-#define EP_ACCESSIBLE          63
-#define EP_COLLECTIBLE         64
-#define EP_SNAPPABLE           65
-#define EP_WALL                        66
-#define EP_SOLID_FOR_PUSHING   67
-#define EP_DRAGONFIRE_PROOF    68
-#define EP_EXPLOSION_PROOF     69
-#define EP_CAN_SMASH           70
-#define EP_CAN_EXPLODE         71
-#define EP_CAN_EXPLODE_3X3     72
-#define EP_SP_PORT             73
-#define EP_CAN_EXPLODE_BY_DRAGONFIRE   74
-#define EP_CAN_EXPLODE_BY_EXPLOSION    75
-#define EP_COULD_MOVE_INTO_ACID                76
-#define EP_MAYBE_DONT_COLLIDE_WITH     77
+#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_CAN_EXPLODE         73
+#define EP_CAN_EXPLODE_3X3     74
+#define EP_SP_PORT             75
+#define EP_CAN_EXPLODE_BY_DRAGONFIRE   76
+#define EP_CAN_EXPLODE_BY_EXPLOSION    77
+#define EP_COULD_MOVE_INTO_ACID                78
+#define EP_MAYBE_DONT_COLLIDE_WITH     79
+#define EP_DIGGABLE_WITH_GRAVITY       80
 
 /* values for internal purpose only (level editor) */
-#define EP_EXPLODE_RESULT      78
-#define EP_WALK_TO_OBJECT      79
-#define EP_DEADLY              80
+#define EP_EXPLODE_RESULT      81
+#define EP_WALK_TO_OBJECT      82
+#define EP_DEADLY              83
 
-#define NUM_ELEMENT_PROPERTIES 81
+#define NUM_ELEMENT_PROPERTIES 84
 
 #define NUM_EP_BITFIELDS       ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE       0
 #define CE_HIT_BY_SOMETHING    27
 #define CE_OTHER_IS_HITTING    28
 #define CE_OTHER_GETS_HIT      29
+#define CE_BLOCKED             30
 
-#define NUM_CHANGE_EVENTS      30
+#define NUM_CHANGE_EVENTS      31
 
 #define CE_BITMASK_DEFAULT     0
 
 #define CP_WHEN_EMPTY          0
 #define CP_WHEN_DIGGABLE       1
 #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 CAN_EXPLODE_CROSS(e)   HAS_PROPERTY(e, EP_CAN_EXPLODE_CROSS)
 #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)
 
 /* 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_AMOEBALIVE(e)       HAS_PROPERTY(e, EP_AMOEBALIVE)
 #define HAS_CONTENT(e)         HAS_PROPERTY(e, EP_HAS_CONTENT)
 #define CAN_TURN_EACH_MOVE(e)  HAS_PROPERTY(e, EP_CAN_TURN_EACH_MOVE)
+#define CAN_GROW(e)            HAS_PROPERTY(e, EP_CAN_GROW)
 #define IS_ACTIVE_BOMB(e)      HAS_PROPERTY(e, EP_ACTIVE_BOMB)
 #define IS_INACTIVE(e)         HAS_PROPERTY(e, EP_INACTIVE)
 
 #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 IS_ENVELOPE(e)         ((e) >= EL_ENVELOPE_1 &&                \
                                 (e) <= EL_ENVELOPE_4)
 
+#define IS_GATE(e)             ((e) >= EL_GATE_1 &&                    \
+                                (e) <= EL_GATE_4)
+
+#define IS_GATE_GRAY(e)                ((e) >= EL_GATE_1_GRAY &&               \
+                                (e) <= EL_GATE_4_GRAY)
+
 #define IS_EM_GATE(e)          ((e) >= EL_EM_GATE_1 &&                 \
                                 (e) <= EL_EM_GATE_4)
 
 #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"
@@ -1461,6 +1479,7 @@ struct LevelInfo
   boolean use_spring_bug;      /* for compatibility with old levels */
   boolean instant_relocation;  /* no visual delay when relocating player */
   boolean can_pass_to_walkable;        /* player can pass to empty or walkable tile */
+  boolean grow_into_diggable;  /* amoeba can grow into anything diggable */
 
   /* ('int' instead of 'boolean' because used as selectbox value in editor) */
   int use_step_counter;                /* count steps instead of seconds for level */
@@ -1855,6 +1874,7 @@ extern unsigned long              Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern unsigned long           ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   WasJustMoving[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   WasJustFalling[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short                   CheckCollision[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   AmoebaCnt[MAX_NUM_AMOEBA];
 extern short                   AmoebaCnt2[MAX_NUM_AMOEBA];