X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fgame.c;h=bab2a31211f966ac2cfa56d2328e64da733fd4f6;hp=1e059f86912af4a5005697db90861defad8b83bd;hb=49600fe866a0590700a684593913fc5674332201;hpb=bbe4009dbf1fa4834bd3f0681772079c55401da2 diff --git a/src/game.c b/src/game.c index 1e059f86..bab2a312 100644 --- a/src/game.c +++ b/src/game.c @@ -2499,17 +2499,17 @@ void Explode(int ex, int ey, int phase, int mode) switch(StorePlayer[ex][ey]) { case EL_PLAYER_2: - Store[x][y] = EL_EMERALD_RED; + Store[x][y] = EL_PLAYER_IS_EXPLODING_2; break; case EL_PLAYER_3: - Store[x][y] = EL_EMERALD; + Store[x][y] = EL_PLAYER_IS_EXPLODING_3; break; case EL_PLAYER_4: - Store[x][y] = EL_EMERALD_PURPLE; + Store[x][y] = EL_PLAYER_IS_EXPLODING_4; break; case EL_PLAYER_1: default: - Store[x][y] = EL_EMERALD_YELLOW; + Store[x][y] = EL_PLAYER_IS_EXPLODING_1; break; } @@ -2656,6 +2656,17 @@ void Explode(int ex, int ey, int phase, int mode) Store[x][y] = Store2[x][y] = 0; GfxElement[x][y] = EL_UNDEFINED; + /* player can escape from explosions and might therefore be still alive */ + if (element >= EL_PLAYER_IS_EXPLODING_1 && + element <= EL_PLAYER_IS_EXPLODING_4) + Feld[x][y] = (stored_player[element - EL_PLAYER_IS_EXPLODING_1].active ? + EL_EMPTY : + element == EL_PLAYER_IS_EXPLODING_1 ? EL_EMERALD_YELLOW : + element == EL_PLAYER_IS_EXPLODING_2 ? EL_EMERALD_RED : + element == EL_PLAYER_IS_EXPLODING_3 ? EL_EMERALD : + EL_EMERALD_PURPLE); + + /* restore probably existing indestructible background element */ if (Back[x][y] && IS_INDESTRUCTIBLE(Back[x][y])) element = Feld[x][y] = Back[x][y]; Back[x][y] = 0; @@ -2666,8 +2677,11 @@ void Explode(int ex, int ey, int phase, int mode) ChangePage[x][y] = -1; InitField(x, y, FALSE); +#if 1 + /* !!! not needed !!! */ if (CAN_MOVE(element)) InitMovDir(x, y); +#endif DrawLevelField(x, y); TestIfElementTouchesCustomElement(x, y);