X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=4340d7c6485b68f1d382f1d31e1d185ebe3172fd;hb=b21faa39ac22e1987db2bc6158374388e0090dfe;hp=bff222702bd410775906be20866b5fdd563b353b;hpb=c0306b7817b8e1a38ccac1b9821df318ac5ad427;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index bff22270..4340d7c6 100644 --- a/src/main.h +++ b/src/main.h @@ -89,57 +89,57 @@ #define EP_PUSHABLE 24 /* values for special configurable properties (depending on level settings) */ -#define EP_EM_SLIPPERY_WALL 25 +#define EP_EM_SLIPPERY_WALL 32 /* values for special graphics properties (no effect on game engine) */ -#define EP_CAN_BE_CRUMBLED 26 +#define EP_CAN_BE_CRUMBLED 33 /* values for pre-defined properties */ -#define EP_PLAYER 27 -#define EP_CAN_PASS_MAGIC_WALL 28 -#define EP_SWITCHABLE 29 -#define EP_BD_ELEMENT 30 -#define EP_SP_ELEMENT 31 -#define EP_SB_ELEMENT 32 -#define EP_GEM 33 -#define EP_FOOD_DARK_YAMYAM 34 -#define EP_FOOD_PENGUIN 35 -#define EP_FOOD_PIG 36 -#define EP_HISTORIC_WALL 37 -#define EP_HISTORIC_SOLID 38 -#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 +#define EP_PLAYER 34 +#define EP_CAN_PASS_MAGIC_WALL 35 +#define EP_SWITCHABLE 36 +#define EP_BD_ELEMENT 37 +#define EP_SP_ELEMENT 38 +#define EP_SB_ELEMENT 39 +#define EP_GEM 40 +#define EP_FOOD_DARK_YAMYAM 41 +#define EP_FOOD_PENGUIN 42 +#define EP_FOOD_PIG 43 +#define EP_HISTORIC_WALL 44 +#define EP_HISTORIC_SOLID 45 +#define EP_CLASSIC_ENEMY 46 +#define EP_BELT 47 +#define EP_BELT_ACTIVE 48 +#define EP_BELT_SWITCH 49 +#define EP_TUBE 50 +#define EP_KEYGATE 51 +#define EP_AMOEBOID 52 +#define EP_AMOEBALIVE 53 +#define EP_HAS_CONTENT 54 +#define EP_ACTIVE_BOMB 55 +#define EP_INACTIVE 56 /* values for derived properties (determined from properties above) */ -#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 +#define EP_ACCESSIBLE_OVER 57 +#define EP_ACCESSIBLE_INSIDE 58 +#define EP_ACCESSIBLE_UNDER 59 +#define EP_WALKABLE 60 +#define EP_PASSABLE 61 +#define EP_ACCESSIBLE 62 +#define EP_SNAPPABLE 63 +#define EP_WALL 64 +#define EP_SOLID_FOR_PUSHING 65 +#define EP_DRAGONFIRE_PROOF 66 +#define EP_EXPLOSION_PROOF 67 +#define EP_CAN_SMASH 68 +#define EP_CAN_EXPLODE 69 /* values for internal purpose only (level editor) */ -#define EP_EXPLODE_RESULT 63 -#define EP_WALK_TO_OBJECT 64 -#define EP_DEADLY 65 +#define EP_EXPLODE_RESULT 70 +#define EP_WALK_TO_OBJECT 71 +#define EP_DEADLY 72 -#define NUM_ELEMENT_PROPERTIES 66 +#define NUM_ELEMENT_PROPERTIES 73 #define NUM_EP_BITFIELDS ((NUM_ELEMENT_PROPERTIES + 31) / 32) #define EP_BITFIELD_BASE 0 @@ -159,19 +159,22 @@ #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 CE_COLLISION 4 +#define CE_IMPACT 5 +#define CE_SMASHED 6 +#define CE_OTHER_COLLECTING 7 +#define CE_OTHER_TOUCHING 8 +#define CE_OTHER_PRESSING 9 +#define CE_OTHER_PUSHING 10 +#define CE_OTHER_CHANGING 11 +#define CE_OTHER_EXPLODING 12 /* values for internal purpose only (level editor) */ -#define CE_BY_PLAYER 10 -#define CE_IMPACT_SMASHED 11 -#define CE_BY_OTHER 12 +#define CE_BY_PLAYER 13 +#define CE_BY_COLLISION 14 +#define CE_BY_OTHER 15 -#define NUM_CHANGE_EVENTS 13 +#define NUM_CHANGE_EVENTS 16 #define CE_BITMASK_DEFAULT 0 @@ -185,6 +188,11 @@ (CH_EVENT_VAR(e) |= CH_EVENT_BIT(c)) : \ (CH_EVENT_VAR(e) &= ~CH_EVENT_BIT(c))) : 0) +/* values for change power for custom elements */ +#define CP_NON_DESTRUCTIVE 0 +#define CP_HALF_DESTRUCTIVE 1 +#define CP_FULL_DESTRUCTIVE 2 + /* macros for configurable properties */ #define IS_DIGGABLE(e) HAS_PROPERTY(e, EP_DIGGABLE) @@ -808,25 +816,26 @@ #define ACTION_COLLECTING 6 #define ACTION_DROPPING 7 #define ACTION_PUSHING 8 -#define ACTION_PASSING 9 -#define ACTION_IMPACT 10 -#define ACTION_BREAKING 11 -#define ACTION_ACTIVATING 12 -#define ACTION_DEACTIVATING 13 -#define ACTION_OPENING 14 -#define ACTION_CLOSING 15 -#define ACTION_ATTACKING 16 -#define ACTION_GROWING 17 -#define ACTION_SHRINKING 18 -#define ACTION_ACTIVE 19 -#define ACTION_FILLING 20 -#define ACTION_EMPTYING 21 -#define ACTION_CHANGING 22 -#define ACTION_EXPLODING 23 -#define ACTION_DYING 24 -#define ACTION_OTHER 25 - -#define NUM_ACTIONS 26 +#define ACTION_WALKING 9 +#define ACTION_PASSING 10 +#define ACTION_IMPACT 11 +#define ACTION_BREAKING 12 +#define ACTION_ACTIVATING 13 +#define ACTION_DEACTIVATING 14 +#define ACTION_OPENING 15 +#define ACTION_CLOSING 16 +#define ACTION_ATTACKING 17 +#define ACTION_GROWING 18 +#define ACTION_SHRINKING 19 +#define ACTION_ACTIVE 20 +#define ACTION_FILLING 21 +#define ACTION_EMPTYING 22 +#define ACTION_CHANGING 23 +#define ACTION_EXPLODING 24 +#define ACTION_DYING 25 +#define ACTION_OTHER 26 + +#define NUM_ACTIONS 27 /* values for special image configuration suffixes (must match game mode) */ #define GFX_SPECIAL_ARG_MAIN 0 @@ -1171,7 +1180,22 @@ struct ElementChangeInfo short trigger; /* custom element triggering change */ - short successor; /* new custom element after change */ + short target_element; /* target element after change */ + + int content[3][3]; /* new elements after extended change */ + boolean use_content; /* use extended change content */ + boolean only_complete; /* only use complete content */ + boolean use_random_change; /* use random value for setting content */ + int random; /* random value for setting content */ + int power; /* power of extended change */ + + boolean explode; /* explode instead of change */ + + /* functions that are called before, while and after the change of an + element -- currently only used for non-custom elements */ + void (*pre_change_function)(int x, int y); + void (*change_function)(int x, int y); + void (*post_change_function)(int x, int y); }; struct ElementInfo @@ -1200,7 +1224,8 @@ struct ElementInfo boolean use_gfx_element; short gfx_element; /* optional custom graphic element */ - int score; /* score for collection, smashing, ... */ + int score; /* score value for collecting */ + int gem_count; /* gem count value for collecting */ int push_delay_fixed; /* constant frame delay for pushing */ int push_delay_random; /* additional random frame delay for pushing */