X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=f8004d0bd7ef5397cc1c09ae50130180a6daa06e;hb=0ff3f484ffbb8e3404e1dc4536a292335369f2d2;hp=b8f21640dd5ef6b781c36b72fb14cb6321a48115;hpb=9c285b0e8e4d81c5559815c5f7142685ce865206;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index b8f21640..f8004d0b 100644 --- a/src/init.c +++ b/src/init.c @@ -598,7 +598,7 @@ void InitElementGraphicInfo() int default_direction_crumbled[NUM_DIRECTIONS]; if (default_graphic == -1) - default_graphic = IMG_CHAR_QUESTION; + default_graphic = IMG_UNKNOWN; if (default_crumbled == -1) default_crumbled = IMG_EMPTY; @@ -732,8 +732,8 @@ void InitElementGraphicInfo() if (options.verbose) { for (i = 0; i < MAX_NUM_ELEMENTS; i++) - if (element_info[i].graphic[ACTION_DEFAULT] == IMG_CHAR_QUESTION && - i != EL_CHAR_QUESTION) + if (element_info[i].graphic[ACTION_DEFAULT] == IMG_UNKNOWN && + i != EL_UNKNOWN) Error(ERR_RETURN, "warning: no graphic for element '%s' (%d)", element_info[i].token_name, i); } @@ -1843,7 +1843,6 @@ void InitElementPropertiesStatic() EL_SP_ELECTRON, EL_BALLOON, EL_SPRING, - EL_MAZE_RUNNER, -1 }; @@ -1946,6 +1945,9 @@ void InitElementPropertiesStatic() EL_SP_DISK_YELLOW, EL_SP_SNIKSNAK, EL_SP_ELECTRON, +#if 1 + EL_BLACK_ORB, +#endif -1 }; @@ -2085,6 +2087,11 @@ void InitElementPropertiesStatic() -1 }; + static int ep_protected[] = + { + -1 + }; + static int ep_player[] = { EL_PLAYER_1, @@ -2165,6 +2172,7 @@ void InitElementPropertiesStatic() EL_BD_BUTTERFLY_4, EL_BD_AMOEBA, EL_CHAR_QUESTION, + EL_UNKNOWN, -1 }; @@ -2857,6 +2865,7 @@ void InitElementPropertiesStatic() { ep_can_explode_1x1, EP_CAN_EXPLODE_1X1 }, { ep_pushable, EP_PUSHABLE }, { ep_can_explode_dyna, EP_CAN_EXPLODE_DYNA }, + { ep_protected, EP_PROTECTED }, { ep_player, EP_PLAYER }, { ep_can_pass_magic_wall, EP_CAN_PASS_MAGIC_WALL }, @@ -3081,15 +3090,30 @@ void InitElementPropertiesEngine(int engine_version) SET_PROPERTY(i, EP_DRAGONFIRE_PROOF, (IS_CUSTOM_ELEMENT(i) && IS_INDESTRUCTIBLE(i))); + /* ---------- PROTECTED ------------------------------------------------ */ + if (IS_ACCESSIBLE_INSIDE(i)) + SET_PROPERTY(i, EP_PROTECTED, TRUE); + /* ---------- EXPLOSION_PROOF ------------------------------------------ */ if (i == EL_FLAMES) SET_PROPERTY(i, EP_EXPLOSION_PROOF, TRUE); else if (engine_version < VERSION_IDENT(2,2,0,0)) SET_PROPERTY(i, EP_EXPLOSION_PROOF, IS_INDESTRUCTIBLE(i)); else +#if 1 + SET_PROPERTY(i, EP_EXPLOSION_PROOF, (IS_INDESTRUCTIBLE(i) && + (!IS_WALKABLE(i) || + IS_PROTECTED(i)))); +#else +#if 1 SET_PROPERTY(i, EP_EXPLOSION_PROOF, (IS_INDESTRUCTIBLE(i) && !IS_WALKABLE_OVER(i) && !IS_WALKABLE_UNDER(i))); +#else + SET_PROPERTY(i, EP_EXPLOSION_PROOF, (IS_INDESTRUCTIBLE(i) && + IS_PROTECTED(i))); +#endif +#endif if (IS_CUSTOM_ELEMENT(i)) { @@ -3120,6 +3144,11 @@ void InitElementPropertiesEngine(int engine_version) SET_PROPERTY(i, EP_CAN_EXPLODE_3X3, (CAN_EXPLODE(i) && !CAN_EXPLODE_1X1(i) && !CAN_EXPLODE_DYNA(i))); + + /* ---------- SP_PORT -------------------------------------------------- */ + SET_PROPERTY(i, EP_SP_PORT, (IS_SP_ELEMENT(i) && + IS_PASSABLE_INSIDE(i))); + #if 0 if (i == EL_CUSTOM_START + 253) printf("::: %d, %d, %d -> %d\n", @@ -3209,7 +3238,8 @@ void InitElementPropertiesEngine(int engine_version) #endif /* this is needed because some graphics depend on element properties */ - InitElementGraphicInfo(); + if (game_status == GAME_MODE_PLAYING) + InitElementGraphicInfo(); } static void InitGlobal()