X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fmain.h;h=6e46f348e52bb8a531acd74c74bd45484554a0c4;hp=d92af3dcbc4342dd34aa68af4d45fd5513922ee4;hb=5ae04ac2ef54f6f164a797c16c9782042cc2ce67;hpb=c3b01181bb715bd5f4e4b519a0df8efd90d3c9aa diff --git a/src/main.h b/src/main.h index d92af3dc..6e46f348 100644 --- a/src/main.h +++ b/src/main.h @@ -63,7 +63,7 @@ /* property values */ #define EP_AMOEBALIVE 0 #define EP_AMOEBOID 1 -#define EP_SCHLUESSEL 2 +#define EP_CAN_BE_CRUMBLED 2 #define EP_PFORTE 3 #define EP_SOLID 4 #define EP_INDESTRUCTIBLE 5 @@ -77,38 +77,39 @@ #define EP_COULD_MOVE 13 #define EP_DONT_TOUCH 14 #define EP_DONT_GO_TO 15 -#define EP_MAMPF2 16 -#define EP_CHAR 17 +#define EP_FOOD_DARK_YAMYAM 16 +#define EP_EM_SLIPPERY_WALL 17 #define EP_BD_ELEMENT 18 #define EP_SB_ELEMENT 19 #define EP_GEM 20 #define EP_INACTIVE 21 #define EP_EXPLOSIVE 22 -#define EP_MAMPF3 23 +#define EP_FOOD_PENGUIN 23 #define EP_PUSHABLE 24 #define EP_PLAYER 25 -#define EP_HAS_CONTENT 26 -#define EP_EATABLE 27 -#define EP_SP_ELEMENT 28 -#define EP_QUICK_GATE 29 +#define EP_WALKABLE_OVER 26 +#define EP_DIGGABLE 27 +#define EP_COLLECTIBLE 28 +#define EP_WALKABLE_THROUGH 29 #define EP_OVER_PLAYER 30 #define EP_ACTIVE_BOMB 31 #define EP_BELT 32 #define EP_BELT_ACTIVE 33 #define EP_BELT_SWITCH 34 -#define EP_TUBE 35 -#define EP_EM_SLIPPERY_WALL 36 -#define EP_CAN_BE_CRUMBLED 37 +#define EP_WALKABLE_UNDER 35 +#define EP_SP_ELEMENT 36 +#define EP_HAS_CONTENT 37 +#define EP_SOLID_NEW 38 -#define NUM_ELEMENT_PROPERTIES 38 +#define NUM_ELEMENT_PROPERTIES 39 #define NUM_EP_BITFIELDS ((NUM_ELEMENT_PROPERTIES + 31) / 32) #define EP_BITFIELD_BASE 0 #define PROPERTY_BIT(p) (1 << ((p) % 32)) #define PROPERTY_VAR(e, p) (Properties[e][(p) / 32]) -#define PROPERTY_VALUE(e, p) (PROPERTY_VAR(e, p) & PROPERTY_BIT(p)) +#define HAS_PROPERTY(e, p) ((PROPERTY_VAR(e, p) & PROPERTY_BIT(p)) != 0) #define SET_PROPERTY(e, p, v) ((v) ? \ (PROPERTY_VAR(e,p) |= PROPERTY_BIT(p)) : \ (PROPERTY_VAR(e,p) &= ~PROPERTY_BIT(p))) @@ -116,7 +117,7 @@ /* property bit masks */ #define EP_BIT_AMOEBALIVE PROPERTY_BIT(EP_AMOEBALIVE) #define EP_BIT_AMOEBOID PROPERTY_BIT(EP_AMOEBOID) -#define EP_BIT_SCHLUESSEL PROPERTY_BIT(EP_SCHLUESSEL) +#define EP_BIT_CAN_BE_CRUMBLED PROPERTY_BIT(EP_CAN_BE_CRUMBLED) #define EP_BIT_PFORTE PROPERTY_BIT(EP_PFORTE) #define EP_BIT_SOLID PROPERTY_BIT(EP_SOLID) #define EP_BIT_INDESTRUCTIBLE PROPERTY_BIT(EP_INDESTRUCTIBLE) @@ -130,74 +131,75 @@ #define EP_BIT_COULD_MOVE PROPERTY_BIT(EP_COULD_MOVE) #define EP_BIT_DONT_TOUCH PROPERTY_BIT(EP_DONT_TOUCH) #define EP_BIT_DONT_GO_TO PROPERTY_BIT(EP_DONT_GO_TO) -#define EP_BIT_MAMPF2 PROPERTY_BIT(EP_MAMPF2) -#define EP_BIT_CHAR PROPERTY_BIT(EP_CHAR) +#define EP_BIT_FOOD_DARK_YAMYAM PROPERTY_BIT(EP_FOOD_DARK_YAMYAM) +#define EP_BIT_EM_SLIPPERY_WALL PROPERTY_BIT(EP_EM_SLIPPERY_WALL) #define EP_BIT_BD_ELEMENT PROPERTY_BIT(EP_BD_ELEMENT) #define EP_BIT_SB_ELEMENT PROPERTY_BIT(EP_SB_ELEMENT) #define EP_BIT_GEM PROPERTY_BIT(EP_GEM) #define EP_BIT_INACTIVE PROPERTY_BIT(EP_INACTIVE) #define EP_BIT_EXPLOSIVE PROPERTY_BIT(EP_EXPLOSIVE) -#define EP_BIT_MAMPF3 PROPERTY_BIT(EP_MAMPF3) +#define EP_BIT_FOOD_PENGUIN PROPERTY_BIT(EP_FOOD_PENGUIN) #define EP_BIT_PUSHABLE PROPERTY_BIT(EP_PUSHABLE) #define EP_BIT_PLAYER PROPERTY_BIT(EP_PLAYER) -#define EP_BIT_HAS_CONTENT PROPERTY_BIT(EP_HAS_CONTENT) -#define EP_BIT_EATABLE PROPERTY_BIT(EP_EATABLE) -#define EP_BIT_SP_ELEMENT PROPERTY_BIT(EP_SP_ELEMENT) -#define EP_BIT_QUICK_GATE PROPERTY_BIT(EP_QUICK_GATE) +#define EP_BIT_WALKABLE_OVER PROPERTY_BIT(EP_WALKABLE_OVER) +#define EP_BIT_DIGGABLE PROPERTY_BIT(EP_DIGGABLE) +#define EP_BIT_COLLECTIBLE PROPERTY_BIT(EP_COLLECTIBLE) +#define EP_BIT_WALKABLE_THROUGH PROPERTY_BIT(EP_WALKABLE_THROUGH) #define EP_BIT_OVER_PLAYER PROPERTY_BIT(EP_OVER_PLAYER) #define EP_BIT_ACTIVE_BOMB PROPERTY_BIT(EP_ACTIVE_BOMB) -/* values for 'Properties2' */ #define EP_BIT_BELT PROPERTY_BIT(EP_BELT) #define EP_BIT_BELT_ACTIVE PROPERTY_BIT(EP_BELT_ACTIVE) #define EP_BIT_BELT_SWITCH PROPERTY_BIT(EP_BELT_SWITCH) -#define EP_BIT_TUBE PROPERTY_BIT(EP_TUBE) -#define EP_BIT_EM_SLIPPERY_WALL PROPERTY_BIT(EP_EM_SLIPPERY_WALL) -#define EP_BIT_CAN_BE_CRUMBLED PROPERTY_BIT(EP_CAN_BE_CRUMBLED) +#define EP_BIT_WALKABLE_UNDER PROPERTY_BIT(EP_WALKABLE_UNDER) +#define EP_BIT_SP_ELEMENT PROPERTY_BIT(EP_SP_ELEMENT) +#define EP_BIT_HAS_CONTENT PROPERTY_BIT(EP_HAS_CONTENT) +#define EP_BIT_SOLID_NEW PROPERTY_BIT(EP_SOLID_NEW) #define EP_BITMASK_DEFAULT 0 /* property macros */ -#define IS_AMOEBALIVE(e) PROPERTY_VALUE(e, EP_AMOEBALIVE) -#define IS_AMOEBOID(e) PROPERTY_VALUE(e, EP_AMOEBOID) -#define IS_SCHLUESSEL(e) PROPERTY_VALUE(e, EP_SCHLUESSEL) -#define IS_PFORTE(e) PROPERTY_VALUE(e, EP_PFORTE) -#define IS_SOLID(e) PROPERTY_VALUE(e, EP_SOLID) -#define IS_INDESTRUCTIBLE(e) PROPERTY_VALUE(e, EP_INDESTRUCTIBLE) -#define IS_SLIPPERY(e) PROPERTY_VALUE(e, EP_SLIPPERY) -#define IS_ENEMY(e) PROPERTY_VALUE(e, EP_ENEMY) -#define IS_MAUER(e) PROPERTY_VALUE(e, EP_MAUER) -#define CAN_FALL(e) PROPERTY_VALUE(e, EP_CAN_FALL) -#define CAN_SMASH(e) PROPERTY_VALUE(e, EP_CAN_SMASH) -#define CAN_CHANGE(e) PROPERTY_VALUE(e, EP_CAN_CHANGE) -#define CAN_MOVE(e) PROPERTY_VALUE(e, EP_CAN_MOVE) -#define COULD_MOVE(e) PROPERTY_VALUE(e, EP_COULD_MOVE) -#define DONT_TOUCH(e) PROPERTY_VALUE(e, EP_DONT_TOUCH) -#define DONT_GO_TO(e) PROPERTY_VALUE(e, EP_DONT_GO_TO) -#define IS_MAMPF2(e) PROPERTY_VALUE(e, EP_MAMPF2) -#define IS_CHAR(e) PROPERTY_VALUE(e, EP_CHAR) -#define IS_BD_ELEMENT(e) PROPERTY_VALUE(e, EP_BD_ELEMENT) -#define IS_SB_ELEMENT(e) PROPERTY_VALUE(e, EP_SB_ELEMENT) -#define IS_GEM(e) PROPERTY_VALUE(e, EP_GEM) -#define IS_INACTIVE(e) PROPERTY_VALUE(e, EP_INACTIVE) -#define IS_EXPLOSIVE(e) PROPERTY_VALUE(e, EP_EXPLOSIVE) -#define IS_MAMPF3(e) PROPERTY_VALUE(e, EP_MAMPF3) -#define IS_PUSHABLE(e) PROPERTY_VALUE(e, EP_PUSHABLE) -#define ELEM_IS_PLAYER(e) PROPERTY_VALUE(e, EP_PLAYER) -#define HAS_CONTENT(e) PROPERTY_VALUE(e, EP_HAS_CONTENT) -#define IS_EATABLE(e) PROPERTY_VALUE(e, EP_EATABLE) -#define IS_SP_ELEMENT(e) PROPERTY_VALUE(e, EP_SP_ELEMENT) -#define IS_QUICK_GATE(e) PROPERTY_VALUE(e, EP_QUICK_GATE) -#define IS_OVER_PLAYER(e) PROPERTY_VALUE(e, EP_OVER_PLAYER) -#define IS_ACTIVE_BOMB(e) PROPERTY_VALUE(e, EP_ACTIVE_BOMB) - -#define IS_BELT(e) PROPERTY_VALUE(e, EP_BELT) -#define IS_BELT_ACTIVE(e) PROPERTY_VALUE(e, EP_BELT_ACTIVE) -#define IS_BELT_SWITCH(e) PROPERTY_VALUE(e, EP_BELT_SWITCH) -#define IS_TUBE(e) PROPERTY_VALUE(e, EP_TUBE) -#define IS_EM_SLIPPERY_WALL(e) PROPERTY_VALUE(e, EP_EM_SLIPPERY_WALL) -#define CAN_BE_CRUMBLED(e) PROPERTY_VALUE(e, EP_CAN_BE_CRUMBLED) +#define IS_AMOEBALIVE(e) HAS_PROPERTY(e, EP_AMOEBALIVE) +#define IS_AMOEBOID(e) HAS_PROPERTY(e, EP_AMOEBOID) +#define CAN_BE_CRUMBLED(e) HAS_PROPERTY(e, EP_CAN_BE_CRUMBLED) +#define IS_PFORTE(e) HAS_PROPERTY(e, EP_PFORTE) +#define IS_SOLID(e) HAS_PROPERTY(e, EP_SOLID) +#define IS_INDESTRUCTIBLE(e) HAS_PROPERTY(e, EP_INDESTRUCTIBLE) +#define IS_SLIPPERY(e) HAS_PROPERTY(e, EP_SLIPPERY) +#define IS_ENEMY(e) HAS_PROPERTY(e, EP_ENEMY) +#define IS_MAUER(e) HAS_PROPERTY(e, EP_MAUER) +#define CAN_FALL(e) HAS_PROPERTY(e, EP_CAN_FALL) +#define CAN_SMASH(e) HAS_PROPERTY(e, EP_CAN_SMASH) +#define CAN_CHANGE(e) HAS_PROPERTY(e, EP_CAN_CHANGE) +#define CAN_MOVE(e) HAS_PROPERTY(e, EP_CAN_MOVE) +#define COULD_MOVE(e) HAS_PROPERTY(e, EP_COULD_MOVE) +#define DONT_TOUCH(e) HAS_PROPERTY(e, EP_DONT_TOUCH) +#define DONT_GO_TO(e) HAS_PROPERTY(e, EP_DONT_GO_TO) +#define IS_FOOD_DARK_YAMYAM(e) HAS_PROPERTY(e, EP_FOOD_DARK_YAMYAM) +#define IS_EM_SLIPPERY_WALL(e) HAS_PROPERTY(e, EP_EM_SLIPPERY_WALL) +#define IS_BD_ELEMENT(e) HAS_PROPERTY(e, EP_BD_ELEMENT) +#define IS_SB_ELEMENT(e) HAS_PROPERTY(e, EP_SB_ELEMENT) +#define IS_GEM(e) HAS_PROPERTY(e, EP_GEM) +#define IS_INACTIVE(e) HAS_PROPERTY(e, EP_INACTIVE) +#define IS_EXPLOSIVE(e) HAS_PROPERTY(e, EP_EXPLOSIVE) +#define IS_FOOD_PENGUIN(e) HAS_PROPERTY(e, EP_FOOD_PENGUIN) +#define IS_PUSHABLE(e) HAS_PROPERTY(e, EP_PUSHABLE) +#define ELEM_IS_PLAYER(e) HAS_PROPERTY(e, EP_PLAYER) +#define IS_WALKABLE_OVER(e) HAS_PROPERTY(e, EP_WALKABLE_OVER) +#define IS_DIGGABLE(e) HAS_PROPERTY(e, EP_DIGGABLE) +#define IS_COLLECTIBLE(e) HAS_PROPERTY(e, EP_COLLECTIBLE) +#define IS_WALKABLE_THROUGH(e) HAS_PROPERTY(e, EP_WALKABLE_THROUGH) +#define IS_OVER_PLAYER(e) HAS_PROPERTY(e, EP_OVER_PLAYER) +#define IS_ACTIVE_BOMB(e) HAS_PROPERTY(e, EP_ACTIVE_BOMB) + +#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_WALKABLE_UNDER(e) HAS_PROPERTY(e, EP_WALKABLE_UNDER) +#define IS_SP_ELEMENT(e) HAS_PROPERTY(e, EP_SP_ELEMENT) +#define HAS_CONTENT(e) HAS_PROPERTY(e, EP_HAS_CONTENT) +#define IS_SOLID_NEW(e) HAS_PROPERTY(e, EP_SOLID_NEW) #define IS_CUSTOM_ELEMENT(e) ((e) >= EL_CUSTOM_START && \ (e) <= EL_CUSTOM_END) @@ -228,7 +230,8 @@ #define PLAYERINFO(x,y) (&stored_player[StorePlayer[x][y]-EL_PLAYER_1]) #define SHIELD_ON(p) ((p)->shield_normal_time_left > 0) -#define PROTECTED_FIELD(x,y) (IS_TUBE(Feld[x][y])) +#define PROTECTED_FIELD(x,y) (IS_WALKABLE_UNDER(Feld[x][y]) && \ + IS_INDESTRUCTIBLE(Feld[x][y])) #define PLAYER_PROTECTED(x,y) (SHIELD_ON(PLAYERINFO(x, y)) || \ PROTECTED_FIELD(x, y))