X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=inline;f=src%2Fgame.c;h=6148015ddeac6d4cc5a60ea170e91a66cb6e9303;hb=c0f3e2e3c8f0c8b88fca68375d0b942bda8ffcbf;hp=e868babeec2a4318e6b2bda52a740fb436e5c468;hpb=8b04d496646e102dd15710ba091e2f37cadcec5e;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index e868babe..6148015d 100644 --- a/src/game.c +++ b/src/game.c @@ -56,6 +56,8 @@ #define USE_GFX_RESET_ONLY_WHEN_MOVING (USE_NEW_STUFF * 1) #define USE_GFX_RESET_PLAYER_ARTWORK (USE_NEW_STUFF * 1) +#define USE_FIX_KILLED_BY_NON_WALKABLE (USE_NEW_STUFF * 1) + /* for DigField() */ #define DF_NO_PUSH 0 @@ -1932,8 +1934,10 @@ void InitGame() player->drop_delay = 0; player->drop_pressed_delay = 0; - player->last_jx = player->last_jy = 0; - player->jx = player->jy = 0; + player->last_jx = -1; + player->last_jy = -1; + player->jx = -1; + player->jy = -1; player->shield_normal_time_left = 0; player->shield_deadly_time_left = 0; @@ -8053,6 +8057,7 @@ static void CreateFieldExt(int x, int y, int element, boolean is_change) #if USE_NEW_CUSTOM_VALUE int last_ce_value = CustomValue[x][y]; #endif + boolean player_explosion_protected = PLAYER_EXPLOSION_PROTECTED(x, y); boolean new_element_is_player = ELEM_IS_PLAYER(new_element); boolean add_player_onto_element = (new_element_is_player && #if USE_CODE_THAT_BREAKS_SNAKE_BITE @@ -8116,6 +8121,15 @@ static void CreateFieldExt(int x, int y, int element, boolean is_change) /* check if element under the player changes from accessible to unaccessible (needed for special case of dropping element which then changes) */ /* (must be checked after creating new element for walkable group elements) */ +#if USE_FIX_KILLED_BY_NON_WALKABLE + if (IS_PLAYER(x, y) && !player_explosion_protected && + IS_ACCESSIBLE(old_element) && !IS_ACCESSIBLE(new_element)) + { + Bang(x, y); + + return; + } +#else if (IS_PLAYER(x, y) && !PLAYER_EXPLOSION_PROTECTED(x, y) && IS_ACCESSIBLE(old_element) && !IS_ACCESSIBLE(new_element)) { @@ -8123,6 +8137,7 @@ static void CreateFieldExt(int x, int y, int element, boolean is_change) return; } +#endif #endif /* "ChangeCount" not set yet to allow "entered by player" change one time */