X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=55b70f76d5d5d28604479014b03ea0a10fe0175b;hb=d4b0925a000fb490f5ade0feecdd4781fc8d0bd5;hp=06939f42f06aab143f65a0c0e7a41834a36c5bcb;hpb=b2910d93736e3da9f27fa8bf8ff5979b85e43a75;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 06939f42..55b70f76 100644 --- a/src/main.h +++ b/src/main.h @@ -150,19 +150,20 @@ #define EP_CAN_EXPLODE_BY_EXPLOSION 78 #define EP_COULD_MOVE_INTO_ACID 79 #define EP_MAYBE_DONT_COLLIDE_WITH 80 +#define EP_CAN_BE_CLONED_BY_ANDROID 81 /* values for internal purpose only (level editor) */ -#define EP_WALK_TO_OBJECT 81 -#define EP_DEADLY 82 -#define EP_EDITOR_CASCADE 83 -#define EP_EDITOR_CASCADE_ACTIVE 84 -#define EP_EDITOR_CASCADE_INACTIVE 85 +#define EP_WALK_TO_OBJECT 82 +#define EP_DEADLY 83 +#define EP_EDITOR_CASCADE 84 +#define EP_EDITOR_CASCADE_ACTIVE 85 +#define EP_EDITOR_CASCADE_INACTIVE 86 /* values for internal purpose only (game engine) */ -#define EP_HAS_ACTION 86 -#define EP_CAN_CHANGE_OR_HAS_ACTION 87 +#define EP_HAS_ACTION 87 +#define EP_CAN_CHANGE_OR_HAS_ACTION 88 -#define NUM_ELEMENT_PROPERTIES 88 +#define NUM_ELEMENT_PROPERTIES 89 #define NUM_EP_BITFIELDS ((NUM_ELEMENT_PROPERTIES + 31) / 32) #define EP_BITFIELD_BASE 0 @@ -376,7 +377,13 @@ #define CA_ARG_ELEMENT_RESET (CA_ARG_ELEMENT + 0) #define CA_ARG_ELEMENT_TARGET (CA_ARG_ELEMENT + 1) #define CA_ARG_ELEMENT_TRIGGER (CA_ARG_ELEMENT + 2) -#define CA_ARG_ELEMENT_HEADLINE (CA_ARG_ELEMENT + 999) +#define CA_ARG_ELEMENT_HEADLINE (CA_ARG_ELEMENT + 998) +#define CA_ARG_ELEMENT_CV_TARGET (CA_ARG_ELEMENT_TARGET) +#define CA_ARG_ELEMENT_CV_TRIGGER (CA_ARG_ELEMENT_TRIGGER) +#define CA_ARG_ELEMENT_CV_HEADLINE (CA_ARG_ELEMENT_HEADLINE) +#define CA_ARG_ELEMENT_NR_TARGET (CA_ARG_ELEMENT + 3) +#define CA_ARG_ELEMENT_NR_TRIGGER (CA_ARG_ELEMENT + 4) +#define CA_ARG_ELEMENT_NR_HEADLINE (CA_ARG_ELEMENT + 999) #define CA_ARG_SPEED 13000 #define CA_ARG_SPEED_NOT_MOVING (CA_ARG_SPEED + STEPSIZE_NOT_MOVING) #define CA_ARG_SPEED_VERY_SLOW (CA_ARG_SPEED + STEPSIZE_VERY_SLOW) @@ -564,6 +571,8 @@ 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 CAN_BE_CLONED_BY_ANDROID(e) \ + HAS_PROPERTY(e, EP_CAN_BE_CLONED_BY_ANDROID) #define IS_EDITOR_CASCADE(e) HAS_PROPERTY(e, EP_EDITOR_CASCADE) #define IS_EDITOR_CASCADE_ACTIVE(e) \ @@ -662,6 +671,15 @@ #define SND_ELEMENT(e) (e) #endif +#if 1 +#define GROUP_NR(e) ((e) - EL_GROUP_START) +#define IS_IN_GROUP(e, nr) (element_info[e].in_group[nr] == TRUE) +#define IS_IN_GROUP_EL(e, ge) (IS_IN_GROUP(e, (ge) - EL_GROUP_START)) + +#define IS_EQUAL_OR_IN_GROUP(e, ge) \ + (IS_GROUP_ELEMENT(ge) ? IS_IN_GROUP(e, GROUP_NR(ge)) : (e) == (ge)) +#endif + #define IS_PLAYER(x, y) (ELEM_IS_PLAYER(StorePlayer[x][y])) #define IS_FREE(x, y) (Feld[x][y] == EL_EMPTY && !IS_PLAYER(x, y)) @@ -671,6 +689,8 @@ #define IS_FALLING(x,y) (MovPos[x][y] != 0 && MovDir[x][y] == MV_DOWN) #define IS_BLOCKED(x,y) (Feld[x][y] == EL_BLOCKED) +#define IS_MV_DIAGONAL(x) ((x) & MV_HORIZONTAL && (x) & MV_VERTICAL) + #define EL_CHANGED(e) ((e) == EL_ROCK ? EL_EMERALD : \ (e) == EL_BD_ROCK ? EL_BD_DIAMOND : \ (e) == EL_EMERALD ? EL_DIAMOND : \ @@ -1181,6 +1201,7 @@ #define EL_TRIGGER_ELEMENT 657 #define EL_TRIGGER_PLAYER 658 +/* SP style elements */ #define EL_SP_GRAVITY_ON_PORT_RIGHT 659 #define EL_SP_GRAVITY_ON_PORT_DOWN 660 #define EL_SP_GRAVITY_ON_PORT_LEFT 661 @@ -1190,8 +1211,7 @@ #define EL_SP_GRAVITY_OFF_PORT_LEFT 665 #define EL_SP_GRAVITY_OFF_PORT_UP 666 - -/* the following EMC style elements are currently not implemented in R'n'D */ +/* EMC style elements */ #define EL_BALLOON_SWITCH_NONE 667 #define EL_EMC_GATE_5 668 #define EL_EMC_GATE_6 669 @@ -1231,7 +1251,9 @@ #define EL_EMC_FAKE_ACID 703 #define EL_EMC_DRIPPER 704 -#define NUM_FILE_ELEMENTS 705 +#define EL_TRIGGER_CE_VALUE 705 + +#define NUM_FILE_ELEMENTS 706 /* "real" (and therefore drawable) runtime elements */ @@ -1320,9 +1342,13 @@ #define EL_MAGIC_WALL_FILLING (EL_FIRST_RUNTIME_UNREAL + 16) #define EL_BD_MAGIC_WALL_FILLING (EL_FIRST_RUNTIME_UNREAL + 17) #define EL_ELEMENT_SNAPPING (EL_FIRST_RUNTIME_UNREAL + 18) +#define EL_DIAGONAL_SHRINKING (EL_FIRST_RUNTIME_UNREAL + 19) +#define EL_DIAGONAL_GROWING (EL_FIRST_RUNTIME_UNREAL + 20) + +#define NUM_RUNTIME_ELEMENTS (EL_FIRST_RUNTIME_UNREAL + 21) /* dummy elements (never used as game elements, only used as graphics) */ -#define EL_FIRST_DUMMY (EL_FIRST_RUNTIME_UNREAL + 19) +#define EL_FIRST_DUMMY NUM_RUNTIME_ELEMENTS #define EL_STEELWALL_TOPLEFT (EL_FIRST_DUMMY + 0) #define EL_STEELWALL_TOPRIGHT (EL_FIRST_DUMMY + 1) @@ -2159,11 +2185,11 @@ struct ElementInfo /* ---------- graphic and sound definitions ---------- */ int graphic[NUM_ACTIONS]; /* default graphics for several actions */ - int direction_graphic[NUM_ACTIONS][NUM_DIRECTIONS]; + int direction_graphic[NUM_ACTIONS][NUM_DIRECTIONS_FULL]; /* special graphics for left/right/up/down */ int crumbled[NUM_ACTIONS]; /* crumbled graphics for several actions */ - int direction_crumbled[NUM_ACTIONS][NUM_DIRECTIONS]; + int direction_crumbled[NUM_ACTIONS][NUM_DIRECTIONS_FULL]; /* crumbled graphics for left/right/up/down */ int special_graphic[NUM_SPECIAL_GFX_ARGS];