X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=541139ceeaf0a0337398b4f6da72872dc7d338bf;hb=496ac49402b1cfe5e8a664ef351fc3188a20935c;hp=2842cbf4960911b7bfdb274759094cb0f35892ca;hpb=7e4b8f18d80358c4c2f4567ab5dd0ec8b7efbae4;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 2842cbf4..541139ce 100644 --- a/src/main.h +++ b/src/main.h @@ -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 @@ -84,11 +84,13 @@ #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 @@ -97,60 +99,63 @@ #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 @@ -242,6 +247,9 @@ #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 @@ -301,6 +309,11 @@ #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) @@ -315,9 +328,9 @@ #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) @@ -325,11 +338,13 @@ #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) @@ -344,6 +359,7 @@ #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) @@ -378,15 +394,18 @@ #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 && \ @@ -1236,7 +1255,7 @@ #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" @@ -1678,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 */ @@ -1711,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 */ @@ -1865,6 +1884,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];