rnd-20030616-1-src
[rocksndiamonds.git] / src / main.h
index 8ffeb3de6d9736a06e51fbfc382ea7b95da61b6d..4385aa55db7d6f3f858355c8473ebb05697eae74 100644 (file)
@@ -33,6 +33,7 @@
 #define IMG_UNDEFINED          (-1)
 #define IMG_EMPTY              IMG_EMPTY_SPACE
 #define IMG_SP_EMPTY           IMG_SP_EMPTY_SPACE
+#define IMG_EXPLOSION          IMG_DEFAULT_EXPLODING
 #define IMG_CHAR_START         IMG_CHAR_SPACE
 #define IMG_CUSTOM_START       IMG_CUSTOM_1
 
 /* values for configurable properties (custom elem's only, else pre-defined) */
 #define EP_DIGGABLE            0
 #define EP_COLLECTIBLE         1
-#define EP_DONT_GO_TO          2
-#define EP_ENEMY               3
+#define EP_DONT_RUN_INTO       2
+#define EP_DONT_COLLIDE_WITH   3
 #define EP_DONT_TOUCH          4
 #define EP_INDESTRUCTIBLE      5
 #define EP_SLIPPERY            6
-#define EP_CAN_EXPLODE         7
+#define EP_CAN_CHANGE          7
 #define EP_CAN_MOVE            8
 #define EP_CAN_FALL            9
-#define EP_CAN_SMASH           10
-#define EP_WALKABLE_OVER       11
-#define EP_WALKABLE_INSIDE     12
-#define EP_WALKABLE_UNDER      13
-#define EP_PASSABLE_OVER       14
-#define EP_PASSABLE_INSIDE     15
-#define EP_PASSABLE_UNDER      16
-#define EP_CHANGEABLE          17
-#define EP_UNUSED_18           18
-#define EP_UNUSED_19           19
-#define EP_UNUSED_20           20
-#define EP_UNUSED_21           21
+#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_WALKABLE_OVER       16
+#define EP_WALKABLE_INSIDE     17
+#define EP_WALKABLE_UNDER      18
+#define EP_PASSABLE_OVER       19
+#define EP_PASSABLE_INSIDE     20
+#define EP_PASSABLE_UNDER      21
 #define EP_UNUSED_22           22
 #define EP_UNUSED_23           23
 #define EP_PUSHABLE            24
 #define EP_FOOD_PIG            36
 #define EP_HISTORIC_WALL       37
 #define EP_HISTORIC_SOLID      38
-#define EP_BELT                        39
-#define EP_BELT_ACTIVE         40
-#define EP_BELT_SWITCH         41
-#define EP_TUBE                        42
-#define EP_KEYGATE             43
-#define EP_AMOEBOID            44
-#define EP_AMOEBALIVE          45
-#define EP_HAS_CONTENT         46
-#define EP_ACTIVE_BOMB         47
-#define EP_INACTIVE            48
+#define EP_CLASSIC_ENEMY       39
+#define EP_BELT                        40
+#define EP_BELT_ACTIVE         41
+#define EP_BELT_SWITCH         42
+#define EP_TUBE                        43
+#define EP_KEYGATE             44
+#define EP_AMOEBOID            45
+#define EP_AMOEBALIVE          46
+#define EP_HAS_CONTENT         47
+#define EP_ACTIVE_BOMB         48
+#define EP_INACTIVE            49
 
 /* values for derived properties (determined from properties above) */
-#define EP_ACCESSIBLE_OVER     49
-#define EP_ACCESSIBLE_INSIDE   50
-#define EP_ACCESSIBLE_UNDER    51
-#define EP_WALKABLE            52
-#define EP_PASSABLE            53
-#define EP_ACCESSIBLE          54
-#define EP_SNAPPABLE           55
-#define EP_WALL                        56
-#define EP_SOLID_FOR_PUSHING   57
-#define EP_DRAGONFIRE_PROOF    58
-#define EP_EXPLOSION_PROOF     59
+#define EP_ACCESSIBLE_OVER     50
+#define EP_ACCESSIBLE_INSIDE   51
+#define EP_ACCESSIBLE_UNDER    52
+#define EP_WALKABLE            53
+#define EP_PASSABLE            54
+#define EP_ACCESSIBLE          55
+#define EP_SNAPPABLE           56
+#define EP_WALL                        57
+#define EP_SOLID_FOR_PUSHING   58
+#define EP_DRAGONFIRE_PROOF    59
+#define EP_EXPLOSION_PROOF     60
+#define EP_CAN_SMASH           61
+#define EP_CAN_EXPLODE         62
 
 /* values for internal purpose only (level editor) */
-#define EP_WALK_TO_OBJECT      60
-#define EP_DEADLY              61
+#define EP_EXPLODE_RESULT      63
+#define EP_WALK_TO_OBJECT      64
+#define EP_DEADLY              65
 
-#define NUM_ELEMENT_PROPERTIES 62
+#define NUM_ELEMENT_PROPERTIES 66
 
 #define NUM_EP_BITFIELDS       ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE       0
 
 /* values for change events for custom elements */
 #define CE_DELAY               0
+#define CE_TOUCHED_BY_PLAYER   1
+#define CE_PRESSED_BY_PLAYER   2
+#define CE_PUSHED_BY_PLAYER    3
+#define CE_IMPACT              4
+#define CE_SMASHED             5
+#define CE_OTHER_COLLECTING    6
+#define CE_OTHER_PUSHING       7
+#define CE_OTHER_CHANGING      8
+#define CE_OTHER_EXPLODING     9
 
-#define NUM_CHANGE_EVENTS      1
+/* values for internal purpose only (level editor) */
+#define CE_BY_PLAYER           10
+#define CE_IMPACT_SMASHED      11
+#define CE_BY_OTHER            12
+
+#define NUM_CHANGE_EVENTS      13
 
 #define CE_BITMASK_DEFAULT     0
 
 /* macros for configurable properties */
 #define IS_DIGGABLE(e)         HAS_PROPERTY(e, EP_DIGGABLE)
 #define IS_COLLECTIBLE(e)      HAS_PROPERTY(e, EP_COLLECTIBLE)
-#define DONT_GO_TO(e)          HAS_PROPERTY(e, EP_DONT_GO_TO)
-#define IS_ENEMY(e)            HAS_PROPERTY(e, EP_ENEMY)
+#define DONT_RUN_INTO(e)       HAS_PROPERTY(e, EP_DONT_RUN_INTO)
+#define DONT_COLLIDE_WITH(e)   HAS_PROPERTY(e, EP_DONT_COLLIDE_WITH)
 #define DONT_TOUCH(e)          HAS_PROPERTY(e, EP_DONT_TOUCH)
 #define IS_INDESTRUCTIBLE(e)   HAS_PROPERTY(e, EP_INDESTRUCTIBLE)
 #define IS_SLIPPERY(e)         HAS_PROPERTY(e, EP_SLIPPERY)
-#define CAN_EXPLODE(e)         HAS_PROPERTY(e, EP_CAN_EXPLODE)
+#define CAN_CHANGE(e)          HAS_PROPERTY(e, EP_CAN_CHANGE)
 #define CAN_MOVE(e)            HAS_PROPERTY(e, EP_CAN_MOVE)
 #define CAN_FALL(e)            HAS_PROPERTY(e, EP_CAN_FALL)
-#define CAN_SMASH(e)           HAS_PROPERTY(e, EP_CAN_SMASH)
+#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 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_OVER(e)    HAS_PROPERTY(e, EP_PASSABLE_OVER)
 #define IS_PASSABLE_INSIDE(e)  HAS_PROPERTY(e, EP_PASSABLE_INSIDE)
 #define IS_PASSABLE_UNDER(e)   HAS_PROPERTY(e, EP_PASSABLE_UNDER)
-#define IS_CHANGEABLE(e)       HAS_PROPERTY(e, EP_CHANGEABLE)
 #define IS_PUSHABLE(e)         HAS_PROPERTY(e, EP_PUSHABLE)
 
 /* macros for special configurable properties */
 #define IS_FOOD_PIG(e)         HAS_PROPERTY(e, EP_FOOD_PIG)
 #define IS_HISTORIC_WALL(e)    HAS_PROPERTY(e, EP_HISTORIC_WALL)
 #define IS_HISTORIC_SOLID(e)   HAS_PROPERTY(e, EP_HISTORIC_SOLID)
+#define IS_CLASSIC_ENEMY(e)    HAS_PROPERTY(e, EP_CLASSIC_ENEMY)
 #define IS_BELT(e)             HAS_PROPERTY(e, EP_BELT)
 #define IS_BELT_ACTIVE(e)      HAS_PROPERTY(e, EP_BELT_ACTIVE)
 #define IS_BELT_SWITCH(e)      HAS_PROPERTY(e, EP_BELT_SWITCH)
 #define IS_SOLID_FOR_PUSHING(e)        HAS_PROPERTY(e, EP_SOLID_FOR_PUSHING)
 #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)
 
+/* special macros used in game engine */
 #define IS_CUSTOM_ELEMENT(e)   ((e) >= EL_CUSTOM_START &&              \
                                 (e) <= EL_CUSTOM_END)
 
 #define EL_BLOCKED                     (EL_FIRST_RUNTIME_UNREAL + 0)
 #define EL_EXPLOSION                   (EL_FIRST_RUNTIME_UNREAL + 1)
 #define EL_NUT_BREAKING                        (EL_FIRST_RUNTIME_UNREAL + 2)
-#define EL_ACID_SPLASH_LEFT            (EL_FIRST_RUNTIME_UNREAL + 3)
-#define EL_ACID_SPLASH_RIGHT           (EL_FIRST_RUNTIME_UNREAL + 4)
-#define EL_AMOEBA_GROWING              (EL_FIRST_RUNTIME_UNREAL + 5)
-#define EL_AMOEBA_SHRINKING            (EL_FIRST_RUNTIME_UNREAL + 6)
-#define EL_EXPANDABLE_WALL_GROWING     (EL_FIRST_RUNTIME_UNREAL + 7)
-#define EL_FLAMES                      (EL_FIRST_RUNTIME_UNREAL + 8)
-#define EL_PLAYER_IS_LEAVING           (EL_FIRST_RUNTIME_UNREAL + 9)
-#define EL_QUICKSAND_FILLING           (EL_FIRST_RUNTIME_UNREAL + 10)
-#define EL_MAGIC_WALL_FILLING          (EL_FIRST_RUNTIME_UNREAL + 11)
-#define EL_BD_MAGIC_WALL_FILLING       (EL_FIRST_RUNTIME_UNREAL + 12)
+#define EL_DIAMOND_BREAKING            (EL_FIRST_RUNTIME_UNREAL + 3)
+#define EL_ACID_SPLASH_LEFT            (EL_FIRST_RUNTIME_UNREAL + 4)
+#define EL_ACID_SPLASH_RIGHT           (EL_FIRST_RUNTIME_UNREAL + 5)
+#define EL_AMOEBA_GROWING              (EL_FIRST_RUNTIME_UNREAL + 6)
+#define EL_AMOEBA_SHRINKING            (EL_FIRST_RUNTIME_UNREAL + 7)
+#define EL_EXPANDABLE_WALL_GROWING     (EL_FIRST_RUNTIME_UNREAL + 8)
+#define EL_FLAMES                      (EL_FIRST_RUNTIME_UNREAL + 9)
+#define EL_PLAYER_IS_LEAVING           (EL_FIRST_RUNTIME_UNREAL + 10)
+#define EL_QUICKSAND_FILLING           (EL_FIRST_RUNTIME_UNREAL + 11)
+#define EL_MAGIC_WALL_FILLING          (EL_FIRST_RUNTIME_UNREAL + 12)
+#define EL_BD_MAGIC_WALL_FILLING       (EL_FIRST_RUNTIME_UNREAL + 13)
 
 /* dummy elements (never used as game elements, only used as graphics) */
-#define EL_FIRST_DUMMY                 (EL_FIRST_RUNTIME_UNREAL + 13)
+#define EL_FIRST_DUMMY                 (EL_FIRST_RUNTIME_UNREAL + 14)
 
 #define EL_STEELWALL_TOPLEFT                   (EL_FIRST_DUMMY + 0)
 #define EL_STEELWALL_TOPRIGHT                  (EL_FIRST_DUMMY + 1)
 #define EL_DYNABOMB_ACTIVE                     (EL_FIRST_DUMMY + 13)
 #define EL_SHIELD_NORMAL_ACTIVE                        (EL_FIRST_DUMMY + 14)
 #define EL_SHIELD_DEADLY_ACTIVE                        (EL_FIRST_DUMMY + 15)
+#define EL_DEFAULT                             (EL_FIRST_DUMMY + 16)
+#define EL_BD_DEFAULT                          (EL_FIRST_DUMMY + 17)
+#define EL_SP_DEFAULT                          (EL_FIRST_DUMMY + 18)
+#define EL_SB_DEFAULT                          (EL_FIRST_DUMMY + 19)
 
-#define MAX_NUM_ELEMENTS                       (EL_FIRST_DUMMY + 16)
+#define MAX_NUM_ELEMENTS                       (EL_FIRST_DUMMY + 20)
 
 
 /* values for graphics/sounds action types */
@@ -1118,6 +1150,9 @@ struct MenuInfo
   int draw_yoffset_default;
   int draw_xoffset[NUM_SPECIAL_GFX_ARGS];
   int draw_yoffset[NUM_SPECIAL_GFX_ARGS];
+
+  int list_size_default;
+  int list_size[NUM_SPECIAL_GFX_ARGS];
 };
 
 struct DoorInfo
@@ -1134,6 +1169,8 @@ struct ElementChangeInfo
   int delay_random;            /* added frame delay before changed (random) */
   int delay_frames;            /* either 1 (frames) or 50 (seconds; 50 fps) */
 
+  short trigger;               /* custom element triggering change */
+
   short successor;             /* new custom element after change */
 };
 
@@ -1172,10 +1209,7 @@ struct ElementInfo
 
   int move_pattern;            /* direction movable element moves to */
   int move_direction_initial;  /* initial direction element moves to */
-
-  int walk_to_action;          /* only for level editor; not stored */
-  int deadliness;              /* only for level editor; not stored */
-  int walkable_layer;          /* only for level editor; not stored */
+  int move_stepsize;           /* step size element moves with */
 
   int content[3][3];           /* new elements after explosion */
 
@@ -1265,6 +1299,7 @@ extern short                      Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short                   ChangeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 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];