X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=1d771ed6589518a2ed7e2bbd517a1ad81e505b43;hb=caf3da0a0e3af75eb8d10f83e5105581402b387e;hp=d3ae1526b1be073701b55fa49b571639ea8c251c;hpb=2cbc9d10d5465ab9a168d1fb0af9905a2e56c2a2;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index d3ae1526..1d771ed6 100644 --- a/src/main.h +++ b/src/main.h @@ -68,8 +68,8 @@ #define EP_UNUSED_4 4 #define EP_INDESTRUCTIBLE 5 #define EP_SLIPPERY 6 -#define EP_UNUSED_7 7 -#define EP_UNUSED_8 8 +#define EP_CAN_EXPLODE 7 +#define EP_CAN_MOVE 8 #define EP_CAN_FALL 9 #define EP_CAN_SMASH 10 #define EP_WALKABLE_OVER 11 @@ -90,50 +90,53 @@ /* values for special configurable properties (depending on level settings) */ #define EP_EM_SLIPPERY_WALL 25 +/* values for special graphics properties (no effect on game engine) */ +#define EP_CAN_BE_CRUMBLED 26 + /* values for pre-defined properties */ -#define EP_PLAYER 26 -#define EP_CAN_BE_CRUMBLED 27 -#define EP_CAN_MOVE 28 -#define EP_CAN_PASS_MAGIC_WALL 29 -#define EP_SWITCHABLE 30 -#define EP_DONT_TOUCH 31 -#define EP_ENEMY 32 -#define EP_DONT_GO_TO 33 -#define EP_CAN_EXPLODE 34 -#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_BELT 44 -#define EP_BELT_ACTIVE 45 -#define EP_BELT_SWITCH 46 -#define EP_TUBE 47 -#define EP_KEYGATE 48 -#define EP_AMOEBOID 49 -#define EP_AMOEBALIVE 50 -#define EP_HAS_CONTENT 51 -#define EP_ACTIVE_BOMB 52 -#define EP_INACTIVE 53 +#define EP_PLAYER 27 +#define EP_CAN_PASS_MAGIC_WALL 28 +#define EP_SWITCHABLE 29 +#define EP_DONT_TOUCH 30 +#define EP_ENEMY 31 +#define EP_DONT_GO_TO 32 +#define EP_BD_ELEMENT 33 +#define EP_SP_ELEMENT 34 +#define EP_SB_ELEMENT 35 +#define EP_GEM 36 +#define EP_FOOD_DARK_YAMYAM 37 +#define EP_FOOD_PENGUIN 38 +#define EP_FOOD_PIG 39 +#define EP_HISTORIC_WALL 40 +#define EP_HISTORIC_SOLID 41 +#define EP_BELT 42 +#define EP_BELT_ACTIVE 43 +#define EP_BELT_SWITCH 44 +#define EP_TUBE 45 +#define EP_KEYGATE 46 +#define EP_AMOEBOID 47 +#define EP_AMOEBALIVE 48 +#define EP_HAS_CONTENT 49 +#define EP_ACTIVE_BOMB 50 +#define EP_INACTIVE 51 /* values for derived properties (determined from properties above) */ -#define EP_ACCESSIBLE_OVER 54 -#define EP_ACCESSIBLE_INSIDE 55 -#define EP_ACCESSIBLE_UNDER 56 -#define EP_WALKABLE 57 -#define EP_PASSABLE 58 -#define EP_ACCESSIBLE 59 -#define EP_SNAPPABLE 60 -#define EP_WALL 61 -#define EP_SOLID_FOR_PUSHING 62 -#define EP_DRAGONFIRE_PROOF 63 -#define EP_EXPLOSION_PROOF 64 - -#define NUM_ELEMENT_PROPERTIES 65 +#define EP_ACCESSIBLE_OVER 52 +#define EP_ACCESSIBLE_INSIDE 53 +#define EP_ACCESSIBLE_UNDER 54 +#define EP_WALKABLE 55 +#define EP_PASSABLE 56 +#define EP_ACCESSIBLE 57 +#define EP_SNAPPABLE 58 +#define EP_WALL 59 +#define EP_SOLID_FOR_PUSHING 60 +#define EP_DRAGONFIRE_PROOF 61 +#define EP_EXPLOSION_PROOF 62 + +/* values for internal purpose only (level editor) */ +#define EP_WALK_TO_OBJECT 63 + +#define NUM_ELEMENT_PROPERTIES 64 #define NUM_EP_BITFIELDS ((NUM_ELEMENT_PROPERTIES + 31) / 32) #define EP_BITFIELD_BASE 0 @@ -174,6 +177,8 @@ #define IS_COLLECTIBLE(e) HAS_PROPERTY(e, EP_COLLECTIBLE) #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_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 IS_WALKABLE_OVER(e) HAS_PROPERTY(e, EP_WALKABLE_OVER) @@ -188,16 +193,16 @@ /* macros for special configurable properties */ #define IS_EM_SLIPPERY_WALL(e) HAS_PROPERTY(e, EP_EM_SLIPPERY_WALL) +/* macros for special graphics properties */ +#define CAN_BE_CRUMBLED(e) HAS_PROPERTY(GFX_ELEMENT(e),EP_CAN_BE_CRUMBLED) + /* macros for pre-defined properties */ #define ELEM_IS_PLAYER(e) HAS_PROPERTY(e, EP_PLAYER) -#define CAN_BE_CRUMBLED(e) HAS_PROPERTY(e, EP_CAN_BE_CRUMBLED) -#define CAN_MOVE(e) HAS_PROPERTY(e, EP_CAN_MOVE) #define CAN_PASS_MAGIC_WALL(e) HAS_PROPERTY(e, EP_CAN_PASS_MAGIC_WALL) #define IS_SWITCHABLE(e) HAS_PROPERTY(e, EP_SWITCHABLE) #define DONT_TOUCH(e) HAS_PROPERTY(e, EP_DONT_TOUCH) #define IS_ENEMY(e) HAS_PROPERTY(e, EP_ENEMY) #define DONT_GO_TO(e) HAS_PROPERTY(e, EP_DONT_GO_TO) -#define IS_CAN_EXPLODE(e) HAS_PROPERTY(e, EP_CAN_EXPLODE) #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) @@ -234,6 +239,10 @@ #define IS_CUSTOM_ELEMENT(e) ((e) >= EL_CUSTOM_START && \ (e) <= EL_CUSTOM_END) +#define GFX_ELEMENT(e) (IS_CUSTOM_ELEMENT(e) && \ + CUSTOM_ELEMENT_INFO(e).use_gfx_element ? \ + CUSTOM_ELEMENT_INFO(e).gfx_element : e) + #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)) @@ -1012,17 +1021,29 @@ struct PlayerInfo struct CustomElementChangeInfo { - unsigned long events; /* bitfield for change events */ + unsigned long events; /* bitfield for change events */ - short successor; /* new custom element after change */ + int delay_fixed; /* added frame delay before changed (fixed) */ + int delay_random; /* added frame delay before changed (random) */ + int delay_frames; /* either 1 (frames) or 50 (seconds; 50 fps) */ - int delay_fixed; /* added frame delay before changed (fixed) */ - int delay_random; /* added frame delay before changed (random) */ - int delay_frames; /* either 1 (frames) or 50 (seconds; 50 fps) */ + short successor; /* new custom element after change */ }; struct CustomElementInfo { + boolean use_template; /* use all properties from template file */ + + boolean use_gfx_element; + short gfx_element; /* optional custom graphic element */ + + int move_direction; /* direction movable element moves to */ + + int walk_to_action; /* only for level editor; not stored */ + int walkable_layer; /* only for level editor; not stored */ + + int content[3][3]; /* new elements after explosion */ + struct CustomElementChangeInfo change; }; @@ -1042,8 +1063,8 @@ struct LevelInfo char name[MAX_LEVEL_NAME_LEN + 1]; char author[MAX_LEVEL_AUTHOR_LEN + 1]; int score[LEVEL_SCORE_ELEMENTS]; - int yam_content[MAX_ELEMENT_CONTENTS][3][3]; - int num_yam_contents; + int yamyam_content[MAX_ELEMENT_CONTENTS][3][3]; + int num_yamyam_contents; int amoeba_speed; int amoeba_content; int time_magic_wall; @@ -1101,7 +1122,7 @@ struct GameInfo int initial_move_delay_value; /* variable within running game */ - int yam_content_nr; + int yamyam_content_nr; boolean magic_wall_active; int magic_wall_time_left; int light_time_left;