X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=0b925c68e86b05f1eea15c5a298a0ed6932be155;hb=af07d74262e7d5075feaea67fa16c04c6be0e3f6;hp=480784b1041ad2680a4294af5eecf27c42cc90f2;hpb=57f6ae0759f8f895ad1fc88a4eb2279404a8bb2c;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 480784b1..0b925c68 100644 --- a/src/init.c +++ b/src/init.c @@ -440,14 +440,15 @@ void InitElementGraphicInfo() int direction = element_to_graphic[i].direction; boolean crumbled = element_to_graphic[i].crumbled; int graphic = element_to_graphic[i].graphic; + int base_graphic = el2baseimg(element); if (graphic_info[graphic].bitmap == NULL) continue; if ((action > -1 || direction > -1 || crumbled == TRUE) && - el2img(element) != -1) + base_graphic != -1) { - boolean base_redefined = getImageListEntry(el2img(element))->redefined; + boolean base_redefined = getImageListEntry(base_graphic)->redefined; boolean act_dir_redefined = getImageListEntry(graphic)->redefined; /* if the base graphic ("emerald", for example) has been redefined, @@ -759,7 +760,8 @@ void InitElementSpecialGraphicInfo() int element = element_to_special_graphic[i].element; int special = element_to_special_graphic[i].special; int graphic = element_to_special_graphic[i].graphic; - boolean base_redefined = getImageListEntry(el2img(element))->redefined; + int base_graphic = el2baseimg(element); + boolean base_redefined = getImageListEntry(base_graphic)->redefined; boolean special_redefined = getImageListEntry(graphic)->redefined; /* if the base graphic ("emerald", for example) has been redefined, @@ -1585,6 +1587,7 @@ static int get_special_property_bit(int element, int property_bit_nr) { EL_PLAYER_3, 0 }, { EL_PLAYER_4, 0 }, { EL_SP_MURPHY, 0 }, + { EL_SOKOBAN_FIELD_PLAYER, 0 }, /* all element that can move may be able to also move into acid */ { EL_BUG, 1 }, @@ -1733,6 +1736,7 @@ void InitElementPropertiesStatic() EL_INVISIBLE_SAND_ACTIVE, /* !!! currently not diggable, but handled by 'ep_dont_run_into' !!! */ + /* (if amoeba can grow into anything diggable, maybe keep these out) */ #if 0 EL_LANDMINE, EL_TRAP_ACTIVE, @@ -2234,7 +2238,7 @@ void InitElementPropertiesStatic() -1 }; - static int ep_can_explode_dyna[] = + static int ep_can_explode_cross[] = { -1 }; @@ -2254,6 +2258,11 @@ void InitElementPropertiesStatic() -1 }; + static int ep_throwable[] = + { + -1 + }; + static int ep_player[] = { EL_PLAYER_1, @@ -2261,6 +2270,7 @@ void InitElementPropertiesStatic() EL_PLAYER_3, EL_PLAYER_4, EL_SP_MURPHY, + EL_SOKOBAN_FIELD_PLAYER, -1 }; @@ -2322,6 +2332,9 @@ void InitElementPropertiesStatic() EL_EXIT_OPEN, EL_STEELWALL, EL_PLAYER_1, + EL_PLAYER_2, + EL_PLAYER_3, + EL_PLAYER_4, EL_BD_FIREFLY, EL_BD_FIREFLY_1, EL_BD_FIREFLY_2, @@ -2405,7 +2418,11 @@ void InitElementPropertiesStatic() EL_SOKOBAN_OBJECT, EL_SOKOBAN_FIELD_EMPTY, EL_SOKOBAN_FIELD_FULL, + EL_SOKOBAN_FIELD_PLAYER, EL_PLAYER_1, + EL_PLAYER_2, + EL_PLAYER_3, + EL_PLAYER_4, EL_INVISIBLE_STEELWALL, -1 }; @@ -2830,6 +2847,24 @@ void InitElementPropertiesStatic() -1 }; + static int ep_can_turn_each_move[] = + { + /* !!! do something with this one !!! */ + -1 + }; + + static int ep_can_grow[] = + { + EL_BD_AMOEBA, + EL_AMOEBA_DROP, + EL_AMOEBA_WET, + EL_AMOEBA_DRY, + EL_AMOEBA_FULL, + EL_GAME_OF_LIFE, + EL_BIOMAZE, + -1 + }; + static int ep_active_bomb[] = { EL_DYNAMITE_ACTIVE, @@ -3026,8 +3061,9 @@ void InitElementPropertiesStatic() { ep_droppable, EP_DROPPABLE }, { ep_can_explode_1x1, EP_CAN_EXPLODE_1X1 }, { ep_pushable, EP_PUSHABLE }, - { ep_can_explode_dyna, EP_CAN_EXPLODE_DYNA }, + { ep_can_explode_cross, EP_CAN_EXPLODE_CROSS }, { ep_protected, EP_PROTECTED }, + { ep_throwable, EP_THROWABLE }, { ep_player, EP_PLAYER }, { ep_can_pass_magic_wall, EP_CAN_PASS_MAGIC_WALL }, @@ -3050,6 +3086,8 @@ void InitElementPropertiesStatic() { ep_amoeboid, EP_AMOEBOID }, { ep_amoebalive, EP_AMOEBALIVE }, { ep_has_content, EP_HAS_CONTENT }, + { ep_can_turn_each_move, EP_CAN_TURN_EACH_MOVE }, + { ep_can_grow, EP_CAN_GROW }, { ep_active_bomb, EP_ACTIVE_BOMB }, { ep_inactive, EP_INACTIVE }, @@ -3228,7 +3266,8 @@ void InitElementPropertiesEngine(int engine_version) /* ---------- COLLECTIBLE ---------------------------------------------- */ SET_PROPERTY(i, EP_COLLECTIBLE, (IS_COLLECTIBLE_ONLY(i) || - IS_DROPPABLE(i))); + IS_DROPPABLE(i) || + IS_THROWABLE(i))); /* ---------- SNAPPABLE ------------------------------------------------ */ SET_PROPERTY(i, EP_SNAPPABLE, (IS_DIGGABLE(i) || @@ -3320,7 +3359,7 @@ void InitElementPropertiesEngine(int engine_version) /* ---------- CAN_EXPLODE_3X3 ------------------------------------------ */ SET_PROPERTY(i, EP_CAN_EXPLODE_3X3, (CAN_EXPLODE(i) && !CAN_EXPLODE_1X1(i) && - !CAN_EXPLODE_DYNA(i))); + !CAN_EXPLODE_CROSS(i))); /* ---------- CAN_EXPLODE_BY_DRAGONFIRE -------------------------------- */ SET_PROPERTY(i, EP_CAN_EXPLODE_BY_DRAGONFIRE, CAN_EXPLODE_BY_FIRE(i)); @@ -3330,7 +3369,8 @@ void InitElementPropertiesEngine(int engine_version) i == EL_BLACK_ORB)); /* ---------- COULD_MOVE_INTO_ACID ------------------------------------- */ - SET_PROPERTY(i, EP_COULD_MOVE_INTO_ACID, (CAN_MOVE(i) || + SET_PROPERTY(i, EP_COULD_MOVE_INTO_ACID, (ELEM_IS_PLAYER(i) || + CAN_MOVE(i) || IS_CUSTOM_ELEMENT(i))); /* ---------- MAYBE_DONT_COLLIDE_WITH ---------------------------------- */ @@ -3356,7 +3396,7 @@ void InitElementPropertiesEngine(int engine_version) printf("::: %d, %d, %d -> %d\n", CAN_EXPLODE_1X1(i), CAN_EXPLODE_3X3(i), - CAN_EXPLODE_DYNA(i), + CAN_EXPLODE_CROSS(i), CAN_EXPLODE(i)); #endif